From 181aaf6c1c221de7241aa0f944de1e9e83e0d3fd Mon Sep 17 00:00:00 2001 From: faris Aljohari <83524184+farisaljohari@users.noreply.github.com> Date: Mon, 15 Jul 2024 16:28:49 +0300 Subject: [PATCH] add password validator --- src/validators/password.validator.ts | 33 ++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/validators/password.validator.ts diff --git a/src/validators/password.validator.ts b/src/validators/password.validator.ts new file mode 100644 index 0000000..4828b60 --- /dev/null +++ b/src/validators/password.validator.ts @@ -0,0 +1,33 @@ +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.'; + } +} + +export function IsPasswordStrong(validationOptions?: ValidationOptions) { + return function (object: Record, propertyName: string) { + registerDecorator({ + target: object.constructor, + propertyName: propertyName, + options: validationOptions, + constraints: [], + validator: IsPasswordStrongConstraint, + }); + }; +}