---
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user