import { useState } from 'react' import { useTurnstile } from '../turnstile' interface Props { recoverUrl: string csrfToken: string siteKey: string } const OPTIONS = [ { value: 'password', label: 'Contraseña' }, { value: 'accountname', label: 'Nombre de cuenta' }, { value: 'activation', label: 'Enlace de activación' }, ] as const export function RecoverForm({ recoverUrl, csrfToken, siteKey }: Props) { const { ref: turnstileRef, token: captchaToken } = useTurnstile(siteKey) const [type, setType] = useState('password') const [email, setEmail] = useState('') const [busy, setBusy] = useState(false) const [message, setMessage] = useState<{ ok: boolean; text: string } | null>(null) async function handleSubmit(e: React.FormEvent) { e.preventDefault() if (busy) return setBusy(true) setMessage(null) const body = new URLSearchParams() body.set('type', type) body.set('email', email.trim()) body.set('csrfmiddlewaretoken', csrfToken) body.set('cf-turnstile-response', captchaToken) try { const resp = await fetch(recoverUrl, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'X-CSRFToken': csrfToken, Accept: 'application/json', }, credentials: 'same-origin', body: body.toString(), }) if (!resp.ok) throw new Error(`HTTP ${resp.status}`) const data: { success?: boolean; message?: string } = await resp.json() setMessage({ ok: !!data.success, text: data.message || '' }) } catch { setMessage({ ok: false, text: 'Error en el servidor. Inténtalo de nuevo más tarde.' }) } finally { setBusy(false) } } return ( <>

Escoge la opción acorde a la información que quieres recuperar


setEmail(e.target.value)} />

{message && ( {message.text} )}
) }