peer-at-code-web/src/routes/(auth)/reset-password/+page.server.ts
2024-03-24 23:15:58 +01:00

91 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 { 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;