peer-at-code-web/src/routes/sign-in/+page.server.ts
2023-09-18 13:08:29 +02:00

58 lines
1.2 KiB
TypeScript

import { API_URL } from '$env/static/private';
import { redirect, type Actions, fail } from '@sveltejs/kit';
import type { PageServerLoad } from './$types';
import { superValidate } from 'sveltekit-superforms/server';
import { z } from 'zod';
const schema = z.object({
pseudo: z.string().trim(),
passwd: z.string()
});
export const load = (async ({ locals: { user } }) => {
if (user) throw redirect(303, '/dashboard');
const form = await superValidate(schema);
return {
form
};
}) satisfies PageServerLoad;
export const actions = {
default: async ({ request, cookies }) => {
const form = await superValidate(request, schema);
if (!form.valid) {
return fail(400, { form });
}
const res = await fetch(`${API_URL}/login`, {
method: 'POST',
body: JSON.stringify({
...form.data
})
});
if (res.ok) {
const token = res.headers.get('Authorization')?.split(' ')[1];
if (!token) throw new Error('No token found');
cookies.set('session', token, {
path: '/'
});
throw redirect(303, '/dashboard');
}
form.errors.passwd = ["Nom d'utilisateur ou mot de passe incorrect"];
return fail(400, {
form
});
}
} satisfies Actions;