From f9c435af1aeee759522d8c89d3549f2372cd27a5 Mon Sep 17 00:00:00 2001 From: Knut Ahlers Date: Tue, 31 Oct 2017 12:57:19 +0100 Subject: [PATCH] Add commandline flag to generate multiple passwords Signed-off-by: Knut Ahlers --- cmdGet.go | 51 ++++++++++++++++++++++++++++----------------------- flags.go | 1 + 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/cmdGet.go b/cmdGet.go index 6a1a5ca..df3313a 100644 --- a/cmdGet.go +++ b/cmdGet.go @@ -19,6 +19,7 @@ func getCmdGet() *cobra.Command { cmd.Flags().BoolVarP(&flags.CLI.JSON, "json", "j", false, "return output in JSON format") cmd.Flags().IntVarP(&flags.CLI.Length, "length", "l", 20, "length of the generated password") + cmd.Flags().IntVarP(&flags.CLI.Num, "number", "n", 1, "number of passwords to generate") cmd.Flags().BoolVarP(&flags.CLI.SpecialCharacters, "special", "s", false, "use special characters in your password") cmd.Flags().BoolVarP(&flags.CLI.XKCD, "xkcd", "x", false, "use XKCD style password") @@ -33,32 +34,36 @@ func actionCmdGet(cmd *cobra.Command, args []string) { err error ) - if flags.CLI.XKCD { - password, err = pwd.DefaultXKCD.GeneratePassword(flags.CLI.Length, flags.CLI.PrependDate) - } else { - password, err = pwd.NewSecurePassword().GeneratePassword(flags.CLI.Length, flags.CLI.SpecialCharacters) - } + for i := 0; i < flags.CLI.Num; i++ { - if err != nil { - switch { - case err == pwd.ErrLengthTooLow: - fmt.Println("The password has to be more than 4 characters long to meet the security considerations") - default: - fmt.Println("An unknown error occured") + if flags.CLI.XKCD { + password, err = pwd.DefaultXKCD.GeneratePassword(flags.CLI.Length, flags.CLI.PrependDate) + } else { + password, err = pwd.NewSecurePassword().GeneratePassword(flags.CLI.Length, flags.CLI.SpecialCharacters) } - os.Exit(1) - } - if !flags.CLI.JSON { - fmt.Println(password) - os.Exit(0) - } + if err != nil { + switch { + case err == pwd.ErrLengthTooLow: + fmt.Println("The password has to be more than 4 characters long to meet the security considerations") + default: + fmt.Println("An unknown error occured") + } + os.Exit(1) + } + + if !flags.CLI.JSON { + fmt.Println(password) + continue + } + + hashes, err := hasher.GetHashMap(password) + if err != nil { + fmt.Printf("Unable to generate hashes: %s", err) + os.Exit(1) + } + hashes["password"] = password + json.NewEncoder(os.Stdout).Encode(hashes) - hashes, err := hasher.GetHashMap(password) - if err != nil { - fmt.Printf("Unable to generate hashes: %s", err) - os.Exit(1) } - hashes["password"] = password - json.NewEncoder(os.Stdout).Encode(hashes) } diff --git a/flags.go b/flags.go index e926170..b049986 100644 --- a/flags.go +++ b/flags.go @@ -5,6 +5,7 @@ var flags = struct { Length int SpecialCharacters bool JSON bool + Num int XKCD bool PrependDate bool