misc: moved authenticate to preValidation

This commit is contained in:
Sheen Capadngan
2024-06-21 22:22:34 +08:00
parent 193d6dad54
commit 52fcf53d0e
+33 -27
View File
@@ -60,44 +60,50 @@ export const registerOidcRouter = async (server: FastifyZodProvider) => {
callbackPort: z.string().trim().optional() callbackPort: z.string().trim().optional()
}) })
}, },
handler: async (req, res) => { preValidation: [
const { orgSlug, callbackPort } = req.query; async (req, res) => {
const { orgSlug, callbackPort } = req.query;
// ensure fresh session state per login attempt // ensure fresh session state per login attempt
await req.session.regenerate(); await req.session.regenerate();
req.session.set<any>("oidcOrgSlug", orgSlug); req.session.set<any>("oidcOrgSlug", orgSlug);
if (callbackPort) { if (callbackPort) {
req.session.set<any>("callbackPort", callbackPort); req.session.set<any>("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); handler: () => {}
(
passport.authenticate(oidcStrategy as Strategy, {
scope: "profile email openid"
}) as any
)(req, res);
}
}); });
// callback route after login from IDP // callback route after login from IDP
server.route({ server.route({
url: "/callback", url: "/callback",
method: "GET", method: "GET",
preValidation: [
async (req, res) => {
const oidcOrgSlug = req.session.get<any>("oidcOrgSlug");
const callbackPort = req.session.get<any>("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) => { handler: async (req, res) => {
const oidcOrgSlug = req.session.get<any>("oidcOrgSlug");
const callbackPort = req.session.get<any>("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(); await req.session.destroy();
if (req.passportUser.isUserCompleted) { if (req.passportUser.isUserCompleted) {