/** * Catch-all route that delegates all /oidc/* requests to the oidc-provider. * * This exposes the standard OIDC endpoints: * /oidc/auth — authorization * /oidc/token — token exchange * /oidc/me — userinfo * /oidc/session/end — logout * /oidc/jwks — JSON Web Key Set */ import { getOidcProvider } from "../../utils/oidc-provider.js"; export default defineEventHandler(async (event) => { const provider = await getOidcProvider(); const { req, res } = event.node; // The provider's routes config includes the /oidc prefix, // so pass the full path through without stripping. // In production, Traefik sets X-Forwarded-Proto: https. Keep a defensive // assignment only if the header isn't already present, and never in dev // (where forcing https would make oidc-provider emit https://localhost URLs // that the browser can't reach). The provider has app.proxy = true, so it // honors whatever value is in this header. if ( process.env.NODE_ENV === "production" && !req.headers["x-forwarded-proto"] ) { req.headers["x-forwarded-proto"] = "https"; } // Hand off to oidc-provider's Connect-style callback const callback = provider.callback() as Function; await new Promise((resolve, reject) => { callback(req, res, (err: unknown) => { if (err) reject(err); else resolve(); }); }); });