ajv-formats-strong-password
Version:
Easy way to add configurable strong password format to ajv to use in schema validations
61 lines (60 loc) • 2.02 kB
JavaScript
// src/addStrongPasswordFormat.ts
var defaultUpperCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var defaultLowerCharacters = "abcdefghijklmnopqrstuvwxyz";
var defaultDigitCharacters = "0123456789";
var defaultSpecialCharacters = " !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~";
var countCharacters = (str, characters) => {
let count = 0;
for (let i = 0; i < str.length; i++) {
if (characters.includes(str[i])) {
count++;
}
}
return count;
};
var generatePasswordStrengthValidator = ({
minUpper = 0,
minLower = 0,
minDigit = 0,
minSpecial = 0,
minLength = 0,
upperCharacters = defaultUpperCharacters,
lowerCharacters = defaultLowerCharacters,
digitCharacters = defaultDigitCharacters,
specialCharacters = defaultSpecialCharacters
} = {}) => {
return (password) => {
const effectiveMinLength = Math.max(
minUpper + minSpecial + minDigit + minLower,
minLength
);
const hasMinUpper = countCharacters(password, upperCharacters) >= minUpper;
const hasMinLower = countCharacters(password, lowerCharacters) >= minLower;
const hasMinDigit = countCharacters(password, digitCharacters) >= minDigit;
const hasMinSpecial = countCharacters(password, specialCharacters) >= minSpecial;
const hasMinLength = password.length >= effectiveMinLength;
const isStrongPassword = hasMinUpper && hasMinLower && hasMinDigit && hasMinSpecial && hasMinLength;
return isStrongPassword;
};
};
var addStrongPasswordFormat = ({
ajvInstance,
passwordCriteria
}) => {
const generatedPasswordStrengthValidator = generatePasswordStrengthValidator(passwordCriteria);
ajvInstance.addFormat("strong-password", {
type: "string",
validate: (x) => generatedPasswordStrengthValidator(x)
});
};
// src/index.ts
var src_default = addStrongPasswordFormat;
export {
src_default as default,
defaultDigitCharacters,
defaultLowerCharacters,
defaultSpecialCharacters,
defaultUpperCharacters,
generatePasswordStrengthValidator
};
//# sourceMappingURL=index.mjs.map