-
-
-
-
-
-
+
+
+
+
diff --git a/src/lib/components/forms/updatePFP.svelte b/src/lib/components/forms/updatePFP.svelte new file mode 100644 index 0000000..7bc9612 --- /dev/null +++ b/src/lib/components/forms/updatePFP.svelte @@ -0,0 +1,12 @@ + + +
diff --git a/src/lib/components/forms/updatePassword.svelte b/src/lib/components/forms/updatePassword.svelte new file mode 100644 index 0000000..f51e6db --- /dev/null +++ b/src/lib/components/forms/updatePassword.svelte @@ -0,0 +1,44 @@ + + + + diff --git a/src/lib/components/forms/updateUsername.svelte b/src/lib/components/forms/updateUsername.svelte new file mode 100644 index 0000000..11eeb42 --- /dev/null +++ b/src/lib/components/forms/updateUsername.svelte @@ -0,0 +1,43 @@ + + + diff --git a/src/lib/types/schema.ts b/src/lib/types/schema.ts index 4bb83b7..34de724 100644 --- a/src/lib/types/schema.ts +++ b/src/lib/types/schema.ts @@ -32,6 +32,29 @@ export const loginSchema = z.object({ password: z.string().nonempty('Password must not be empty.'), }); +export const changePasswordSchema = z.object({ + currentPassword: z.string().nonempty('Password must not be empty.'), + newPassword: z + .string() + .min(8, 'New password must be at least 8 characters.') + .regex(/(?=.*[A-Z])/gm, 'New password must contain at uppercase letter.') + .regex(/(?=.*[a-z])/gm, 'New password must contain at lowercase letter.') + .regex(/(?=.*\d)/gm, 'New password must contain at least one number.') + .regex(/(?=.*\W)/gm, 'New password must contain at least one special character'), +}); + +export const changeUsernameSchema = z.object({ + username: z + .string() + .min(3, 'Username must be at least 3 characters.') + .max(15, 'Username must be no more than 15 characters.') + .regex(/^(?![A-Z])/gm, 'Username cannot contain uppercase letters') + .regex(/^(?=[a-z0-9-_]+$)/gm, 'Username cannot contain special characters'), + password: z.string().nonempty('Password must not be empty.'), +}); + +export type ChangePasswordSchema = typeof changePasswordSchema; +export type ChangeUsernameSchema = typeof changeUsernameSchema; export type NewChannelSchema = typeof newChannelSchema; export type SignUpSchema = typeof signupSchema; export type LogInSchema = typeof loginSchema; diff --git a/src/routes/(main)/account/+page.server.ts b/src/routes/(main)/account/+page.server.ts index 045674b..a929cff 100644 --- a/src/routes/(main)/account/+page.server.ts +++ b/src/routes/(main)/account/+page.server.ts @@ -1,7 +1,11 @@ -import { auth } from '$lib/server/db/auth'; import { redirect } from '@sveltejs/kit'; +import type { Actions } from '@sveltejs/kit'; +import { fail, message, setError, superValidate } from 'sveltekit-superforms'; +import { zod } from 'sveltekit-superforms/adapters'; +import { auth } from '$lib/server/db/auth'; +import { changeUsernameSchema, changePasswordSchema } from '$lib/types/schema.js'; -export async function load({ request }): Promise