import type { Metadata } from "next"; import { redirect } from "next/navigation"; import { AnmeldeRahmen } from "@/components/anmeldung/AnmeldeRahmen"; import { KontoFormular } from "@/components/anmeldung/KontoFormular"; import { buttonKlassen, Formularfehler } from "@/components/ui"; import { lokaleKontenAktiv } from "@/lib/lokale-konten"; import { sicheresZiel } from "@/server/auth/anmeldung"; import { oidcAktiv, oidcName } from "@/server/auth/oidc"; import { angemeldet } from "@/server/auth/sitzungspflicht"; export const metadata: Metadata = { title: "Anmelden" }; /** Codes aus /api/auth/oidc/rueckruf – nie der Meldungstext selbst in der Adresse. */ const FEHLER: Record = { "oidc-aus": "Die Anmeldung über den Identitätsanbieter ist nicht eingerichtet.", "oidc-start": "Der Identitätsanbieter ist nicht erreichbar. Bitte später erneut versuchen.", "oidc-rueckruf": "Die Anmeldung beim Identitätsanbieter ist fehlgeschlagen. Bitte erneut versuchen.", "keine-gruppe": "Ihr Konto ist keiner SSHKeyVault-Gruppe zugeordnet. Bitte beim Administrator Zugriff beantragen.", "konto-konflikt": "Für diese E-Mail-Adresse besteht bereits ein anderes Konto. Bitte den Administrator ansprechen.", deaktiviert: "Dieses Konto ist deaktiviert.", "fremdes-konto": "Die Bestätigung kam von einem anderen Konto als dem angemeldeten.", allgemein: "Die Anmeldung ist fehlgeschlagen.", }; export default async function AnmeldenSeite({ searchParams, }: { searchParams: Promise<{ ziel?: string; fehler?: string; abgemeldet?: string }>; }) { const parameter = await searchParams; const ziel = sicheresZiel(parameter.ziel); if (await angemeldet()) redirect(ziel); const oidc = oidcAktiv(); const lokal = lokaleKontenAktiv(); const fehler = parameter.fehler ? (FEHLER[parameter.fehler] ?? FEHLER["allgemein"]) : undefined; return (
{oidc ? ( // Ein echter Link statt next/link: die Route leitet zum Anbieter weiter, ein // Vorladen durch den Router wuerde einen Anmeldefluss anstossen. Mit {oidcName()} anmelden ) : (

{lokal ? "Kein Identitätsanbieter eingerichtet – Anmeldung mit lokalem Konto." : "Kein Identitätsanbieter eingerichtet – nur der Notfallzugang ist aktiv."}

)}
{lokal ? "Lokales Konto oder Notfallzugang" : "Notfallzugang"}
); }