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 { registerConfirmationSchema, registerSchema } from '$lib/validations/auth'; export const load: PageServerLoad = async ({ locals: { user } }) => { if (user) redirect(302, '/'); const registerForm = await superValidate(zod(registerSchema)); const registerConfirmationForm = await superValidate(zod(registerConfirmationSchema)); return { title: 'Inscription', registerForm, registerConfirmationForm }; } export const actions: Actions = { register: async ({ request }) => { const form = await superValidate(request, zod(registerSchema)); if (!form.valid) { return fail(400, { form }); } const res = await fetch(`${API_URL}/register`, { method: 'POST', body: JSON.stringify({ email: form.data.email }) }); if (!res.ok) { if (res.status === 400) { const { email_valid, username_valid } = await res.json(); if (!email_valid) return setError(form, 'email', 'Un compte avec cette adresse email existe déjà'); if (!username_valid) return setError(form, 'pseudo', 'Ce pseudo est déjà utilisé'); } return setError(form, 'email', "Une erreur est survenue lors de l'inscription"); } return { form }; }, confirmation: async ({ request, cookies, url: { searchParams } }) => { const form = await superValidate(request, zod(registerConfirmationSchema)); if (!form.valid) { return fail(400, { form }); } const res = await fetch(`${API_URL}/confirmation`, { method: 'POST', body: JSON.stringify({ firstname: form.data.firstname, lastname: form.data.lastname, pseudo: form.data.pseudo, email: form.data.email, passwd: form.data.passwd, code: parseInt(form.data.code), }) }); if (!res.ok) { if (res.status === 400) { const { email_valid, username_valid } = await res.json(); if (!email_valid) return setError(form, 'email', 'Un compte avec cette adresse email existe déjà'); if (!username_valid) return setError(form, 'pseudo', "Ce nom d'utilisateur est déjà utilisé"); } return setError(form, 'code', "Une erreur est survenue lors de la confirmation"); } 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, '/'); } }