validatePasswordParts function
String?
validatePasswordParts({
- required String input,
- List<
String> ? commonPasswords, - SahihLanguage? lang,
Validates password strength with comprehensive security requirements.
Performs detailed password strength analysis including character diversity, length validation, entropy calculation, and checks against common weak passwords.
Requirements: 8+ characters, uppercase, lowercase, digit, not only numbers, not a common password, sufficient entropy.
Returns null for strong passwords, or detailed error messages listing all
validation failures (separated by newlines).
Parameters:
input: The password to validatecommonPasswords: Optional list of passwords to rejectlang: Optional language for error messages
Implementation
String? validatePasswordParts({
required String input,
List<String>? commonPasswords,
SahihLanguage? lang,
}) {
final errors = <String>[];
final weakList = commonPasswords ?? weakPasswords;
if (input.isEmpty) {
errors.add(SahihLocalization.get('password_empty', lang: lang));
return errors.join('\n');
}
if (weakList.contains(input)) {
errors.add(SahihLocalization.get('password_too_common', lang: lang));
return errors.join('\n');
}
if (input.length < 8) {
errors.add(SahihLocalization.get('password_min_length', lang: lang));
}
if (!RegExp(r'[A-Z]').hasMatch(input)) {
errors.add(SahihLocalization.get('password_no_upper', lang: lang));
}
if (!RegExp(r'[a-z]').hasMatch(input)) {
errors.add(SahihLocalization.get('password_no_lower', lang: lang));
}
if (!RegExp(r'[0-9]').hasMatch(input)) {
errors.add(SahihLocalization.get('password_no_digit', lang: lang));
}
if (RegExp(r'^[0-9]+$').hasMatch(input)) {
errors.add(SahihLocalization.get('password_only_numbers', lang: lang));
}
final charsetSize = calculateCharsetSize(input);
final entropy = input.length * log(charsetSize) / log(2);
if (entropy < 60) {
errors.add(SahihLocalization.get('password_too_weak', lang: lang));
}
return errors.isEmpty ? null : errors.join('\n');
}