user_create.go

 1package commands
 2
 3import (
 4	"github.com/spf13/cobra"
 5
 6	"github.com/MichaelMure/git-bug/input"
 7)
 8
 9type createUserOptions struct {
10	name      string
11	email     string
12	avatarURL string
13}
14
15func newUserCreateCommand() *cobra.Command {
16	env := newEnv()
17
18	options := createUserOptions{}
19	cmd := &cobra.Command{
20		Use:      "create",
21		Short:    "Create a new identity.",
22		PreRunE:  loadBackend(env),
23		PostRunE: closeBackend(env),
24		RunE: func(cmd *cobra.Command, args []string) error {
25			return runUserCreate(env, options)
26		},
27	}
28
29	flags := cmd.Flags()
30	flags.StringVarP(&options.name, "name", "n", "", "Name to identify the user")
31	flags.StringVarP(&options.email, "email", "e", "", "Email of the user")
32	flags.StringVarP(&options.avatarURL, "avatar", "a", "", "Avatar URL")
33
34	return cmd
35}
36
37func runUserCreate(env *Env, opts createUserOptions) error {
38
39	if opts.name == "" {
40		preName, err := env.backend.GetUserName()
41		if err != nil {
42			return err
43		}
44		opts.name, err = input.PromptDefault("Name", "name", preName, input.Required)
45		if err != nil {
46			return err
47		}
48	}
49
50	if opts.email == "" {
51		preEmail, err := env.backend.GetUserEmail()
52		if err != nil {
53			return err
54		}
55
56		opts.email, err = input.PromptDefault("Email", "email", preEmail, input.Required)
57		if err != nil {
58			return err
59		}
60	}
61
62	if opts.avatarURL == "" {
63		var err error
64		opts.avatarURL, err = input.Prompt("Avatar URL", "avatar")
65		if err != nil {
66			return err
67		}
68	}
69
70	id, err := env.backend.NewIdentityRaw(opts.name, opts.email, "", opts.avatarURL, nil, nil)
71	if err != nil {
72		return err
73	}
74
75	err = id.CommitAsNeeded()
76	if err != nil {
77		return err
78	}
79
80	set, err := env.backend.IsUserIdentitySet()
81	if err != nil {
82		return err
83	}
84
85	if !set {
86		err = env.backend.SetUserIdentity(id)
87		if err != nil {
88			return err
89		}
90	}
91
92	env.err.Println()
93	env.out.Println(id.Id())
94
95	return nil
96}