import type { Metadata } from "next"; import { redirect } from "next/navigation"; import { LoginForm, SetupForm } from "@/components/auth-forms"; import { Icon } from "@/components/icons"; import { Notice } from "@/components/ui"; import { getActor, isAuthEnabled, isSetupOpen } from "@/lib/auth/actor"; import { getOidcConfig, isOidcEnabled } from "@/lib/auth/oidc"; import { MIN_PASSWORD_LENGTH } from "@/lib/auth/password"; export const metadata: Metadata = { title: "Anmelden" }; export const dynamic = "force-dynamic"; type PageProps = { searchParams: Promise<{ fehler?: string }> }; export default async function SignInPage({ searchParams }: PageProps) { // Ohne Anmeldung gibt es hier nichts zu tun. if (!isAuthEnabled()) redirect("/"); const actor = await getActor(); if (actor.kind === "user") redirect("/"); const setup = await isSetupOpen(); const { fehler } = await searchParams; // Eine unvollständige OIDC-Konfiguration soll die Anmeldeseite nicht // unbenutzbar machen — dann bleibt wenigstens das Passwortfeld. let oidc: { label: string; nurOidc: boolean } | null = null; let oidcFehler: string | null = null; if (isOidcEnabled()) { try { const config = getOidcConfig(); oidc = { label: config.buttonLabel, nurOidc: !config.allowLocalLogin }; } catch (error) { oidcFehler = error instanceof Error ? error.message : "Die Anmeldung über den externen Anbieter ist nicht eingerichtet."; } } // Bei reiner Anbieter-Anmeldung gibt es keine Ersteinrichtung mit Passwort: // Der erste, der sich über den Anbieter anmeldet, wird Administrator. const zeigeFormular = !oidc?.nurOidc; return (

{setup && zeigeFormular ? "Ersteinrichtung" : "Anmelden"}

{setup && zeigeFormular ? "Es gibt noch keinen Benutzer. Lege jetzt den ersten Administrator an — danach ist diese Seite geschlossen." : "Bitte melde dich an, um QR-Codes zu erstellen und zu verwalten."}

{fehler ? {fehler} : null} {oidcFehler ? {oidcFehler} : null} {oidc ? ( {oidc.label} ) : null} {oidc && zeigeFormular ? (
oder mit Passwort
) : null} {zeigeFormular ? ( setup ? ( ) : ( ) ) : null} {setup && zeigeFormular ? ( Der erste Benutzer wird Administrator der Installation und darf Gruppen, Benutzer und die QR-Typen verwalten. ) : oidc?.nurOidc ? ( /* Bewusst kein Hinweis darauf, dass die Passwort-Anmeldung abgeschaltet ist. Diese Seite sieht jeder, der die Adresse kennt — wie die Anmeldung eingerichtet ist, geht Fremde nichts an. Wer hierher gehört, sieht den einen Knopf und weiß, was zu tun ist. Beim allerersten Aufruf ist der Hinweis dagegen nützlich. */ setup ? (

Wer sich zuerst anmeldet, wird Administrator dieser Installation.

) : null ) : (

Passwort vergessen? Ein Administrator kann es unter Verwaltung → Benutzer zurücksetzen.

)}
); }