diff --git a/src/cli/add.go b/src/cli/add.go index 9566b32..bb02e76 100644 --- a/src/cli/add.go +++ b/src/cli/add.go @@ -7,7 +7,8 @@ import ( ) // AddEntry creates a new entry at targetLocation by taking user input via CLI prompts -func AddEntry(targetLocation string, hidePassword bool, isNote bool) { +// entryType: 0 = standard (password), 1 = auto-generated password, 2 = note +func AddEntry(targetLocation string, hidePassword bool, entryType uint8) { _, isAccessible := offline.TargetIsFile(targetLocation, false, 0) if isAccessible { fmt.Println(offline.AnsiError + "Target location already exists" + offline.AnsiReset) @@ -16,9 +17,17 @@ func AddEntry(targetLocation string, hidePassword bool, isNote bool) { var unencryptedEntry []string - if !isNote { + if entryType < 2 { username := input("Username:") - password := inputHidden("Password:") + + // determine whether to generate the password + var password string + if entryType == 0 { + password = inputHidden("Password:") + } else { + password = offline.StringGen(inputInt("Password length:"), inputBinary("Generate a complex (special characters) password?"), 0.2) + } + url := input("URL:") if inputBinary("Add a note to this entry?") { note := newNote() diff --git a/src/cli/utilitiesMisc.go b/src/cli/utilitiesMisc.go index ba137bb..7fb317d 100644 --- a/src/cli/utilitiesMisc.go +++ b/src/cli/utilitiesMisc.go @@ -12,9 +12,9 @@ import ( // input prompts the user for input and returns the input as a string func input(prompt string) string { fmt.Print("\n" + prompt + " ") - var input string - fmt.Scanln(&input) - return input + var userInput string + fmt.Scanln(&userInput) + return userInput } // inputHidden prompts the user for input and returns the input as a string, hiding the input from the terminal @@ -26,6 +26,20 @@ func inputHidden(prompt string) string { return password } +// inputInt prompts the user for input and returns the input as an integer +func inputInt(prompt string) int { + + // loop until a valid integer is entered + for { + fmt.Print("\n" + prompt + " ") + var userInput int + _, err := fmt.Scanln(&userInput) + if err == nil { + return userInput + } + } +} + // inputBinary prompts the user with a yes/no question and returns the response as a boolean func inputBinary(prompt string) bool { reader := bufio.NewReader(os.Stdin)