From 8e972c704abf10e069284ed49772aa973cbc9710 Mon Sep 17 00:00:00 2001 From: Sheen Capadngan Date: Sun, 28 May 2023 23:06:20 +0800 Subject: [PATCH] resolved error handling issue with requireAuth middleware --- backend/src/index.ts | 1 - backend/src/middleware/requireAuth.ts | 99 ++++++++++++++------------- backend/src/utils/setup/index.ts | 18 ++--- 3 files changed, 61 insertions(+), 57 deletions(-) diff --git a/backend/src/index.ts b/backend/src/index.ts index b77da9fb2..f7a813323 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -166,7 +166,6 @@ const main = async () => { ); }); - // await createTestUserForDevelopment(); setUpHealthEndpoint(server); server.on("close", async () => { diff --git a/backend/src/middleware/requireAuth.ts b/backend/src/middleware/requireAuth.ts index fce9099eb..f9054b838 100644 --- a/backend/src/middleware/requireAuth.ts +++ b/backend/src/middleware/requireAuth.ts @@ -42,58 +42,61 @@ const requireAuth = ({ acceptedAuthModes: string[]; }) => { return async (req: Request, res: Response, next: NextFunction) => { - + // validate auth token against accepted auth modes [acceptedAuthModes] // and return token type [authTokenType] and value [authTokenValue] - - const { authMode, authTokenValue } = validateAuthMode({ - headers: req.headers, - acceptedAuthModes - }); + try { + const { authMode, authTokenValue } = validateAuthMode({ + headers: req.headers, + acceptedAuthModes + }); - let authPayload: IUser | IServiceAccount | IServiceTokenData; - switch (authMode) { - case AUTH_MODE_SERVICE_ACCOUNT: - authPayload = await getAuthSAAKPayload({ - authTokenValue - }); - req.serviceAccount = authPayload; - break; - case AUTH_MODE_SERVICE_TOKEN: - authPayload = await getAuthSTDPayload({ - authTokenValue - }); - req.serviceTokenData = authPayload; - break; - case AUTH_MODE_API_KEY: - authPayload = await getAuthAPIKeyPayload({ - authTokenValue - }); - req.user = authPayload; - break; - default: - authPayload = await getAuthUserPayload({ - authTokenValue - }); - req.user = authPayload; - break; + let authPayload: IUser | IServiceAccount | IServiceTokenData; + switch (authMode) { + case AUTH_MODE_SERVICE_ACCOUNT: + authPayload = await getAuthSAAKPayload({ + authTokenValue + }); + req.serviceAccount = authPayload; + break; + case AUTH_MODE_SERVICE_TOKEN: + authPayload = await getAuthSTDPayload({ + authTokenValue + }); + req.serviceTokenData = authPayload; + break; + case AUTH_MODE_API_KEY: + authPayload = await getAuthAPIKeyPayload({ + authTokenValue + }); + req.user = authPayload; + break; + default: + authPayload = await getAuthUserPayload({ + authTokenValue + }); + req.user = authPayload; + break; + } + + req.requestData = { + ...req.params, + ...req.query, + ...req.body, + } + + req.authData = { + authMode, + authPayload, // User, ServiceAccount, ServiceTokenData + authChannel: getChannelFromUserAgent(req.headers['user-agent']), + authIP: req.ip, + authUserAgent: req.headers['user-agent'] ?? 'other' + } + + return next(); + } catch (err) { + return next(err); } - - req.requestData = { - ...req.params, - ...req.query, - ...req.body, - } - - req.authData = { - authMode, - authPayload, // User, ServiceAccount, ServiceTokenData - authChannel: getChannelFromUserAgent(req.headers['user-agent']), - authIP: req.ip, - authUserAgent: req.headers['user-agent'] ?? 'other' - } - - return next(); } } diff --git a/backend/src/utils/setup/index.ts b/backend/src/utils/setup/index.ts index c59a974d0..e56af41f3 100644 --- a/backend/src/utils/setup/index.ts +++ b/backend/src/utils/setup/index.ts @@ -9,21 +9,22 @@ const { patchRouterParam } = require('../patchAsyncRoutes'); import { validateEncryptionKeysConfig } from './validateConfig'; -import { - backfillSecretVersions, +import { + backfillSecretVersions, backfillBots, - backfillSecretBlindIndexData, + backfillSecretBlindIndexData, backfillEncryptionMetadata } from './backfillData'; import { reencryptBotPrivateKeys, reencryptSecretBlindIndexDataSalts } from './reencryptData'; -import { +import { getNodeEnv, getMongoURL, getSentryDSN } from '../../config'; +import { initializePassport } from '../auth'; /** * Prepare Infisical upon startup. This includes tasks like: @@ -42,13 +43,14 @@ export const setup = async () => { // initializing SMTP configuration setTransporter(await initSmtp()); - + // initializing global feature set await EELicenseService.initGlobalFeatureSet(); - + // initializing the database connection await DatabaseService.initDatabase(await getMongoURL()); - + await initializePassport(); + /** * NOTE: the order in this setup function is critical. * It is important to backfill data before performing any re-encryption functionality. @@ -59,7 +61,7 @@ export const setup = async () => { await backfillBots(); await backfillSecretBlindIndexData(); await backfillEncryptionMetadata(); - + // re-encrypt any data previously encrypted under server hex 128-bit ENCRYPTION_KEY // to base64 256-bit ROOT_ENCRYPTION_KEY await reencryptBotPrivateKeys();