"use client"; import { useRouter, useSearchParams } from "next/navigation"; import { Suspense, useState } from "react"; import { ImmbotLogo, UqoLogo } from "@/components/logo"; import { Button, Card, Input, Label, Spinner } from "@/components/ui"; function ChangePasswordForm() { const router = useRouter(); const forced = useSearchParams().get("force") === "1"; const [current, setCurrent] = useState(""); const [next, setNext] = useState(""); const [confirm, setConfirm] = useState(""); const [error, setError] = useState(null); const [loading, setLoading] = useState(false); async function submit(e: React.FormEvent) { e.preventDefault(); setError(null); if (next !== confirm) return setError("La confirmation ne correspond pas."); setLoading(true); try { const res = await fetch("/api/auth/change-password", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ currentPassword: current, newPassword: next }), }); const data = await res.json(); if (!res.ok) return setError(data.error ?? "Erreur."); router.push("/chat"); router.refresh(); } catch { setError("Impossible de joindre le serveur."); } finally { setLoading(false); } } return (

Changer le mot de passe

{forced ? (

Sécurité : le mot de passe initial doit être remplacé avant d'utiliser la plateforme. Choisissez un mot de passe fort et unique.

) : (

Choisissez un nouveau mot de passe (10 caractères minimum).

)}
setCurrent(e.target.value)} autoComplete="current-password" required autoFocus />
setNext(e.target.value)} autoComplete="new-password" required minLength={10} />
setConfirm(e.target.value)} autoComplete="new-password" required minLength={10} />
{error &&

{error}

}
); } export default function ChangePasswordPage() { return (
); }