1package commands
2
3import (
4 "fmt"
5 "os"
6
7 "github.com/MichaelMure/git-bug/cache"
8 "github.com/MichaelMure/git-bug/identity"
9 "github.com/MichaelMure/git-bug/input"
10 "github.com/MichaelMure/git-bug/util/interrupt"
11 "github.com/spf13/cobra"
12)
13
14var userCreateArmoredKeyFile string
15
16func runUserCreate(cmd *cobra.Command, args []string) error {
17 backend, err := cache.NewRepoCache(repo)
18 if err != nil {
19 return err
20 }
21 defer backend.Close()
22 interrupt.RegisterCleaner(backend.Close)
23
24 preName, err := backend.GetUserName()
25 if err != nil {
26 return err
27 }
28
29 name, err := input.PromptDefault("Name", "name", preName, input.Required)
30 if err != nil {
31 return err
32 }
33
34 preEmail, err := backend.GetUserEmail()
35 if err != nil {
36 return err
37 }
38
39 email, err := input.PromptDefault("Email", "email", preEmail, input.Required)
40 if err != nil {
41 return err
42 }
43
44 avatarURL, err := input.Prompt("Avatar URL", "avatar")
45 if err != nil {
46 return err
47 }
48
49 var key *identity.Key
50 if userCreateArmoredKeyFile != "" {
51 armoredPubkey, err := input.TextFileInput(userCreateArmoredKeyFile)
52 if err != nil {
53 return err
54 }
55
56 key, err = identity.NewKey(armoredPubkey)
57 if err != nil {
58 return err
59 }
60
61 fmt.Printf("Using key from file `%s`:\n%s\n", userCreateArmoredKeyFile, armoredPubkey)
62 }
63
64 id, err := backend.NewIdentityWithKeyRaw(name, email, "", avatarURL, nil, key)
65 if err != nil {
66 return err
67 }
68
69 err = id.CommitAsNeeded()
70 if err != nil {
71 return err
72 }
73
74 set, err := backend.IsUserIdentitySet()
75 if err != nil {
76 return err
77 }
78
79 if !set {
80 err = backend.SetUserIdentity(id)
81 if err != nil {
82 return err
83 }
84 }
85
86 _, _ = fmt.Fprintln(os.Stderr)
87 fmt.Println(id.Id())
88
89 return nil
90}
91
92var userCreateCmd = &cobra.Command{
93 Use: "create",
94 Short: "Create a new identity.",
95 PreRunE: loadRepo,
96 RunE: runUserCreate,
97}
98
99func init() {
100 userCmd.AddCommand(userCreateCmd)
101 userCreateCmd.Flags().SortFlags = false
102
103 userCreateCmd.Flags().StringVar(&userCreateArmoredKeyFile, "key-file","",
104 "Take the armored PGP public key from the given file. Use - to read the message from the standard input",
105 )
106
107}