"use client"; import { getSession, signIn } from "next-auth/react"; import Link from "next/link"; import { useEffect, useState } from "react"; export default function LoginPage() { const [error, setError] = useState(null); const [showVerifyLink, setShowVerifyLink] = useState(false); const [registrationEnabled, setRegistrationEnabled] = useState( null ); const [registered, setRegistered] = useState(false); const [prefillEmail, setPrefillEmail] = useState(""); const [emailVerificationRequired, setEmailVerificationRequired] = useState(true); useEffect(() => { if (typeof window === "undefined") return; const params = new URLSearchParams(window.location.search); setRegistered(params.get("registered") === "1"); setPrefillEmail(params.get("email") || ""); }, []); useEffect(() => { const loadRegistration = async () => { try { const response = await fetch("/api/settings/registration"); if (!response.ok) return; const payload = await response.json(); setRegistrationEnabled(payload.registrationEnabled !== false); setEmailVerificationRequired(payload.emailVerificationRequired !== false); } catch { setRegistrationEnabled(true); setEmailVerificationRequired(true); } }; loadRegistration(); }, []); const onSubmit = async (event: React.FormEvent) => { event.preventDefault(); setError(null); setShowVerifyLink(false); const formData = new FormData(event.currentTarget); const email = formData.get("email") as string; const password = formData.get("password") as string; const result = await signIn("credentials", { email, password, redirect: false, callbackUrl: "/" }); if (!result) { setError("Login fehlgeschlagen."); return; } if (result?.error) { if (result.error === "PENDING") { setError("Dein Konto wartet auf Freischaltung durch einen Admin."); return; } if (result.error === "EMAIL_NOT_VERIFIED") { setError("Bitte bestätige zuerst deine E-Mail."); setShowVerifyLink(true); return; } if (result.error === "LOCKED") { setError("Zu viele Versuche. Bitte später erneut versuchen."); return; } if (result.error === "RATE_LIMIT") { setError("Zu viele Anfragen. Bitte später erneut versuchen."); return; } setError("Login fehlgeschlagen."); return; } if (result?.ok) { setShowVerifyLink(false); const session = await getSession(); if (!session?.user) { setError("Login fehlgeschlagen."); return; } window.location.href = result.url || "/"; } }; return (

Login

Bitte anmelden.

{registered && (
{emailVerificationRequired ? "Account erstellt. Bitte E-Mail bestätigen und auf die Freischaltung durch einen Admin warten." : "Account erstellt. Bitte auf die Freischaltung durch einen Admin warten."}
)}
{error &&

{error}

} {registrationEnabled !== false && (

Kein Konto?{" "} Registrieren

)}

Passwort vergessen?{" "} Zurücksetzen

{showVerifyLink && (

E-Mail nicht bestätigt?{" "} Link erneut senden

)}
); }