@mrhsp/auth-backend
Version:
Gate Keeper Backend Authentication Package
29 lines (28 loc) • 1.35 kB
JavaScript
import { PasswordPolicyError } from "../errors.js";
export function validatePassword(password, policy) {
if (!policy)
return;
// Length check
if (policy.minLength && password.length < policy.minLength) {
throw new PasswordPolicyError(`Password must be at least ${policy.minLength} characters`);
}
// Character type checks
const counts = {
lower: (password.match(/[a-z]/g) || []).length,
upper: (password.match(/[A-Z]/g) || []).length,
number: (password.match(/[0-9]/g) || []).length,
symbol: (password.match(/[^a-zA-Z0-9]/g) || []).length,
};
if (policy.minLowercase && counts.lower < policy.minLowercase) {
throw new PasswordPolicyError(`Password must contain at least ${policy.minLowercase} lowercase letters`);
}
if (policy.minUppercase && counts.upper < policy.minUppercase) {
throw new PasswordPolicyError(`Password must contain at least ${policy.minUppercase} uppercase letters`);
}
if (policy.minNumbers && counts.number < policy.minNumbers) {
throw new PasswordPolicyError(`Password must contain at least ${policy.minNumbers} numbers`);
}
if (policy.minSymbols && counts.symbol < policy.minSymbols) {
throw new PasswordPolicyError(`Password must contain at least ${policy.minSymbols} symbols`);
}
}