"use client"; import { resetPassword, sendPassword } from "@/lib/server/password"; import { create } from "@zitadel/client"; import { ChecksSchema } from "@zitadel/proto/zitadel/session/v2/session_service_pb"; import { LoginSettings } from "@zitadel/proto/zitadel/settings/v2/login_settings_pb"; import { useRouter } from "next/navigation"; import { useState } from "react"; import { useTranslations } from "next-intl"; import { useForm } from "react-hook-form"; import { Alert, AlertType } from "./alert"; import { BackButton } from "./back-button"; import { Button, ButtonVariants } from "./button"; import { TextInput } from "./input"; import { Spinner } from "./spinner"; import { Translated } from "./translated"; import { handleServerActionResponse } from "@/lib/client-utils"; import { AutoSubmitForm } from "./auto-submit-form"; type Inputs = { password: string; }; type Props = { loginSettings: LoginSettings | undefined; loginName: string; organization?: string; defaultOrganization?: string; requestId?: string; }; export function PasswordForm({ loginSettings, loginName, organization, defaultOrganization, requestId }: Props) { const { register, handleSubmit, formState } = useForm({ mode: "onChange", }); const t = useTranslations("password"); const [info, setInfo] = useState(""); const [error, setError] = useState(""); const [samlData, setSamlData] = useState<{ url: string; fields: Record } | null>(null); const [loading, setLoading] = useState(false); const router = useRouter(); async function submitPassword(values: Inputs) { setError(""); setLoading(true); try { const response = await sendPassword({ loginName, organization, defaultOrganization, checks: create(ChecksSchema, { password: { password: values.password }, }), requestId, }); handleServerActionResponse(response, router, setSamlData, setError); } catch { setError(t("verify.errors.couldNotVerifyPassword")); } finally { setLoading(false); } } async function resetPasswordAndContinue() { setError(""); setInfo(""); setLoading(true); const response = await resetPassword({ loginName, organization, defaultOrganization, requestId, }) .catch(() => { setError(t("errors.couldNotSendResetLink")); return; }) .finally(() => { setLoading(false); }); if (response && "error" in response) { setError(response.error as string); return; } setInfo(t("verify.info.passwordResetSent")); const params = new URLSearchParams({ loginName: loginName, }); if (organization) { params.append("organization", organization); } if (requestId) { params.append("requestId", requestId); } return router.push("/password/set?" + params); } return ( <> {samlData && }
{!loginSettings?.hidePasswordReset && ( )} {loginName && }
{info && (
{info}
)} {error && (
{error}
)}
); }