import { useState } from 'react'; import { changePin, regenerateRecoveryCode, resetIdentity } from '../lib/userIdentity'; import { PinInput } from './PinInput'; import { ShieldIcon, SpinnerIcon } from './icons'; interface Props { userId: string } export function SecurityCenter({ userId }: Props) { const [pinOld, setPinOld] = useState(''); const [pinNew, setPinNew] = useState(''); const [busy, setBusy] = useState(false); const [msg, setMsg] = useState(null); const [recovery, setRecovery] = useState(null); async function handleChangePin() { setBusy(true); setMsg(null); try { await changePin({ userId, oldPin: pinOld, newPin: pinNew }); setMsg('PIN geändert.'); setPinOld(''); setPinNew(''); } catch (err) { setMsg(err instanceof Error ? err.message : String(err)); } finally { setBusy(false); } } async function handleRegenerateRecovery() { setBusy(true); setMsg(null); try { setRecovery(await regenerateRecoveryCode({ userId })); } catch (err) { setMsg(err instanceof Error ? err.message : String(err)); } finally { setBusy(false); } } async function handleReset() { if (!window.confirm('Identität wirklich zurücksetzen? Alle bisherigen Chats werden für dich unlesbar.')) return; setBusy(true); setMsg(null); try { const code = await resetIdentity({ userId, pin: pinNew || pinOld }); setRecovery(code); setMsg('Identität zurückgesetzt.'); } catch (err) { setMsg(err instanceof Error ? err.message : String(err)); } finally { setBusy(false); } } return (

Sicherheit

PIN ändern

Recovery-Code

{recovery && (
{recovery}
)}

Identität zurücksetzen

Erstellt einen neuen Schlüssel. Alle alten Chats werden unlesbar.

{msg &&

{msg}

}
); }