import { dev } from '$app/environment'; import { API_URL } from '$env/static/private'; import { fail, redirect } from '@sveltejs/kit'; import type { Actions, PageServerLoad } from './$types'; import { zod } from 'sveltekit-superforms/adapters'; import { setError, superValidate } from 'sveltekit-superforms/server'; import { requestPasswordResetSchema, resetPasswordSchema } from '$lib/validations/auth'; export const load: PageServerLoad = async ({ locals: { user } }) => { if (user) redirect(302, '/'); const requestPasswordResetForm = await superValidate(zod(requestPasswordResetSchema)); const resetPasswordForm = await superValidate(zod(resetPasswordSchema)); return { title: 'Réinitialisation de mot de passe', requestPasswordResetForm, resetPasswordForm }; } export const actions: Actions = { request: async ({ request, fetch }) => { const form = await superValidate(request, zod(requestPasswordResetSchema)); if (!form.valid) { return fail(400, { form }); } const res = await fetch(`${API_URL}/user/fpw`, { method: 'POST', body: JSON.stringify({ email: form.data.email }) }); if (!res.ok) { return setError(form, 'email', "Une erreur s'est produite ou l'email n'existe pas"); } return { form } }, confirmation: async ({ request, cookies, fetch, url: { searchParams } }) => { const form = await superValidate(request, zod(resetPasswordSchema)); if (!form.valid) { return fail(400, { form }); } const res = await fetch(`${API_URL}/user/fpw`, { method: 'POST', body: JSON.stringify({ email: form.data.email, password: form.data.password, code: parseInt(form.data.code) }) }); if (!res.ok) { if (res.status === 400) { return setError(form, 'code', "Le code de confirmation est incorrect"); } return setError(form, 'code', "Une erreur est survenue, veuillez réessayer plus tard"); } const token = res.headers.get('Authorization')?.split('Bearer ').pop(); if (!token) { return setError(form, 'code', "Une erreur est survenue, veuillez réessayer plus tard"); } cookies.set('session', token, { path: '/', secure: !dev, sameSite: 'strict' }); const redirectTo = searchParams.get('redirectTo'); if (redirectTo) redirect(302, `/${redirectTo.slice(1)}`); redirect(302, '/'); } }