Merge pull request #62 from SyncrowIOT/SP-275-be-implement-validation-for-the-password-in-the-sign-up-and-forget-password

Sp 275 be implement validation for the password in the sign up and forget password
This commit is contained in:
faris Aljohari
2024-07-21 12:12:45 +03:00
committed by GitHub
3 changed files with 53 additions and 4 deletions

View File

@ -1,5 +1,6 @@
import { ApiProperty } from '@nestjs/swagger'; import { ApiProperty } from '@nestjs/swagger';
import { IsEmail, IsNotEmpty, IsString } from 'class-validator'; import { IsEmail, IsNotEmpty, IsString } from 'class-validator';
import { IsPasswordStrong } from 'src/validators/password.validator';
export class UserSignUpDto { export class UserSignUpDto {
@ApiProperty({ @ApiProperty({
@ -16,6 +17,10 @@ export class UserSignUpDto {
}) })
@IsString() @IsString()
@IsNotEmpty() @IsNotEmpty()
@IsPasswordStrong({
message:
'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.',
})
public password: string; public password: string;
@ApiProperty({ @ApiProperty({

View File

@ -1,14 +1,25 @@
import { ApiProperty } from '@nestjs/swagger'; import { ApiProperty } from '@nestjs/swagger';
import { IsEmail, IsNotEmpty, IsString } from 'class-validator'; import { IsEmail, IsNotEmpty, IsString } from 'class-validator';
import { IsPasswordStrong } from 'src/validators/password.validator';
export class ForgetPasswordDto { export class ForgetPasswordDto {
@ApiProperty() @ApiProperty({
description: 'email',
required: true,
})
@IsEmail() @IsEmail()
@IsNotEmpty() @IsNotEmpty()
email: string; public email: string;
@ApiProperty() @ApiProperty({
description: 'password',
required: true,
})
@IsString() @IsString()
@IsNotEmpty() @IsNotEmpty()
password: string; @IsPasswordStrong({
message:
'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.',
})
public password: string;
} }

View File

@ -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<string, any>, propertyName: string) {
registerDecorator({
target: object.constructor,
propertyName: propertyName,
options: validationOptions,
constraints: [],
validator: IsPasswordStrongConstraint,
});
};
}