From 52fcf53d0e3178d143b2b869adb9445b2e69199f Mon Sep 17 00:00:00 2001 From: Sheen Capadngan Date: Fri, 21 Jun 2024 22:22:34 +0800 Subject: [PATCH] misc: moved authenticate to preValidation --- backend/src/ee/routes/v1/oidc-router.ts | 60 ++++++++++++++----------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/backend/src/ee/routes/v1/oidc-router.ts b/backend/src/ee/routes/v1/oidc-router.ts index 2f01c79ca..e675121e9 100644 --- a/backend/src/ee/routes/v1/oidc-router.ts +++ b/backend/src/ee/routes/v1/oidc-router.ts @@ -60,44 +60,50 @@ export const registerOidcRouter = async (server: FastifyZodProvider) => { callbackPort: z.string().trim().optional() }) }, - handler: async (req, res) => { - const { orgSlug, callbackPort } = req.query; + preValidation: [ + async (req, res) => { + const { orgSlug, callbackPort } = req.query; - // ensure fresh session state per login attempt - await req.session.regenerate(); + // ensure fresh session state per login attempt + await req.session.regenerate(); - req.session.set("oidcOrgSlug", orgSlug); + req.session.set("oidcOrgSlug", orgSlug); - if (callbackPort) { - req.session.set("callbackPort", callbackPort); + if (callbackPort) { + req.session.set("callbackPort", callbackPort); + } + + const oidcStrategy = await server.services.oidc.getOrgAuthStrategy(orgSlug, callbackPort); + return ( + passport.authenticate(oidcStrategy as Strategy, { + scope: "profile email openid" + }) as any + )(req, res); } - - const oidcStrategy = await server.services.oidc.getOrgAuthStrategy(orgSlug, callbackPort); - ( - passport.authenticate(oidcStrategy as Strategy, { - scope: "profile email openid" - }) as any - )(req, res); - } + ], + handler: () => {} }); // callback route after login from IDP server.route({ url: "/callback", method: "GET", + preValidation: [ + async (req, res) => { + const oidcOrgSlug = req.session.get("oidcOrgSlug"); + const callbackPort = req.session.get("callbackPort"); + const oidcStrategy = await server.services.oidc.getOrgAuthStrategy(oidcOrgSlug, callbackPort); + + return ( + passport.authenticate(oidcStrategy as Strategy, { + failureRedirect: "/api/v1/sso/oidc/login/error", + session: false, + failureMessage: true + }) as any + )(req, res); + } + ], handler: async (req, res) => { - const oidcOrgSlug = req.session.get("oidcOrgSlug"); - const callbackPort = req.session.get("callbackPort"); - const oidcStrategy = await server.services.oidc.getOrgAuthStrategy(oidcOrgSlug, callbackPort); - - await ( - passport.authenticate(oidcStrategy as Strategy, { - failureRedirect: "/api/v1/sso/oidc/login/error", - session: false, - failureMessage: true - }) as any - )(req, res); - await req.session.destroy(); if (req.passportUser.isUserCompleted) {