1package commands
2
3import (
4 "fmt"
5
6 "github.com/MichaelMure/git-bug/cache"
7 "github.com/MichaelMure/git-bug/identity"
8 "github.com/MichaelMure/git-bug/input"
9 "github.com/MichaelMure/git-bug/util/interrupt"
10 "github.com/spf13/cobra"
11)
12
13var (
14 keyAddArmoredFile string
15 keyAddArmored string
16)
17
18func runKeyAdd(cmd *cobra.Command, args []string) error {
19 backend, err := cache.NewRepoCache(repo)
20 if err != nil {
21 return err
22 }
23 defer backend.Close()
24 interrupt.RegisterCleaner(backend.Close)
25
26 id, args, err := ResolveUser(backend, args)
27 if err != nil {
28 return err
29 }
30
31 if len(args) > 0 {
32 return fmt.Errorf("unexpected arguments: %s", args)
33 }
34
35 if keyAddArmoredFile != "" && keyAddArmored == "" {
36 keyAddArmored, err = input.TextFileInput(keyAddArmoredFile)
37 if err != nil {
38 return err
39 }
40 }
41
42 if keyAddArmoredFile == "" && keyAddArmored == "" {
43 keyAddArmored, err = input.IdentityVersionKeyEditorInput(backend, "")
44 if err == input.ErrEmptyMessage {
45 fmt.Println("Empty PGP key, aborting.")
46 return nil
47 }
48 if err != nil {
49 return err
50 }
51 }
52
53 key, err := identity.NewKey(keyAddArmored)
54
55 if err != nil {
56 return err
57 }
58
59 err = id.Mutate(func(mutator identity.Mutator) identity.Mutator {
60 mutator.Keys = append(mutator.Keys, key)
61 return mutator
62 })
63
64 if err != nil {
65 return err
66 }
67
68 return id.Commit()
69}
70
71var keyAddCmd = &cobra.Command{
72 Use: "add [<user-id>]",
73 Short: "Add a PGP key from a user.",
74 PreRunE: loadRepoEnsureUser,
75 RunE: runKeyAdd,
76}
77
78func init() {
79 keyCmd.AddCommand(keyAddCmd)
80
81 keyAddCmd.Flags().SortFlags = false
82
83 keyAddCmd.Flags().StringVarP(&keyAddArmoredFile, "file", "F", "",
84 "Take the armored PGP public key from the given file. Use - to read the message from the standard input",
85 )
86
87 keyAddCmd.Flags().StringVarP(&keyAddArmored, "key", "k", "",
88 "Provide the armored PGP public key from the command line",
89 )
90}