import { dev } from '$app/environment'; import { API_URL } from '$env/static/private'; import { fail, redirect, type Actions } from '@sveltejs/kit'; import type { PageServerLoad } from './$types'; import { zod } from 'sveltekit-superforms/adapters'; import { superValidate } from 'sveltekit-superforms/server'; import { requestPasswordResetSchema, resetPasswordSchema } from '$lib/validations/auth'; export const load = (async ({ locals: { user } }) => { if (user) redirect(302, '/'); const requestPasswordResetForm = await superValidate(zod(requestPasswordResetSchema)); const resetPasswordForm = await superValidate(zod(resetPasswordSchema)); return { title: 'Mot de passe oubliƩ', requestPasswordResetForm, resetPasswordForm }; }) satisfies PageServerLoad; export const 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(form.data) }); if (!res.ok) { form.errors.email = ["Une erreur s'est produite ou l'email n'existe pas"]; return fail(400, { form }); } return { success: true } }, confirmation: async ({ request, cookies, fetch }) => { 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) { const token = res.headers.get('Authorization')?.split('Bearer ')[1]; if (!token) { form.errors.code = ["Une erreur s'est produite"]; return fail(400, { form }); } cookies.set('session', token, { path: '/', secure: !dev, sameSite: 'strict' }); redirect(302, '/'); } if (res.status === 400) { form.errors.code = ['Code invalide']; } else { form.errors.code = [`Une erreur s'est produite`]; } return fail(400, { form }); } } satisfies Actions;