import { useEffect, useState } from "react"; import { Link } from "react-router-dom"; import { useTranslation } from "react-i18next"; import { useAuth } from "../auth"; import { api, ApiError } from "../api"; import { useToast } from "../toast"; import Icon from "../components/Icon"; import PasswordInput from "../components/PasswordInput"; import PasswordRules from "../components/PasswordRules"; import Geraetemarken from "./settings/Geraetemarken"; import { DEFAULT_POLICY, meetsPolicy } from "../passwordPolicy"; /** * „Mein Konto" – persönlicher Sicherheitsbereich jedes Benutzers: eigenes * Passwort ändern und Zwei-Faktor verwalten (das eigentliche 2FA-Setup lebt * unter /zwei-faktor). Fremde Nutzer verwaltet der Admin unter „Benutzer". */ export default function Account() { const { aktualisieren } = useAuth(); const { t } = useTranslation(); const toast = useToast(); const [current, setCurrent] = useState(""); const [next, setNext] = useState(""); const [repeat, setRepeat] = useState(""); const [policy, setPolicy] = useState(DEFAULT_POLICY); const [tfa, setTfa] = useState(null); const [fehler, setFehler] = useState(null); const [busy, setBusy] = useState(false); useEffect(() => { api.getPolicy().then(setPolicy).catch(() => {}); api.twoFactorStatus().then(setTfa).catch(() => {}); }, []); const regelnErfuellt = meetsPolicy(policy, next, t); const bereit = regelnErfuellt && next === repeat && current.length > 0 && !busy; async function onSubmit(e) { e.preventDefault(); setFehler(null); if (next !== repeat) { setFehler(t("changepw.mismatch")); return; } setBusy(true); try { const updated = await api.changePassword(current, next); aktualisieren(updated); setCurrent(""); setNext(""); setRepeat(""); toast(t("changepw.saved")); } catch (err) { setFehler(err instanceof ApiError ? err.message : t("server.unreachable")); } finally { setBusy(false); } } return (

{t("account.title")}

{t("account.password")}

{fehler && (
{fehler}
)} {repeat && next !== repeat && ( {t("changepw.mismatch")} )}

{t("account.twoFactor")}

{t("settings.securityHint")}

{tfa?.enabled ? t("twofactor.on") : t("twofactor.off")}

{tfa?.enabled ? t("account.manage2fa") : t("settings.twoFactor")}
); }