user_new.go

 1package usercmd
 2
 3import (
 4	"github.com/spf13/cobra"
 5
 6	"github.com/MichaelMure/git-bug/commands/execenv"
 7	"github.com/MichaelMure/git-bug/commands/input"
 8)
 9
10type userNewOptions struct {
11	name           string
12	email          string
13	avatarURL      string
14	nonInteractive bool
15}
16
17func newUserNewCommand(env *execenv.Env) *cobra.Command {
18	options := userNewOptions{}
19	cmd := &cobra.Command{
20		Use:     "new",
21		Short:   "Create a new identity",
22		PreRunE: execenv.LoadBackend(env),
23		RunE: execenv.CloseBackend(env, func(cmd *cobra.Command, args []string) error {
24			return runUserNew(env, options)
25		}),
26	}
27
28	flags := cmd.Flags()
29	flags.StringVarP(&options.name, "name", "n", "", "Name to identify the user")
30	flags.StringVarP(&options.email, "email", "e", "", "Email of the user")
31	flags.StringVarP(&options.avatarURL, "avatar", "a", "", "Avatar URL")
32	flags.BoolVar(&options.nonInteractive, "non-interactive", false, "Do not ask for user input")
33
34	return cmd
35}
36
37func runUserNew(env *execenv.Env, opts userNewOptions) error {
38
39	if !opts.nonInteractive && 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.nonInteractive && 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.nonInteractive && 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.Identities().NewRaw(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}