diff --git a/src/models/actions/update/UpdateUser.ts b/src/models/actions/update/UpdateUser.ts index f130672..e5685eb 100644 --- a/src/models/actions/update/UpdateUser.ts +++ b/src/models/actions/update/UpdateUser.ts @@ -1,12 +1,14 @@ import * as argon2 from "argon2"; +import { passwordStrength } from "check-password-strength"; import { IsBoolean, IsEmail, IsInt, IsNotEmpty, IsOptional, IsPhoneNumber, IsString, IsUrl } from 'class-validator'; import { getConnectionManager } from 'typeorm'; import { config } from '../../../config'; -import { UserEmailNeededError, UsernameContainsIllegalCharacterError } from '../../../errors/UserErrors'; +import { PasswordMustContainLowercaseLetterError, PasswordMustContainNumberError, PasswordMustContainUppercaseLetterError, PasswordTooShortError, UserEmailNeededError, UsernameContainsIllegalCharacterError } from '../../../errors/UserErrors'; import { UserGroupNotFoundError } from '../../../errors/UserGroupErrors'; import { User } from '../../entities/User'; import { UserGroup } from '../../entities/UserGroup'; + /** * This class is used to update a User entity (via put request). */ @@ -104,6 +106,11 @@ export class UpdateUser { if (this.username.includes("@")) { throw new UsernameContainsIllegalCharacterError(); } if (this.password) { + let password_strength = passwordStrength(this.password); + if (!password_strength.contains.includes("uppercase")) { throw new PasswordMustContainUppercaseLetterError(); } + if (!password_strength.contains.includes("lowercase")) { throw new PasswordMustContainLowercaseLetterError(); } + if (!password_strength.contains.includes("number")) { throw new PasswordMustContainNumberError(); } + if (!(password_strength.length > 9)) { throw new PasswordTooShortError(); } user.password = await argon2.hash(this.password + user.uuid); user.refreshTokenCount = user.refreshTokenCount + 1; }