github.com/GGP1/kure@v0.8.4/commands/card/add/add.go (about) 1 package add 2 3 import ( 4 "bufio" 5 "fmt" 6 "io" 7 "strings" 8 9 "github.com/GGP1/kure/auth" 10 cmdutil "github.com/GGP1/kure/commands" 11 "github.com/GGP1/kure/db/card" 12 "github.com/GGP1/kure/pb" 13 "github.com/GGP1/kure/terminal" 14 15 "github.com/spf13/cobra" 16 bolt "go.etcd.io/bbolt" 17 ) 18 19 const example = ` 20 * Add a new card 21 kure card add Sample` 22 23 // NewCmd returns a new command. 24 func NewCmd(db *bolt.DB, r io.Reader) *cobra.Command { 25 return &cobra.Command{ 26 Use: "add <name>", 27 Short: "Add a card", 28 Aliases: []string{"create", "new"}, 29 Example: example, 30 Args: cmdutil.MustNotExist(db, cmdutil.Card), 31 PreRunE: auth.Login(db), 32 RunE: runAdd(db, r), 33 } 34 } 35 36 func runAdd(db *bolt.DB, r io.Reader) cmdutil.RunEFunc { 37 return func(cmd *cobra.Command, args []string) error { 38 name := strings.Join(args, " ") 39 name = cmdutil.NormalizeName(name) 40 41 c, err := input(db, name, r) 42 if err != nil { 43 return err 44 } 45 46 if err := card.Create(db, c); err != nil { 47 return err 48 } 49 50 fmt.Printf("\n%q added\n", name) 51 return nil 52 } 53 } 54 55 func input(db *bolt.DB, name string, r io.Reader) (*pb.Card, error) { 56 reader := bufio.NewReader(r) 57 c := &pb.Card{ 58 Name: name, 59 Type: terminal.Scanln(reader, "Type"), 60 Number: terminal.Scanln(reader, "Number"), 61 SecurityCode: terminal.Scanln(reader, "Security code"), 62 ExpireDate: terminal.Scanln(reader, "Expire date"), 63 Notes: terminal.Scanlns(reader, "Notes"), 64 } 65 66 return c, nil 67 }