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	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			env.err = out{Writer: cmd.ErrOrStderr()}
 26			env.out = out{Writer: cmd.OutOrStdout()}
 27
 28			return runUserCreate(env, options)
 29		}),
 30	}
 31
 32	flags := cmd.Flags()
 33	flags.StringVarP(&options.name, "name", "n", "", "Name to identify the user")
 34	flags.StringVarP(&options.email, "email", "e", "", "Email of the user")
 35	flags.StringVarP(&options.avatarURL, "avatar", "a", "", "Avatar URL")
 36	flags.BoolVar(&options.nonInteractive, "non-interactive", false, "Do not ask for user input")
 37
 38	return cmd
 39}
 40
 41func runUserCreate(env *Env, opts createUserOptions) error {
 42
 43	if !opts.nonInteractive && opts.name == "" {
 44		preName, err := env.backend.GetUserName()
 45		if err != nil {
 46			return err
 47		}
 48		opts.name, err = input.PromptDefault("Name", "name", preName, input.Required)
 49		if err != nil {
 50			return err
 51		}
 52	}
 53
 54	if !opts.nonInteractive && opts.email == "" {
 55		preEmail, err := env.backend.GetUserEmail()
 56		if err != nil {
 57			return err
 58		}
 59
 60		opts.email, err = input.PromptDefault("Email", "email", preEmail, input.Required)
 61		if err != nil {
 62			return err
 63		}
 64	}
 65
 66	if !opts.nonInteractive && opts.avatarURL == "" {
 67		var err error
 68		opts.avatarURL, err = input.Prompt("Avatar URL", "avatar")
 69		if err != nil {
 70			return err
 71		}
 72	}
 73
 74	id, err := env.backend.NewIdentityRaw(opts.name, opts.email, "", opts.avatarURL, nil, nil)
 75	if err != nil {
 76		return err
 77	}
 78
 79	err = id.CommitAsNeeded()
 80	if err != nil {
 81		return err
 82	}
 83
 84	set, err := env.backend.IsUserIdentitySet()
 85	if err != nil {
 86		return err
 87	}
 88
 89	if !set {
 90		err = env.backend.SetUserIdentity(id)
 91		if err != nil {
 92			return err
 93		}
 94	}
 95
 96	env.err.Println()
 97	env.out.Println(id.Id())
 98
 99	return nil
100}