import { NextResponse, type NextRequest } from "next/server"; import { createClient } from "@/lib/supabase/server"; // Rückweg aus Entra ID. @supabase/ssr benutzt PKCE, das heisst der Anbieter // liefert einen einmaligen Code, der hier gegen eine Sitzung getauscht wird. // Ohne diese Route landet die Anmeldung in einer Schleife: der Code steht in // der URL, aber es entsteht nie ein Sitzungscookie, und der Proxy schickt // zurück auf /login. export async function GET(request: NextRequest) { const { searchParams, origin } = request.nextUrl; // Entra meldet abgelehnte Zustimmung oder gesperrte Konten als Fehler // zurück. Der Text daraus wird nicht angezeigt — er ist fremdbestimmt und // stünde sonst auf der echten, korrekt gebrandeten Anmeldeseite. if (searchParams.get("error")) { return NextResponse.redirect(`${origin}/login?error=sso_failed`); } const code = searchParams.get("code"); if (!code) return NextResponse.redirect(`${origin}/login?error=sso_failed`); const supabase = await createClient(); const { error } = await supabase.auth.exchangeCodeForSession(code); if (error) return NextResponse.redirect(`${origin}/login?error=sso_failed`); // Ob die Person HR-Zugriff hat, entscheidet nicht diese Route, sondern // proxy.ts anhand von profiles.role/is_active — und darunter, unabhängig // davon, die RLS-Policies. Hier wird nur die Sitzung hergestellt. return NextResponse.redirect(`${origin}/`); }