"use client"; import { useState, useEffect } from "react"; import { useRouter } from "next/navigation"; import { login } from "@/lib/api"; import { getCachedUser, setCachedUser, clearAuthCache } from "@/lib/auth-cache"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Label } from "@/components/ui/label"; export default function LoginPage() { const router = useRouter(); const [username, setUsername] = useState(""); const [password, setPassword] = useState(""); const [error, setError] = useState(""); const [loading, setLoading] = useState(false); const ADMIN_ROLES = ["auditor", "admin", "domain_admin", "superadmin"]; useEffect(() => { // Only redirect if we have a cached session — no API call, no loop risk const cached = getCachedUser(); if (cached !== null) { router.replace(ADMIN_ROLES.includes(cached.role) ? "/admin/login" : "/search"); } }, [router]); // eslint-disable-line react-hooks/exhaustive-deps async function handleSubmit(e: React.FormEvent) { e.preventDefault(); setError(""); setLoading(true); try { clearAuthCache(); const res = await login(username, password); const role = res?.user?.role ?? ""; if (ADMIN_ROLES.includes(role)) { setError("ADMIN_REDIRECT"); return; } setCachedUser({ username: res.user.username, email: res.user.email, role, list_page_size: res.user.list_page_size }); router.push("/search"); } catch { setError("Anmeldung fehlgeschlagen. Bitte Zugangsdaten pruefen."); } finally { setLoading(false); } } return (
archivmail

E-Mail-Archiv Anmeldung

setUsername(e.target.value)} required autoComplete="email" aria-label="E-Mail-Adresse" />
setPassword(e.target.value)} required autoComplete="current-password" aria-label="Passwort" />
{error && error !== "ADMIN_REDIRECT" && (

{error}

)} {error === "ADMIN_REDIRECT" && (

Admins und Auditoren bitte{" "} hier anmelden .

)}
Passwort vergessen? Noch kein Account? Registrieren Admin- / Auditor-Login
); }