mirror of
https://github.com/makeplane/plane
synced 2025-08-07 19:59:33 +00:00
68 lines
2.1 KiB
TypeScript
68 lines
2.1 KiB
TypeScript
import zxcvbn from "zxcvbn";
|
|
|
|
export enum E_PASSWORD_STRENGTH {
|
|
EMPTY = "empty",
|
|
LENGTH_NOT_VALID = "length_not_valid",
|
|
STRENGTH_NOT_VALID = "strength_not_valid",
|
|
STRENGTH_VALID = "strength_valid",
|
|
}
|
|
|
|
const PASSWORD_MIN_LENGTH = 8;
|
|
// const PASSWORD_NUMBER_REGEX = /\d/;
|
|
// const PASSWORD_CHAR_CAPS_REGEX = /[A-Z]/;
|
|
// const PASSWORD_SPECIAL_CHAR_REGEX = /[`!@#$%^&*()_\-+=\[\]{};':"\\|,.<>\/?~ ]/;
|
|
|
|
export const PASSWORD_CRITERIA = [
|
|
{
|
|
key: "min_8_char",
|
|
label: "Min 8 characters",
|
|
isCriteriaValid: (password: string) => password.length >= PASSWORD_MIN_LENGTH,
|
|
},
|
|
// {
|
|
// key: "min_1_upper_case",
|
|
// label: "Min 1 upper-case letter",
|
|
// isCriteriaValid: (password: string) => PASSWORD_NUMBER_REGEX.test(password),
|
|
// },
|
|
// {
|
|
// key: "min_1_number",
|
|
// label: "Min 1 number",
|
|
// isCriteriaValid: (password: string) => PASSWORD_CHAR_CAPS_REGEX.test(password),
|
|
// },
|
|
// {
|
|
// key: "min_1_special_char",
|
|
// label: "Min 1 special character",
|
|
// isCriteriaValid: (password: string) => PASSWORD_SPECIAL_CHAR_REGEX.test(password),
|
|
// },
|
|
];
|
|
|
|
export const getPasswordStrength = (password: string): E_PASSWORD_STRENGTH => {
|
|
let passwordStrength: E_PASSWORD_STRENGTH = E_PASSWORD_STRENGTH.EMPTY;
|
|
|
|
if (!password || password === "" || password.length <= 0) {
|
|
return passwordStrength;
|
|
}
|
|
|
|
if (password.length >= PASSWORD_MIN_LENGTH) {
|
|
passwordStrength = E_PASSWORD_STRENGTH.STRENGTH_NOT_VALID;
|
|
} else {
|
|
passwordStrength = E_PASSWORD_STRENGTH.LENGTH_NOT_VALID;
|
|
return passwordStrength;
|
|
}
|
|
|
|
const passwordCriteriaValidation = PASSWORD_CRITERIA.map((criteria) => criteria.isCriteriaValid(password)).every(
|
|
(criterion) => criterion
|
|
);
|
|
const passwordStrengthScore = zxcvbn(password).score;
|
|
|
|
if (passwordCriteriaValidation === false || passwordStrengthScore <= 2) {
|
|
passwordStrength = E_PASSWORD_STRENGTH.STRENGTH_NOT_VALID;
|
|
return passwordStrength;
|
|
}
|
|
|
|
if (passwordCriteriaValidation === true && passwordStrengthScore >= 3) {
|
|
passwordStrength = E_PASSWORD_STRENGTH.STRENGTH_VALID;
|
|
}
|
|
|
|
return passwordStrength;
|
|
};
|