peer-at-code-web/src/routes/(auth)/reset-password/+page.server.ts

87 lines
2.1 KiB
TypeScript

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 { setError, 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: 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) {
return setError(form, 'email', "Une erreur s'est produite ou l'email n'existe pas");
}
return {
form
}
},
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 ').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'
});
redirect(302, '/');
}
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");
}
}