Files
linux-odyssey/server/src/api/validators/authValidator.ts
T
Justin Lin 2feedc329c refactor: use bun for package management
+ add package.json to each packages
+ update import path
2026-10-11 16:50:01 +11:00

65 lines
1.6 KiB
TypeScript

import { check } from 'express-validator'
import { isValidUsername, isValidEmail } from '@odyssey/utils'
import { User } from '@odyssey/models'
import { passwordPolicy } from '@odyssey/constants'
import { noError } from '../../middleware/validator.js'
const checkUsername = () =>
check('username')
.notEmpty()
.isString()
.custom((username) => {
if (!isValidUsername(username)) {
throw new Error('Invalid username')
}
return true
})
.trim()
const checkNewUsername = () =>
checkUsername().custom(async (username) => {
if (await User.exists({ username })) {
throw new Error('Username taken')
}
return true
})
const checkEmail = () => check('email').notEmpty().isString().isEmail().trim()
const checkNewEmail = () =>
checkEmail().custom(async (email) => {
if (await User.exists({ email })) {
throw new Error('Email taken')
}
return true
})
const checkPassword = () =>
check('password').notEmpty().isStrongPassword(passwordPolicy)
const checkLogin = () =>
check('username')
.isString()
.notEmpty()
.trim()
.custom((login) => {
if (!isValidUsername(login) && !isValidEmail(login)) {
throw new Error('Invalid login')
}
return true
})
export const registerValidators = [
checkNewUsername(),
checkNewEmail(),
checkPassword(),
noError,
]
export const registerFromSessionValidators = [checkNewUsername(), noError]
export const loginValidators = [checkLogin(), noError]
export const checkUsernameValidators = [checkNewUsername(), noError]