This commit is contained in:
2026-06-24 14:10:53 +02:00
commit fdb3768d63
122 changed files with 13239 additions and 0 deletions
+59
View File
@@ -0,0 +1,59 @@
import { isValidEmail } from '.'
import { FieldError } from '../graphql-types'
interface LoginValidation {
input: 'Email' | 'Username'
errors: FieldError[] | null
}
export const validateLogin = (emailOrUsername: string, password: string): LoginValidation => {
const result: LoginValidation = {
input: 'Email',
errors: []
}
if (emailOrUsername.includes('@')) { // email provided
if (!isValidEmail(emailOrUsername)) {
result.errors!.push({
field: 'emailOrUsername',
message: 'Invalid email.'
})
}
}
else { // username provided
result.input = 'Username'
if (emailOrUsername.length <= 2) {
result.errors!.push({
field: 'emailOrUsername',
message: 'Username must be longer than 2 characters.'
})
}
if (emailOrUsername.length > 32) {
result.errors!.push({
field: 'emailOrUsername',
message: 'Username must not be longer than 32 characters.'
})
}
if (!/^[A-Za-z0-9_-]*$/.test(emailOrUsername)) {
result.errors!.push({
field: 'emailOrUsername',
message: 'Username must contain only letters, numbers, underscores and dashes.'
})
}
}
if (password.length < 8) {
result.errors!.push({
field: 'password',
message: 'Password must be at least 8 characters.'
})
}
if (password.length > 128) {
result.errors!.push({
field: 'password',
message: 'Password must not be longer than 128 characters.'
})
}
return {
input: result.input,
errors: result.errors!.length > 0 ? result.errors : null
}
}