mirror of
https://github.com/SyncrowIOT/backend.git
synced 2026-10-23 20:57:55 +00:00
34 lines
1.0 KiB
TypeScript
34 lines
1.0 KiB
TypeScript
import {
|
|
registerDecorator,
|
|
ValidationOptions,
|
|
ValidatorConstraint,
|
|
ValidatorConstraintInterface,
|
|
} from 'class-validator';
|
|
|
|
@ValidatorConstraint({ async: false })
|
|
export class IsPasswordStrongConstraint
|
|
implements ValidatorConstraintInterface
|
|
{
|
|
validate(password: string) {
|
|
const regex =
|
|
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~])[A-Za-z\d!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~]{8,}$/;
|
|
return regex.test(password);
|
|
}
|
|
|
|
defaultMessage() {
|
|
return 'Password must be at least 8 characters long and include at least one uppercase letter, one lowercase letter, one numeric digit, and one special character from the set !"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~.';
|
|
}
|
|
}
|
|
|
|
export function IsPasswordStrong(validationOptions?: ValidationOptions) {
|
|
return function (object: Record<string, any>, propertyName: string) {
|
|
registerDecorator({
|
|
target: object.constructor,
|
|
propertyName: propertyName,
|
|
options: validationOptions,
|
|
constraints: [],
|
|
validator: IsPasswordStrongConstraint,
|
|
});
|
|
};
|
|
}
|