From bafcdb2fee5445cc6cade7f4c089db5f9f091695 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Mon, 4 Dec 2023 14:56:26 +0800 Subject: [PATCH] skip rate limiter for system requests --- packages/api/src/resolvers/types.ts | 1 + packages/api/src/server.ts | 11 ++++++++--- packages/api/src/utils/auth.ts | 14 ++++++++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/packages/api/src/resolvers/types.ts b/packages/api/src/resolvers/types.ts index 759ff718a..6c842d650 100644 --- a/packages/api/src/resolvers/types.ts +++ b/packages/api/src/resolvers/types.ts @@ -13,6 +13,7 @@ export interface Claims { scope?: string // scope is used for api key like page:search exp?: number email?: string + system?: boolean } export type ClaimsToSet = { diff --git a/packages/api/src/server.ts b/packages/api/src/server.ts index 888383e66..1bb75a085 100755 --- a/packages/api/src/server.ts +++ b/packages/api/src/server.ts @@ -37,7 +37,11 @@ import { webhooksServiceRouter } from './routers/svc/webhooks' import { textToSpeechRouter } from './routers/text_to_speech' import { userRouter } from './routers/user_router' import { sentryConfig } from './sentry' -import { getClaimsByToken, getTokenByRequest } from './utils/auth' +import { + getClaimsByToken, + getTokenByRequest, + isSystemRequest, +} from './utils/auth' import { corsConfig } from './utils/corsConfig' import { buildLogger, buildLoggerTransport } from './utils/logger' @@ -79,8 +83,9 @@ export const createApp = (): { keyGenerator: (req) => { return getTokenByRequest(req) || req.ip }, - // skip preflight requests and test requests - skip: (req) => req.method === 'OPTIONS' || env.dev.isLocal, + // skip preflight requests and test requests and system requests + skip: (req) => + req.method === 'OPTIONS' || env.dev.isLocal || isSystemRequest(req), }) // Apply the rate limiting middleware to API calls only diff --git a/packages/api/src/utils/auth.ts b/packages/api/src/utils/auth.ts index 1f2926a65..a4f206574 100644 --- a/packages/api/src/utils/auth.ts +++ b/packages/api/src/utils/auth.ts @@ -133,3 +133,17 @@ export const getTokenByRequest = (req: express.Request): string | undefined => { (req.cookies?.auth as string) ) } + +export const isSystemRequest = (req: express.Request): boolean => { + const token = getTokenByRequest(req) + if (!token) { + return false + } + + try { + const claims = jwt.decode(token) as Claims + return !claims.system + } catch (e) { + return false + } +}