41 lines
1.6 KiB
TypeScript
41 lines
1.6 KiB
TypeScript
import { MAX_PASSWORD_LENGTH, MIN_PASSWORD_LENGTH, PASSWORD_STRENGTH_ACME } from '@/config/validation'
|
|
import { object, optional, string } from 'zod'
|
|
|
|
const _2FA_CODE_LENGTH = 6
|
|
const _2FA_CODE_REGEX = /^\d{6}$/
|
|
|
|
// all translations is implemented in '@/components/ui/form' via TranslateClientFragment
|
|
|
|
const minPasswordMessage = JSON.stringify(['schema.password.length.min', { min: MIN_PASSWORD_LENGTH }])
|
|
const maxPasswordMessage = JSON.stringify(['schema.password.length.max', { max: MAX_PASSWORD_LENGTH }])
|
|
const maxPasswordStrength = JSON.stringify(
|
|
['schema.password.strength.acme', { min: MIN_PASSWORD_LENGTH, max: MAX_PASSWORD_LENGTH }])
|
|
const regexCodeMessage = JSON.stringify(['schema.two_factor.length', { length: _2FA_CODE_LENGTH }])
|
|
|
|
const email = string().trim().toLowerCase().email({ message: 'schema.email.required' })
|
|
const password = string().trim().regex(new RegExp(PASSWORD_STRENGTH_ACME, 'mg'),
|
|
{ message: maxPasswordStrength }).min(MIN_PASSWORD_LENGTH, { message: minPasswordMessage }).
|
|
max(MAX_PASSWORD_LENGTH, { message: maxPasswordMessage })
|
|
|
|
export const LoginSchema = object({
|
|
email,
|
|
password: string().trim().min(1, { message: 'schema.password.required' }),
|
|
code: string({ message: regexCodeMessage }).
|
|
trim().
|
|
length(_2FA_CODE_LENGTH, { message: regexCodeMessage }).
|
|
regex(_2FA_CODE_REGEX, { message: regexCodeMessage }).
|
|
optional(),
|
|
})
|
|
|
|
export const RegisterSchema = object({
|
|
email, password, name: string().trim().min(1, { message: 'schema.name.required' }),
|
|
})
|
|
|
|
export const ResetSchema = object({
|
|
email,
|
|
})
|
|
|
|
export const NewPasswordSchema = object({
|
|
password,
|
|
})
|