Implement random separators

Amolith created

Change summary

main.go | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)

Detailed changes

main.go 🔗

@@ -19,6 +19,7 @@ var (
 	consonants     = "bcdfghjklmnpqrstvwxyz"
 	vowels         = "aeiou"
 	numbers        = "0123456789"
+	separators     = "-. "
 	newBase60Chars = "0123456789ABCDEFGHJKLMNPQRSTUVWXYZ_abcdefghijkmnopqrstuvwxyz"
 	flagNB60       = flag.BoolP("nb60", "n", false, "Generate a 20-character password using the NewBase60 charset")
 	flagFriendly   = flag.BoolP("friendly", "f", true, "Generate a 20-character password using an Apple-style friendly algorithm")
@@ -31,6 +32,7 @@ func main() {
 		os.Exit(0)
 	}
 	fmt.Println(generateFriendly())
+	os.Exit(0)
 }
 
 func generateNB60() string {
@@ -50,12 +52,12 @@ func generateFriendly() string {
 		sets[i] = genFriendlySet()
 	}
 
-	result := strings.Join(sets, "-")
+	result := strings.Join(sets, string(separators[randomInt(len(separators))]))
 
 	letterPos := randomInt(len(result))
 
 	// Generate a different position until a non-separator is found
-	for result[letterPos] == '-' {
+	for strings.Contains(separators, string(result[letterPos])) {
 		letterPos = randomInt(len(result))
 	}
 	existingLetter := result[letterPos]
@@ -70,7 +72,7 @@ func generateFriendly() string {
 	// Generate a different position until a non-separator and non-uppercase-letter
 	// is found
 	numberPos := randomInt(len(result))
-	for result[numberPos] == '-' || result[numberPos] == result[letterPos] {
+	for strings.Contains(separators, string(result[numberPos])) || numberPos == letterPos {
 		numberPos = randomInt(len(result))
 	}
 	result = result[:numberPos] + string(numbers[randomInt(len(numbers))]) + result[numberPos+1:]