user_create.go

  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}