resolved error handling issue with requireAuth middleware

This commit is contained in:
Sheen Capadngan
2023-05-28 23:06:20 +08:00
parent b975115443
commit 8e972c704a
3 changed files with 61 additions and 57 deletions
-1
View File
@@ -166,7 +166,6 @@ const main = async () => {
); );
}); });
// await createTestUserForDevelopment();
setUpHealthEndpoint(server); setUpHealthEndpoint(server);
server.on("close", async () => { server.on("close", async () => {
+49 -46
View File
@@ -45,55 +45,58 @@ const requireAuth = ({
// validate auth token against accepted auth modes [acceptedAuthModes] // validate auth token against accepted auth modes [acceptedAuthModes]
// and return token type [authTokenType] and value [authTokenValue] // and return token type [authTokenType] and value [authTokenValue]
try {
const { authMode, authTokenValue } = validateAuthMode({
headers: req.headers,
acceptedAuthModes
});
const { authMode, authTokenValue } = validateAuthMode({ let authPayload: IUser | IServiceAccount | IServiceTokenData;
headers: req.headers, switch (authMode) {
acceptedAuthModes 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; req.requestData = {
switch (authMode) { ...req.params,
case AUTH_MODE_SERVICE_ACCOUNT: ...req.query,
authPayload = await getAuthSAAKPayload({ ...req.body,
authTokenValue }
});
req.serviceAccount = authPayload; req.authData = {
break; authMode,
case AUTH_MODE_SERVICE_TOKEN: authPayload, // User, ServiceAccount, ServiceTokenData
authPayload = await getAuthSTDPayload({ authChannel: getChannelFromUserAgent(req.headers['user-agent']),
authTokenValue authIP: req.ip,
}); authUserAgent: req.headers['user-agent'] ?? 'other'
req.serviceTokenData = authPayload; }
break;
case AUTH_MODE_API_KEY: return next();
authPayload = await getAuthAPIKeyPayload({ } catch (err) {
authTokenValue return next(err);
});
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();
} }
} }
+2
View File
@@ -24,6 +24,7 @@ import {
getMongoURL, getMongoURL,
getSentryDSN getSentryDSN
} from '../../config'; } from '../../config';
import { initializePassport } from '../auth';
/** /**
* Prepare Infisical upon startup. This includes tasks like: * Prepare Infisical upon startup. This includes tasks like:
@@ -48,6 +49,7 @@ export const setup = async () => {
// initializing the database connection // initializing the database connection
await DatabaseService.initDatabase(await getMongoURL()); await DatabaseService.initDatabase(await getMongoURL());
await initializePassport();
/** /**
* NOTE: the order in this setup function is critical. * NOTE: the order in this setup function is critical.