-
Chaptires
+
Chapitres
Les chapitres sont les différentes parties du jeu. Chaque chapitre est composé de plusieurs
puzzles.
From f1dea1016a67cec2b51a161500b3721a245f6c84 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Th=C3=A9o?= <43091603+glazk0@users.noreply.github.com>
Date: Sun, 17 Sep 2023 23:03:49 +0200
Subject: [PATCH 19/25] fix: logout
---
src/routes/logout/{+server.ts => +page.server.ts} | 2 +-
src/routes/logout/+page.svelte | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
rename src/routes/logout/{+server.ts => +page.server.ts} (77%)
create mode 100644 src/routes/logout/+page.svelte
diff --git a/src/routes/logout/+server.ts b/src/routes/logout/+page.server.ts
similarity index 77%
rename from src/routes/logout/+server.ts
rename to src/routes/logout/+page.server.ts
index 8068f49..0b6c48e 100644
--- a/src/routes/logout/+server.ts
+++ b/src/routes/logout/+page.server.ts
@@ -1,6 +1,6 @@
import { redirect, type ServerLoad } from '@sveltejs/kit';
-export const GET: ServerLoad = async ({ cookies, locals }) => {
+export const load: ServerLoad = async ({ cookies, locals }) => {
const session = cookies.get('session');
if (session) {
diff --git a/src/routes/logout/+page.svelte b/src/routes/logout/+page.svelte
new file mode 100644
index 0000000..6586df7
--- /dev/null
+++ b/src/routes/logout/+page.svelte
@@ -0,0 +1 @@
+
\ No newline at end of file
From 7321d482661301b3021d178499a78e696a3d4c2b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Th=C3=A9o?= <43091603+glazk0@users.noreply.github.com>
Date: Sun, 17 Sep 2023 23:04:00 +0200
Subject: [PATCH 20/25] feat: changed form behavior
---
src/routes/sign-in/+page.server.ts | 43 ++++++-----
src/routes/sign-in/+page.svelte | 46 +++++++-----
src/routes/sign-up/+page.server.ts | 105 ++++++++++++++-------------
src/routes/sign-up/+page.svelte | 110 ++++++++++++-----------------
4 files changed, 156 insertions(+), 148 deletions(-)
diff --git a/src/routes/sign-in/+page.server.ts b/src/routes/sign-in/+page.server.ts
index 5cb7d82..f76bf3b 100644
--- a/src/routes/sign-in/+page.server.ts
+++ b/src/routes/sign-in/+page.server.ts
@@ -1,36 +1,39 @@
-import { redirect, type Actions, fail } from '@sveltejs/kit';
-import type { PageServerLoad } from './$types';
import { API_URL } from '$env/static/private';
-import { z } from 'zod';
+import { redirect, type Actions, fail } from '@sveltejs/kit';
-export const load = (async ({ locals: { user } }) => {
- if (user) throw redirect(303, '/dashboard');
-}) satisfies PageServerLoad;
+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 (event) => {
- const data = await event.request.formData();
+ default: async ({ request, cookies }) => {
+ const form = await superValidate(request, schema);
- const parse = schema.safeParse(Object.fromEntries(data.entries()));
-
- if (!parse.success) {
- const errors = parse.error.errors.map((error) => {
- const { path, message } = error;
- return { field: path[0], message };
- });
- return fail(400, { errors });
+ if (!form.valid) {
+ return fail(400, { form });
}
const res = await fetch(`${API_URL}/login`, {
method: 'POST',
body: JSON.stringify({
- ...parse.data
+ ...form.data
})
});
@@ -39,15 +42,17 @@ export const actions = {
if (!token) throw new Error('No token found');
- event.cookies.set('session', token, {
+ cookies.set('session', token, {
path: '/'
});
throw redirect(303, '/dashboard');
}
+ form.errors.passwd = ["Nom d'utilisateur ou mot de passe incorrect"];
+
return fail(400, {
- errors: [{ field: 'passwd', message: "Nom d'utilisateur ou mot de passe incorrect" }]
+ form
});
}
} satisfies Actions;
diff --git a/src/routes/sign-in/+page.svelte b/src/routes/sign-in/+page.svelte
index 7735925..f2b20ab 100644
--- a/src/routes/sign-in/+page.svelte
+++ b/src/routes/sign-in/+page.svelte
@@ -1,12 +1,26 @@
@@ -15,20 +29,18 @@
Connexion
diff --git a/src/routes/sign-up/+page.server.ts b/src/routes/sign-up/+page.server.ts
index 64aefbc..12f197c 100644
--- a/src/routes/sign-up/+page.server.ts
+++ b/src/routes/sign-up/+page.server.ts
@@ -4,12 +4,9 @@ import { fail, redirect, type Actions } from '@sveltejs/kit';
import type { PageServerLoad } from './$types';
+import { superValidate } from 'sveltekit-superforms/server';
import { z } from 'zod';
-export const load = (async ({ locals: { user } }) => {
- if (user) throw redirect(303, '/dashboard');
-}) satisfies PageServerLoad;
-
const registerSchema = z.object({
email: z
.string()
@@ -19,7 +16,17 @@ const registerSchema = z.object({
.trim(),
firstname: z.string().trim(),
lastname: z.string().trim(),
- pseudo: z.string().trim()
+ pseudo: z.string().trim(),
+ code: z
+ .string({
+ required_error: 'Code manquant'
+ })
+ .length(4, {
+ message: 'Code invalide, il doit contenir 4 chiffres'
+ })
+ .regex(/^[0-9]+$/)
+ .optional(),
+ passwd: z.string().optional()
});
const confirmationSchema = z.object({
@@ -32,80 +39,80 @@ const confirmationSchema = z.object({
firstname: z.string().trim(),
lastname: z.string().trim(),
pseudo: z.string().trim(),
- code: z.string(),
+ code: z
+ .string({
+ required_error: 'Code manquant'
+ })
+ .regex(/^[0-9]{4}$/, {
+ message: 'Code invalide, il doit contenir 4 chiffres'
+ }),
passwd: z.string()
});
+export const load = (async ({ locals: { user } }) => {
+ if (user) throw redirect(303, '/dashboard');
+
+ const form = await superValidate(registerSchema);
+
+ return {
+ form
+ };
+}) satisfies PageServerLoad;
+
export const actions = {
- register: async (event) => {
- const data = await event.request.formData();
+ register: async ({ request }) => {
+ const form = await superValidate(request, registerSchema);
- const parse = registerSchema.safeParse(Object.fromEntries(data.entries()));
-
- if (!parse.success) {
- const errors = parse.error.errors.map((error) => {
- const { path, message } = error;
- return { field: path[0], message };
- });
- return fail(400, { errors });
+ if (!form.valid) {
+ return fail(400, { form });
}
const res = await fetch(`${API_URL}/register`, {
method: 'POST',
body: JSON.stringify({
- pseudo: parse.data.pseudo,
- firstname: parse.data.firstname,
- lastname: parse.data.lastname,
- email: parse.data.email
+ pseudo: form.data.pseudo,
+ firstname: form.data.firstname,
+ lastname: form.data.lastname,
+ email: form.data.email
})
});
if (res.ok) {
return {
- success: true
+ form
};
}
if (res.status === 400) {
const { email_valid } = await res.json();
- const errors = [];
+ if (!email_valid) form.errors.email = ['Un compte avec cette adresse email existe déjà'];
- if (!email_valid)
- errors.push({
- field: 'email',
- message: 'Cet email est déjà utilisé'
- });
-
- return fail(400, { errors });
+ return fail(400, { form });
}
+ form.errors.passwd = ["Une erreur s'est produite"];
+
return fail(400, {
- errors: [{ field: 'passwd', message: "Une erreur s'est produite" }]
+ form
});
},
- confirmation: async (event) => {
- const data = await event.request.formData();
+ confirmation: async ({ request, cookies }) => {
+ const form = await superValidate(request, confirmationSchema);
- const parse = confirmationSchema.safeParse(Object.fromEntries(data.entries()));
-
- if (!parse.success) {
- const errors = parse.error.errors.map((error) => {
- const { path, message } = error;
- return { field: path[0], message };
- });
- return fail(400, { errors });
+ if (!form.valid) {
+ return fail(400, { form });
}
const res = await fetch(`${API_URL}/confirmation`, {
method: 'POST',
body: JSON.stringify({
- firstname: parse.data.firstname,
- lastname: parse.data.lastname,
- pseudo: parse.data.pseudo,
- email: parse.data.email,
- code: parseInt(parse.data.code),
- passwd: parse.data.passwd
+ firstname: form.data.firstname,
+ lastname: form.data.lastname,
+ pseudo: form.data.pseudo,
+ email: form.data.email,
+ code: parseInt(form.data.code),
+ passwd: form.data.passwd
})
});
@@ -114,15 +121,17 @@ export const actions = {
if (!token) throw new Error('No token');
- event.cookies.set('token', token, {
+ cookies.set('session', token, {
path: '/'
});
throw redirect(303, '/dashboard');
}
+ form.errors.code = [`Une erreur s'est produite (${res.status} ${res.statusText})`];
+
return fail(400, {
- errors: [{ field: 'passwd', message: "Une erreur s'est produite" }]
+ form
});
}
} satisfies Actions;
diff --git a/src/routes/sign-up/+page.svelte b/src/routes/sign-up/+page.svelte
index 472ba99..ed5837c 100644
--- a/src/routes/sign-up/+page.svelte
+++ b/src/routes/sign-up/+page.svelte
@@ -1,25 +1,39 @@
@@ -27,83 +41,59 @@
- {data.confirmation ? 'Confirmation' : 'Inscription'}
+ {confirmation ? 'Confirmation' : 'Inscription'}