[next] Moderation Queues (#2098)

* fix: edit comment fix for reactions

* feat: Comment Queue Counts

- Removed "remove flag"
- Rearranged moderation services
- Rearranged comment counts on stories
- Added moderation queue counts to stories
- Added comments edge
- Improved Cursor/Connection types
- Improved count updators for stories

* feat: added shared comment counts and queues

- Added new AugmentedRedis type
- Added more log calls
- Update counts in shared counter as well
- Return a Query level Moderation Queue

* fix: fixed test
This commit is contained in:
Wyatt Johnson
2018-12-07 00:37:33 +01:00
committed by Kiwi
parent 5b62082693
commit 4584c3d4fb
53 changed files with 2444 additions and 768 deletions
+2 -2
View File
@@ -2,7 +2,6 @@ import cons from "consolidate";
import cors from "cors";
import { Express } from "express";
import http from "http";
import { Redis } from "ioredis";
import { Db } from "mongodb";
import nunjucks from "nunjucks";
import path from "path";
@@ -16,6 +15,7 @@ import { handleSubscriptions } from "talk-server/graph/common/subscriptions/midd
import { Schemas } from "talk-server/graph/schemas";
import { TaskQueue } from "talk-server/queue";
import { JWTSigningConfig } from "talk-server/services/jwt";
import { AugmentedRedis } from "talk-server/services/redis";
import TenantCache from "talk-server/services/tenant/cache";
import { accessLogger, errorLogger } from "./middleware/logging";
@@ -27,7 +27,7 @@ export interface AppOptions {
queue: TaskQueue;
config: Config;
mongo: Db;
redis: Redis;
redis: AugmentedRedis;
schemas: Schemas;
signingConfig: JWTSigningConfig;
tenantCache: TenantCache;
@@ -1,15 +1,15 @@
import { RequestHandler } from "express-jwt";
import { Redis } from "ioredis";
import { Db } from "mongodb";
import { Config } from "talk-common/config";
import TenantContext from "talk-server/graph/tenant/context";
import { TaskQueue } from "talk-server/queue";
import { AugmentedRedis } from "talk-server/services/redis";
import { Request } from "talk-server/types/express";
export interface TenantContextMiddlewareOptions {
mongo: Db;
redis: Redis;
redis: AugmentedRedis;
queue: TaskQueue;
config: Config;
}
@@ -4,6 +4,7 @@ import Joi from "joi";
import jwt from "jsonwebtoken";
import { Db } from "mongodb";
import passport, { Authenticator } from "passport";
import now from "performance-now";
import { Config } from "talk-common/config";
import FacebookStrategy from "talk-server/app/middleware/passport/strategies/facebook";
@@ -12,6 +13,7 @@ import { JWTStrategy } from "talk-server/app/middleware/passport/strategies/jwt"
import { createLocalStrategy } from "talk-server/app/middleware/passport/strategies/local";
import OIDCStrategy from "talk-server/app/middleware/passport/strategies/oidc";
import { validate } from "talk-server/app/request/body";
import logger from "talk-server/logger";
import { User } from "talk-server/models/user";
import {
blacklistJWT,
@@ -149,11 +151,18 @@ export const wrapAuthn = (
signingConfig: JWTSigningConfig,
name: string,
options?: any
): RequestHandler => (req: Request, res, next) =>
): RequestHandler => (req: Request, res, next) => {
const startTime = now();
authenticator.authenticate(
name,
{ ...options, session: false },
(err: Error | null, user: User | null) => {
// Compute the end time.
const responseTime = Math.round(now() - startTime);
logger.debug({ responseTime }, "user token generated");
if (err) {
return next(err);
}
@@ -165,3 +174,4 @@ export const wrapAuthn = (
handleSuccessfulLogin(user, signingConfig, req, res, next);
}
)(req, res, next);
};
@@ -1,7 +1,9 @@
import { Redis } from "ioredis";
import jwt from "jsonwebtoken";
import { Db } from "mongodb";
import now from "performance-now";
import logger from "talk-server/logger";
import { Tenant } from "talk-server/models/tenant";
import { retrieveUser } from "talk-server/models/user";
import { checkBlacklistJWT, JWTSigningConfig } from "talk-server/services/jwt";
@@ -46,12 +48,19 @@ export class JWTVerifier {
}
public async verify(tokenString: string, token: JWTToken, tenant: Tenant) {
const startTime = now();
// Verify that the token is valid. This will throw an error if it isn't.
jwt.verify(tokenString, this.signingConfig.secret, {
issuer: tenant.id,
algorithms: [this.signingConfig.algorithm],
});
// Compute the end time.
const responseTime = Math.round(now() - startTime);
logger.trace({ responseTime }, "jwt verification complete");
// Check to see if the token has been blacklisted, as these tokens can be
// revoked.
await checkBlacklistJWT(this.redis, token.jti);