import { NextResponse } from "next/server"; import { withFlash } from "@/lib/flash"; import { getBaseUrl } from "@/lib/url"; import { setEntraOAuthCookie } from "@/lib/auth"; import { signEntraOAuthState } from "@/lib/session"; import { isEntraConfigured, buildEntraAuthorizeUrl, generatePkcePair, generateOAuthState } from "@/lib/entra"; /** * Startet die Microsoft-Anmeldung ("Mit Microsoft anmelden" auf /konto): * erzeugt PKCE-Paar + CSRF-state, hinterlegt beides in einem kurzlebigen, * signierten Cookie (siehe lib/session.ts ENTRA_OAUTH_COOKIE) und leitet zu * Microsofts /authorize-Endpunkt weiter. */ export async function GET() { if (!isEntraConfigured()) { return withFlash( NextResponse.redirect(new URL("/konto", getBaseUrl())), "error", "SSO ist noch nicht konfiguriert. Bitte melde dich mit E-Mail und Passwort an." ); } const { codeVerifier, codeChallenge } = generatePkcePair(); const state = generateOAuthState(); const cookieToken = await signEntraOAuthState(state, codeVerifier); await setEntraOAuthCookie(cookieToken); return NextResponse.redirect(buildEntraAuthorizeUrl({ state, codeChallenge })); }