diff --git a/main.go b/main.go index fdd90c7..325d4d8 100644 --- a/main.go +++ b/main.go @@ -108,16 +108,17 @@ func main() { switch args[3] { case "show", "-s": cli.AddEntry(targetLocation, false, 1) - case "update", "-u": // TODO offline.GenUpdate(targetLocation), exit after run + case "update", "-u": + cli.GenUpdate(targetLocation, true) default: cli.HelpGen() } } else if args[3] == "update" || args[3] == "-u" { switch args[4] { case "show", "-s": - cli.AddEntry(targetLocation, false, 1) + cli.GenUpdate(targetLocation, false) default: - cli.AddEntry(targetLocation, true, 1) + cli.GenUpdate(targetLocation, true) } } cli.HelpGen() diff --git a/src/cli/edit.go b/src/cli/edit.go index f4bc5b1..7745d34 100644 --- a/src/cli/edit.go +++ b/src/cli/edit.go @@ -51,3 +51,25 @@ func EditEntry(targetLocation string, hidePassword bool, field int) { os.Exit(1) } } + +// GenUpdate generates a new password for an entry at targetLocation (user input) +func GenUpdate(targetLocation string, hidePassword bool) { + // ensure targetLocation exists + offline.TargetIsFile(targetLocation, true, 2) + + // read old entry data + unencryptedEntry := offline.DecryptGPG(targetLocation) + + // generate a new password + unencryptedEntry[0] = offline.StringGen(inputInt("Password length:"), inputBinary("Generate a complex (special characters) password?"), 0.2) + + // write and preview the modified entry + if offline.EntryIsNotEmpty(unencryptedEntry) { + offline.WriteEntry(targetLocation, unencryptedEntry) + fmt.Println(ansiBold + "\nEntry Preview:" + offline.AnsiReset) + EntryReader(unencryptedEntry, hidePassword) + } else { + fmt.Println(offline.AnsiError + "No data supplied for entry" + offline.AnsiReset) + os.Exit(1) + } +}