package main import ( "encoding/json" "fmt" "os" "github.com/Luzifer/password/hasher" pwd "github.com/Luzifer/password/lib" "github.com/spf13/cobra" ) func getCmdGet() *cobra.Command { cmd := cobra.Command{ Use: "get", Short: "generate and return a secure random password", Run: actionCmdGet, } 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().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") cmd.Flags().BoolVarP(&flags.CLI.PrependDate, "date", "d", true, "prepend current date to XKCD style passwords") return &cmd } func actionCmdGet(cmd *cobra.Command, args []string) { var ( password 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) } 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) os.Exit(0) } 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) }