Spaces:
Running
Running
| // Reset Password page — reached via the emailed link (/reset-password?token=...). | |
| // Reuses ddaApi()/showDdaError()/showDdaSuccess() from shared.js. | |
| (function () { | |
| const form = document.getElementById('reset-form'); | |
| const newPasswordInput = document.getElementById('new_password'); | |
| const confirmInput = document.getElementById('confirm_password'); | |
| const submitBtn = document.getElementById('reset-submit'); | |
| const token = new URLSearchParams(window.location.search).get('token') || ''; | |
| if (!token) { | |
| showDdaError('This reset link is missing its token. Request a new one from the Forgot Password page.'); | |
| form.querySelectorAll('input, button').forEach((el) => { el.disabled = true; }); | |
| } | |
| function setFieldError(id, message) { | |
| const el = document.getElementById('err-' + id); | |
| if (el) { el.textContent = message || ''; el.classList.toggle('hidden', !message); } | |
| } | |
| form.addEventListener('submit', async (e) => { | |
| e.preventDefault(); | |
| hideDdaError(); | |
| setFieldError('new_password', null); | |
| setFieldError('confirm_password', null); | |
| const newPassword = newPasswordInput.value; | |
| const confirm = confirmInput.value; | |
| let ok = true; | |
| if (newPassword.length < 8) { | |
| setFieldError('new_password', 'Password must be at least 8 characters.'); | |
| ok = false; | |
| } | |
| if (confirm !== newPassword) { | |
| setFieldError('confirm_password', 'Passwords do not match.'); | |
| ok = false; | |
| } | |
| if (!ok) return; | |
| submitBtn.disabled = true; | |
| try { | |
| await ddaApi('POST', '/api/auth/reset-password-token', { | |
| body: JSON.stringify({ token, new_password: newPassword }), | |
| }); | |
| showDdaSuccess('Password reset. Redirecting to sign in…'); | |
| form.reset(); | |
| form.querySelectorAll('input, button').forEach((el) => { el.disabled = true; }); | |
| setTimeout(() => { window.location.href = '/login'; }, 1500); | |
| } catch (err) { | |
| showDdaError(err.message || 'Could not reset password.'); | |
| submitBtn.disabled = false; | |
| } | |
| }); | |
| })(); | |