diff --git a/src/main/java/PasswordValidator.java b/src/main/java/PasswordValidator.java index 46fac42..986ba42 100644 --- a/src/main/java/PasswordValidator.java +++ b/src/main/java/PasswordValidator.java @@ -14,6 +14,7 @@ public class PasswordValidator { boolean requireDigit = true; boolean requireSpecialChar = true; boolean checkPwned = true; + boolean checkWordlist = false; private final Pattern uppercasePattern = Pattern.compile("^(?=.*[A-Z]).+$"); private final Pattern lowercasePattern = Pattern.compile("^(?=.*[a-z]).+$"); @@ -32,6 +33,8 @@ public class PasswordValidator { return false; } else if (requireSpecialChar && !specialCharPattern.matcher(password).matches()) { return false; + } else if (checkWordlist && isInWordlist(password)) { + return false; } else if (checkPwned && isPwned(password)) { return false; } @@ -86,6 +89,14 @@ public class PasswordValidator { this.checkPwned = checkPwned; } + public boolean isCheckWordlist() { + return checkWordlist; + } + + public void setCheckWordlist(boolean checkWordlist) { + this.checkWordlist = checkWordlist; + } + public static String getSHA1Hash(String input) { if (input.length() > 0) { try { diff --git a/src/test/java/PasswordValidatorTest.java b/src/test/java/PasswordValidatorTest.java index 6c6a72a..e5590d4 100644 --- a/src/test/java/PasswordValidatorTest.java +++ b/src/test/java/PasswordValidatorTest.java @@ -74,6 +74,16 @@ class PasswordValidatorTest { assertFalse(passwordValidator.validate("8")); assertFalse(passwordValidator.validate("asdf12")); assertTrue(passwordValidator.validate("=phan0johB4aisae6Mie0jeip9Saejahc0iuvuth7ahv9uoni6o*_.+")); + + // test password wordlist check + passwordValidator.setRequireUppercase(true); + passwordValidator.setRequireLowercase(true); + passwordValidator.setRequireDigit(true); + passwordValidator.setCheckPwned(true); + passwordValidator.setCheckWordlist(true); + assertFalse(passwordValidator.validate("8")); + assertFalse(passwordValidator.validate("_Sonnenblume123")); + assertTrue(passwordValidator.validate("=phan0johB4aisae6Mie0jeip9Saejahc0iuvuth7ahv9uoni6o*_.+")); } @Test