1179c4b1da
Package, implementation and tests
53 lines
1.2 KiB
TypeScript
53 lines
1.2 KiB
TypeScript
import * as EmailValidator from 'email-validator'
|
|
import logger from 'log'
|
|
import zxcvbn from 'zxcvbn'
|
|
import {parseDocument} from 'htmlparser2'
|
|
|
|
let _verbose: boolean = false
|
|
export function verbose(v: boolean) {
|
|
_verbose = v
|
|
}
|
|
|
|
const log = logger('validation')
|
|
|
|
export enum PasswordStrength {
|
|
Weak = 0,
|
|
Easy = 1,
|
|
Medium = 2,
|
|
Strong = 3,
|
|
Hard = 4,
|
|
}
|
|
|
|
export function password_is_strong(password: string, strength: PasswordStrength = PasswordStrength.Medium, email?: string) : boolean {
|
|
log.trace("Verify password's strength")
|
|
|
|
if (zxcvbn(password, email !== undefined ? [email] : []).score < strength) {
|
|
if (_verbose) log.warn("Password is too weak")
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
export function contains_html(text: string) : boolean {
|
|
log.trace("Verify if text contains HTML")
|
|
|
|
if (parseDocument(text).children.some(node => node.nodeType === 1)) {
|
|
if (_verbose) log.warn("")
|
|
return true
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
export function email_is_valid(email: string) : boolean {
|
|
log.trace("Verify email's validity")
|
|
|
|
if (!EmailValidator.validate(email)) {
|
|
if (_verbose) log.warn("Invalid email")
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|