diff --git a/src/main/java/PasswordGenerator.java b/src/main/java/PasswordGenerator.java index 0744c31..fd122a5 100644 --- a/src/main/java/PasswordGenerator.java +++ b/src/main/java/PasswordGenerator.java @@ -6,28 +6,62 @@ public class PasswordGenerator { final String uppercaseCharacters = "ABCDEFGHJKMNPQRSTUVWXYZ"; final String digits = "0123456789"; - int length = 12; + private int length = 12; + private boolean useUppercase = true; + private boolean useLowercase = true; + private boolean useDigits = true; - public int getLength() { - return length; - } - - public void setLength(int length) { - this.length = length; - } public String generateRandomPassword() { StringBuilder generatedPassword = new StringBuilder(); SecureRandom rand = new SecureRandom(); String characterPool = ""; - characterPool += lowercaseCharacters; - characterPool += uppercaseCharacters; - characterPool += digits; + if (isUseLowercase()) { + characterPool += lowercaseCharacters; + } + if (isUseUppercase()) { + characterPool += uppercaseCharacters; + } + if (isUseDigits()) { + characterPool += digits; + } for (int generatorPosition = 0; generatorPosition < getLength(); generatorPosition++) { generatedPassword.append(characterPool.charAt(rand.nextInt(characterPool.length()))); } return generatedPassword.toString(); } + + public boolean isUseUppercase() { + return useUppercase; + } + + public void setUseUppercase(boolean useUppercase) { + this.useUppercase = useUppercase; + } + + public boolean isUseLowercase() { + return useLowercase; + } + + public void setUseLowercase(boolean useLowercase) { + this.useLowercase = useLowercase; + } + + public boolean isUseDigits() { + return useDigits; + } + + public void setUseDigits(boolean useDigits) { + this.useDigits = useDigits; + } + + public int getLength() { + return length; + } + + public void setLength(int length) { + this.length = length; + } } diff --git a/src/test/java/PasswordGeneratorTest.java b/src/test/java/PasswordGeneratorTest.java index 7f9874c..6ff1dc1 100644 --- a/src/test/java/PasswordGeneratorTest.java +++ b/src/test/java/PasswordGeneratorTest.java @@ -26,16 +26,25 @@ class PasswordGeneratorTest { @Test void testPasswordLowercaseRequirement() { + passwordGenerator.setUseLowercase(false); + assertFalse(Pattern.compile("^(?=.*[a-z]).+$").matcher(passwordGenerator.generateRandomPassword()).matches()); + passwordGenerator.setUseLowercase(true); assertTrue(Pattern.compile("^(?=.*[a-z]).+$").matcher(passwordGenerator.generateRandomPassword()).matches()); } @Test void testPasswordUppercaseRequirement() { + passwordGenerator.setUseUppercase(false); + assertFalse(Pattern.compile("^(?=.*[A-Z]).+$").matcher(passwordGenerator.generateRandomPassword()).matches()); + passwordGenerator.setUseUppercase(true); assertTrue(Pattern.compile("^(?=.*[A-Z]).+$").matcher(passwordGenerator.generateRandomPassword()).matches()); } @Test void testPasswordDigitsRequirement() { + passwordGenerator.setUseDigits(false); + assertFalse(Pattern.compile("^(?=.*\\d).+$").matcher(passwordGenerator.generateRandomPassword()).matches()); + passwordGenerator.setUseDigits(true); assertTrue(Pattern.compile("^(?=.*\\d).+$").matcher(passwordGenerator.generateRandomPassword()).matches()); } }