mirror of
https://github.com/BradNut/boredgame
synced 2025-09-08 17:40:22 +00:00
Fix seeder and fix the schema for password and confirm password.
This commit is contained in:
parent
858a356ddf
commit
9a87af4c3c
4 changed files with 28 additions and 66 deletions
|
|
@ -1,17 +1,9 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { superForm } from 'sveltekit-superforms/client';
|
import { superForm } from 'sveltekit-superforms/client';
|
||||||
import { userSchema } from '$lib/config/zod-schemas';
|
import { signUpSchema } from '$lib/config/zod-schemas';
|
||||||
export let data;
|
export let data;
|
||||||
|
|
||||||
const signUpSchema = userSchema.pick({
|
const { form, errors, enhance } = superForm(data.form, {
|
||||||
firstName: true,
|
|
||||||
lastName: true,
|
|
||||||
username: true,
|
|
||||||
email: true,
|
|
||||||
password: true
|
|
||||||
});
|
|
||||||
|
|
||||||
const { form, errors, enhance, delayed } = superForm(data.form, {
|
|
||||||
taintedMessage: null,
|
taintedMessage: null,
|
||||||
validators: signUpSchema,
|
validators: signUpSchema,
|
||||||
delayMs: 0
|
delayMs: 0
|
||||||
|
|
|
||||||
|
|
@ -29,13 +29,10 @@ export const userSchema = z.object({
|
||||||
.max(50, { message: 'Username must be less than 50 characters' }),
|
.max(50, { message: 'Username must be less than 50 characters' }),
|
||||||
password: z
|
password: z
|
||||||
.string({ required_error: 'Password is required' })
|
.string({ required_error: 'Password is required' })
|
||||||
.trim()
|
.trim(),
|
||||||
.min(8, { message: 'Password must be at least 8 characters' })
|
|
||||||
.max(128, { message: 'Password must be less than 128 characters' }),
|
|
||||||
confirm_password: z
|
confirm_password: z
|
||||||
.string({ required_error: 'Confirm Password is required' })
|
.string({ required_error: 'Confirm Password is required' })
|
||||||
.trim()
|
.trim(),
|
||||||
.min(8, { message: 'Confirm Password must be at least 8 characters' }),
|
|
||||||
role: z.enum(['USER', 'ADMIN'], { required_error: 'You must have a role' }).default('USER'),
|
role: z.enum(['USER', 'ADMIN'], { required_error: 'You must have a role' }).default('USER'),
|
||||||
verified: z.boolean().default(false),
|
verified: z.boolean().default(false),
|
||||||
token: z.string().optional(),
|
token: z.string().optional(),
|
||||||
|
|
@ -111,54 +108,44 @@ const checkPasswordStrength = async function (password: string, ctx: z.Refinemen
|
||||||
countOfSpecialChar = 0;
|
countOfSpecialChar = 0;
|
||||||
for (let i = 0; i < password.length; i++) {
|
for (let i = 0; i < password.length; i++) {
|
||||||
const char = password.charAt(i);
|
const char = password.charAt(i);
|
||||||
if (!isNaN(+char)) countOfNumbers++;
|
if (!isNaN(+char)) {
|
||||||
else if (containsUppercase(char)) countOfUpperCase++;
|
countOfNumbers++;
|
||||||
else if (containsLowercase(char)) countOfLowerCase++;
|
} else if (containsUppercase(char)) {
|
||||||
else if (containsSpecialChar(char)) countOfSpecialChar++;
|
countOfUpperCase++;
|
||||||
|
} else if (containsLowercase(char)) {
|
||||||
|
countOfLowerCase++;
|
||||||
|
} else if (containsSpecialChar(char)) {
|
||||||
|
countOfSpecialChar++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let errors = {
|
let errorMessage = 'Your password:';
|
||||||
upperCase: { pass: true, message: "At least one upper case." },
|
|
||||||
lowerCase: { pass: true, message: "At least one lower case." },
|
|
||||||
specialCharacter: { pass: true, message: "At least one special character." },
|
|
||||||
totalNumber: { pass: true, message: "At least one number." },
|
|
||||||
minimumLength: { pass: true, message: "At least 8 characters." },
|
|
||||||
maximumLength: { pass: true, message: "At most 128 characters." },
|
|
||||||
};
|
|
||||||
|
|
||||||
if (countOfLowerCase < 1) {
|
if (countOfLowerCase < 1) {
|
||||||
errors = { ...errors, lowerCase: { ...errors.lowerCase, pass: false } };
|
errorMessage = ' Must have at least one lowercase letter. ';
|
||||||
}
|
}
|
||||||
if (countOfNumbers < 1) {
|
if (countOfNumbers < 1) {
|
||||||
errors = {
|
errorMessage += ' Must have at least one number. ';
|
||||||
...errors,
|
|
||||||
totalNumber: { ...errors.totalNumber, pass: false },
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
if (countOfUpperCase < 1) {
|
if (countOfUpperCase < 1) {
|
||||||
errors = { ...errors, upperCase: { ...errors.upperCase, pass: false } };
|
errorMessage += ' Must have at least one uppercase letter. ';
|
||||||
}
|
}
|
||||||
if (countOfSpecialChar < 1) {
|
if (countOfSpecialChar < 1) {
|
||||||
errors = { ...errors, specialCharacter: { ...errors.specialCharacter, pass: false } };
|
errorMessage += ' Must have at least one special character.';
|
||||||
}
|
}
|
||||||
if (minimumLength) {
|
if (minimumLength) {
|
||||||
errors = { ...errors, minimumLength: { ...errors.minimumLength, pass: false } };
|
errorMessage += ' Be at least 8 characters long.';
|
||||||
}
|
}
|
||||||
if (maximumLength) {
|
if (maximumLength) {
|
||||||
errors = { ...errors, maximumLength: { ...errors.maximumLength, pass: false } };
|
errorMessage += ' Be less than 128 characters long.';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (
|
if (errorMessage.length > 'Your password:'.length) {
|
||||||
countOfLowerCase < 1 ||
|
|
||||||
countOfUpperCase < 1 ||
|
|
||||||
countOfSpecialChar < 1 ||
|
|
||||||
countOfNumbers < 1
|
|
||||||
) {
|
|
||||||
ctx.addIssue({
|
ctx.addIssue({
|
||||||
code: "custom",
|
code: 'custom',
|
||||||
message: JSON.stringify(errors),
|
message: errorMessage,
|
||||||
path: ["password"]
|
path: ['password']
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -5,32 +5,12 @@ import { nanoid } from 'nanoid';
|
||||||
import { setError, superValidate } from 'sveltekit-superforms/server';
|
import { setError, superValidate } from 'sveltekit-superforms/server';
|
||||||
import type { PageServerLoad } from './$types';
|
import type { PageServerLoad } from './$types';
|
||||||
import { lucia } from '$lib/server/auth';
|
import { lucia } from '$lib/server/auth';
|
||||||
import { userSchema } from '$lib/config/zod-schemas';
|
import { signUpSchema } from '$lib/config/zod-schemas';
|
||||||
import { add_user_to_role } from '$server/roles';
|
import { add_user_to_role } from '$server/roles';
|
||||||
import type { Message } from '$lib/types.js';
|
import type { Message } from '$lib/types.js';
|
||||||
import db from '$lib/drizzle';
|
import db from '$lib/drizzle';
|
||||||
import { collections, users, wishlists } from '../../../schema';
|
import { collections, users, wishlists } from '../../../schema';
|
||||||
|
|
||||||
const signUpSchema = userSchema
|
|
||||||
.pick({
|
|
||||||
firstName: true,
|
|
||||||
lastName: true,
|
|
||||||
email: true,
|
|
||||||
username: true,
|
|
||||||
password: true,
|
|
||||||
confirm_password: true,
|
|
||||||
terms: true
|
|
||||||
})
|
|
||||||
.superRefine(({ confirm_password, password }, ctx) => {
|
|
||||||
if (confirm_password !== password) {
|
|
||||||
ctx.addIssue({
|
|
||||||
code: 'custom',
|
|
||||||
message: 'Password and Confirm Password must match',
|
|
||||||
path: ['confirm_password']
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
export const load: PageServerLoad = async (event) => {
|
export const load: PageServerLoad = async (event) => {
|
||||||
console.log('sign up load event', event);
|
console.log('sign up load event', event);
|
||||||
// const session = await event.locals.auth.validate();
|
// const session = await event.locals.auth.validate();
|
||||||
|
|
|
||||||
|
|
@ -27,3 +27,6 @@ if (existingRoles.length === 0) {
|
||||||
} else {
|
} else {
|
||||||
console.log('Roles already exist. No action taken.');
|
console.log('Roles already exist. No action taken.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await pool.end();
|
||||||
|
process.exit();
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue