@@ -2,64 +2,66 @@ package commands
22
33import (
44 "fmt"
5- "os"
65
76 "github.com/bndw/pick/errors"
7+ "github.com/bndw/pick/strings"
88 "github.com/bndw/pick/utils"
9+ "github.com/bndw/pick/utils/pswdgen"
910 "github.com/spf13/cobra"
11+ "github.com/spf13/pflag"
1012)
1113
1214func init () {
1315 rootCmd .AddCommand (& cobra.Command {
1416 Use : "add [name] [username] [password]" ,
1517 Short : "Add a credential" ,
16- Long : `The add command is used to add a new credential.
17- ` ,
18+ Long : "The add command is used to add a new credential." ,
1819 Run : func (cmd * cobra.Command , args []string ) {
19- os . Exit (Add ( args ... ) )
20+ runCommand (Add , cmd , args )
2021 },
2122 })
2223}
2324
24- func Add (args ... string ) int {
25- safe , err := loadSafe ()
25+ func Add (args [] string , flags * pflag. FlagSet ) error {
26+ safe , err := newSafeLoader (). Load ()
2627 if err != nil {
27- return handleError ( err )
28+ return err
2829 }
2930
30- name , username , password , errCode := parseAddArgs (args )
31- if errCode > 0 {
32- return errCode
31+ name , username , password , err := parseAddArgs (args )
32+ if err != nil {
33+ return err
3334 }
3435
3536 account , err := safe .Add (name , username , password )
3637 if _ , conflict := err .(* errors.AccountExists ); conflict && overwrite (name ) {
37- var replaceErr error
38- if account , replaceErr = safe .Replace (name , username , password ); replaceErr != nil {
39- return handleError ( replaceErr )
38+ var editErr error
39+ if account , editErr = safe .Edit (name , username , password ); editErr != nil {
40+ return editErr
4041 }
4142 } else if err != nil {
42- return handleError ( err )
43+ return err
4344 }
4445
4546 fmt .Println ("Credential added" )
4647 if utils .Confirm ("Copy password to clipboard" , true ) {
4748 if err := utils .CopyToClipboard (account .Password ); err != nil {
48- return handleError ( err )
49+ return err
4950 }
51+ fmt .Println (strings .PasswordCopiedToClipboard )
5052 }
51- return 0
53+ return nil
5254}
5355
5456func overwrite (name string ) bool {
5557 prompt := fmt .Sprintf ("%s already exists, overwrite" , name )
5658 return utils .Confirm (prompt , false )
5759}
5860
59- func parseAddArgs (args []string ) (name , username , password string , errCode int ) {
61+ func parseAddArgs (args []string ) (name , username , password string , err error ) {
6062 if len (args ) > 3 {
61- fmt . Println ( "Usage: add [name] [username] [password]" )
62- return "" , "" , "" , 1
63+ err = & errors. InvalidCommandUsage {}
64+ return
6365 }
6466
6567 switch len (args ) {
@@ -73,41 +75,32 @@ func parseAddArgs(args []string) (name, username, password string, errCode int)
7375 name = args [0 ]
7476 }
7577
76- errCode = 1
77- var err error
78-
7978 if name == "" {
8079 if name , err = utils .GetInput ("Enter a credential name" ); err != nil {
81- fmt .Println (err )
8280 return
8381 }
8482 }
8583
8684 if username == "" {
8785 if username , err = utils .GetInput (fmt .Sprintf ("Enter a username for %s" , name )); err != nil {
88- fmt .Println (err )
8986 return
9087 }
9188 }
9289
9390 if password == "" {
9491 if utils .Confirm ("Generate password" , true ) {
95- password , err = utils .GeneratePassword (config .General .PasswordLen )
96- if err != nil {
97- fmt .Println (err )
92+ if password , err = pswdgen .Generate (config .General .Password ); err != nil {
9893 return
9994 }
10095 } else {
10196 var _password []byte
10297 if _password , err = utils .GetPasswordInput (fmt .Sprintf ("Enter a password for %s" , name )); err != nil {
103- fmt .Println (err )
10498 return
10599 }
106100
107101 password = string (_password )
108102 }
109103 }
110104
111- errCode = 0
112105 return
113106}
0 commit comments