diff --git a/src/main/java/de/icaotix/generator/PasswordBuilder.java b/src/main/java/de/icaotix/generator/PasswordBuilder.java new file mode 100644 index 0000000..2163ca4 --- /dev/null +++ b/src/main/java/de/icaotix/generator/PasswordBuilder.java @@ -0,0 +1,88 @@ +package de.icaotix.generator; + +import java.util.LinkedList; +import java.util.Random; + +public class PasswordBuilder { + private static final String UPPERCASE_LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + private static final String LOWERCASE_LETTERS = UPPERCASE_LETTERS.toLowerCase(); + private static final String NUMBERS = "1234567890"; + private static final String SPECIAL_CHARACTERS = "~!@#()*^&%ยง?.,<>:/|[]{}=+_-"; + + private int length; + private int repeat; + private boolean appendUpper = true; + private boolean appendLower = true; + private boolean appendNumbers = true; + private boolean appendSpecial = false; + private String excludes; + + public PasswordBuilder() { + this.length = 8; + this.repeat = 1; + } + + public PasswordBuilder setLength(int length) { + this.length = length; + return this; + } + + public PasswordBuilder setRepeat(int repeat) { + this.repeat = repeat; + return this; + } + + public PasswordBuilder setExcludes(String excludes) { + this.excludes = excludes; + return this; + } + + public PasswordBuilder useLowercase(boolean use) { + this.appendLower = use; + return this; + } + + public PasswordBuilder useUppercase(boolean use) { + this.appendUpper = use; + return this; + } + + public PasswordBuilder useNumbers(boolean use) { + this.appendNumbers = use; + return this; + } + + public PasswordBuilder useSpecial(boolean use) { + this.appendSpecial = use; + return this; + } + + public LinkedList generate() { + final StringBuilder poolBuilder = new StringBuilder(); + + if (appendUpper) poolBuilder.append(UPPERCASE_LETTERS); + if (appendLower) poolBuilder.append(LOWERCASE_LETTERS); + if (appendNumbers) poolBuilder.append(NUMBERS); + if (appendSpecial) poolBuilder.append(SPECIAL_CHARACTERS); + + String finalPool = poolBuilder.toString().replaceAll(excludes, ""); + LinkedList passwords = new LinkedList<>(); + Random rand = new Random(); + + if (finalPool.length() < 1) return passwords; + + for (int i = 0; i < repeat; i++) { + StringBuilder currPassword = new StringBuilder(); + for (int j = 0; j < length; j++) { + currPassword.append( + finalPool.charAt( + rand.nextInt(finalPool.length()) + ) + ); + } + passwords.add(currPassword.toString()); + } + + return passwords; + } +}