'use client'; import { useEffect, useState, type FormEvent } from 'react'; import { useRouter } from 'next/navigation'; import Link from 'next/link'; import { api, errMsg, setCsrf } from '@/lib/api'; import { useSession } from '@/lib/session'; import { Alert, Field } from '@/components/ui'; export default function Login() { const r = useRouter(); const { me, reload } = useSession(); const [step, setStep] = useState<'pw' | 'mfa'>('pw'); const [err, setErr] = useState(''); const [busy, setBusy] = useState(false); useEffect(() => { if (me?.pendingMfa) setStep('mfa'); else if (me) r.replace('/dashboard'); }, [me, r]); async function submit(e: FormEvent) { e.preventDefault(); setErr(''); setBusy(true); const f = new FormData(e.currentTarget); try { if (step === 'pw') { const res = await api<{ status: string; csrf: string }>('POST', '/auth/login', { email: f.get('email'), password: f.get('password') }); setCsrf(res.csrf); if (res.status === 'mfa_required') { await reload(); setStep('mfa'); } else { await reload(); r.replace('/dashboard'); } } else { await api('POST', '/auth/mfa/verify', { code: f.get('code') }); await reload(); r.replace('/dashboard'); } } catch (x) { setErr(errMsg(x)); } finally { setBusy(false); } } return (

{step === 'pw' ? 'Anmelden' : 'Zweiter Faktor'}

{err && {err}}
{step === 'pw' ? (<> ) : ( )}
{step === 'pw' &&

Passwort vergessen?

}
); }