Files
Self-Service-Dashboard/static/javascript/password_strength.js
2026-04-06 15:48:27 -04:00

52 lines
1.7 KiB
JavaScript

// build in evaluate password function
// Errors: reasons why the FreeIPA server would reject the password
// Suggestions: reasons the password should be made stronger
// You can change this code to change how complexity is rated
// Return values
// Score: 0-100
// Errors: A list of errors that would cause the server to reject the password
// Suggestions: A list of suggestions to make the password stronger
function EvaluatePassword(password) {
let score = 0;
let errors = [];
let suggestions = [];
const hasUpper = /[A-Z]/.test(password);
const hasLower = /[a-z]/.test(password);
const hasNumber = /[0-9]/.test(password);
const hasSpecial = /[^A-Za-z0-9]/.test(password);
const isLongEnough = password.length >= 8;
if (!isLongEnough) {
errors.push("Password must be at least 8 characters long.");
}
score += Math.min(password.length * 3, 60);
if (hasUpper) score += 10;
if (hasLower) score += 10;
if (hasNumber) score += 10;
if (hasSpecial) score += 10;
if (score < 100) {
if (password.length < 20) {
suggestions.push(
`Add ${20 - password.length} more characters to reach maximum length points.`,
);
}
if (!hasUpper) suggestions.push("Add an uppercase letter.");
if (!hasLower) suggestions.push("Add a lowercase letter.");
if (!hasNumber) suggestions.push("Add a number.");
if (!hasSpecial)
suggestions.push("Add a special character (e.g., !, @, #).");
if (score > 70 && score < 100) {
suggestions.push(
"Pro-tip: Use a full sentence (passphrase) to make it easier to remember and harder to crack.",
);
}
}
return {
score: Math.min(score, 100),
errors: errors,
suggestions: suggestions,
};
}