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	nonInteractive bool
14}
15
16func newUserCreateCommand() *cobra.Command {
17	env := newEnv()
18
19	options := createUserOptions{}
20	cmd := &cobra.Command{
21		Use:     "create",
22		Short:   "Create a new identity.",
23		PreRunE: loadBackend(env),
24		RunE: closeBackend(env, 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	flags.BoolVar(&options.nonInteractive, "non-interactive", false, "Do not ask for user input")
34
35	return cmd
36}
37
38func runUserCreate(env *Env, opts createUserOptions) error {
39
40	if !opts.nonInteractive && opts.name == "" {
41		preName, err := env.backend.GetUserName()
42		if err != nil {
43			return err
44		}
45		opts.name, err = input.PromptDefault("Name", "name", preName, input.Required)
46		if err != nil {
47			return err
48		}
49	}
50
51	if !opts.nonInteractive && opts.email == "" {
52		preEmail, err := env.backend.GetUserEmail()
53		if err != nil {
54			return err
55		}
56
57		opts.email, err = input.PromptDefault("Email", "email", preEmail, input.Required)
58		if err != nil {
59			return err
60		}
61	}
62
63	if !opts.nonInteractive && opts.avatarURL == "" {
64		var err error
65		opts.avatarURL, err = input.Prompt("Avatar URL", "avatar")
66		if err != nil {
67			return err
68		}
69	}
70
71	id, err := env.backend.NewIdentityRaw(opts.name, opts.email, "", opts.avatarURL, nil, nil)
72	if err != nil {
73		return err
74	}
75
76	err = id.CommitAsNeeded()
77	if err != nil {
78		return err
79	}
80
81	set, err := env.backend.IsUserIdentitySet()
82	if err != nil {
83		return err
84	}
85
86	if !set {
87		err = env.backend.SetUserIdentity(id)
88		if err != nil {
89			return err
90		}
91	}
92
93	env.err.Println()
94	env.out.Println(id.Id())
95
96	return nil
97}