[next] Perspective API Integration (#1797)

* feat: initial toxic comments impl

* feat: improved logging

* feat: tenant cache adapter

* feat: move more types into graphql
This commit is contained in:
Wyatt Johnson
2018-08-14 14:37:00 +00:00
committed by GitHub
parent d2106b3de5
commit 0b3aead1d2
33 changed files with 1088 additions and 417 deletions
+17
View File
@@ -4,3 +4,20 @@ export const apiErrorHandler: ErrorRequestHandler = (err, req, res, next) => {
// TODO: handle better when we improve errors.
res.status(500).json({ error: err.message });
};
export const errorHandler: ErrorRequestHandler = (err, req, res, next) => {
// TODO: handle better when we improve errors.
if (err.message === "not found") {
// TODO: handle better when we improve errors.
res
.status(404)
.send(err.message)
.end();
} else {
// TODO: handle better when we improve errors.
res
.status(500)
.send(err.message)
.end();
}
};
+5 -1
View File
@@ -39,6 +39,10 @@ export const accessLogger: RequestHandler = (req, res, next) => {
};
export const errorLogger: ErrorRequestHandler = (err, req, res, next) => {
logger.error(err, "http error");
// TODO: handle better when we improve errors.
if (err.message !== "not found") {
logger.error({ err }, "http error");
}
next(err);
};
@@ -2,6 +2,7 @@ import { NextFunction, RequestHandler, Response } from "express";
import { Db } from "mongodb";
import passport, { Authenticator } from "passport";
import { Config } from "talk-common/config";
import {
createJWTStrategy,
JWTSigningConfig,
@@ -22,6 +23,7 @@ export type VerifyCallback = (
) => void;
export interface PassportOptions {
config: Config;
mongo: Db;
signingConfig: JWTSigningConfig;
tenantCache: TenantCache;
@@ -5,6 +5,7 @@ import { Db } from "mongodb";
import { Strategy as OAuth2Strategy, VerifyCallback } from "passport-oauth2";
import { Strategy } from "passport-strategy";
import { Config } from "talk-common/config";
import { validate } from "talk-server/app/request/body";
import { reconstructURL } from "talk-server/app/url";
import { GQLUSER_ROLE } from "talk-server/graph/tenant/schema/__generated__/types";
@@ -12,6 +13,7 @@ import { OIDCAuthIntegration } from "talk-server/models/settings";
import { Tenant } from "talk-server/models/tenant";
import { OIDCProfile, retrieveUserWithProfile } from "talk-server/models/user";
import TenantCache from "talk-server/services/tenant/cache";
import { TenantCacheAdapter } from "talk-server/services/tenant/cache/adapter";
import { upsert } from "talk-server/services/users";
import { Request } from "talk-server/types/express";
@@ -177,25 +179,23 @@ const OIDC_SCOPE = "openid email profile";
export interface OIDCStrategyOptions {
mongo: Db;
tenantCache: TenantCache;
config: Config;
}
export default class OIDCStrategy extends Strategy {
public name = "oidc";
private mongo: Db;
private cache = new Map<string, StrategyItem>();
private cache: TenantCacheAdapter<StrategyItem>;
constructor({ mongo, tenantCache }: OIDCStrategyOptions) {
constructor({ mongo, tenantCache, config }: OIDCStrategyOptions) {
super();
this.mongo = mongo;
this.cache = new TenantCacheAdapter(tenantCache, config);
// Subscribe to updates with Tenants.
tenantCache.subscribe(tenant => {
// Delete the tenant cache item when the tenant changes. The refreshed
// Tenant will come in with the request.
this.cache.delete(tenant.id);
});
// Connect the cache adapter.
this.cache.subscribe();
}
private lookupJWKSClient(