bridge_token_add.go

 1package commands
 2
 3import (
 4	"bufio"
 5	"fmt"
 6	"os"
 7	"strings"
 8
 9	"github.com/mattn/go-isatty"
10	"github.com/pkg/errors"
11	"github.com/spf13/cobra"
12
13	"github.com/MichaelMure/git-bug/bridge"
14	"github.com/MichaelMure/git-bug/bridge/core"
15)
16
17var (
18	bridgeTokenTarget string
19)
20
21func runBridgeTokenAdd(cmd *cobra.Command, args []string) error {
22	var value string
23
24	if bridgeTokenTarget == "" {
25		return fmt.Errorf("token target is required")
26	}
27
28	if !core.TargetExist(bridgeTokenTarget) {
29		return fmt.Errorf("unknown target")
30	}
31
32	if len(args) == 1 {
33		value = args[0]
34	} else {
35		// Read from Stdin
36		if isatty.IsTerminal(os.Stdin.Fd()) {
37			fmt.Println("Enter the token:")
38		}
39		reader := bufio.NewReader(os.Stdin)
40		raw, err := reader.ReadString('\n')
41		if err != nil {
42			return fmt.Errorf("reading from stdin: %v", err)
43		}
44		value = strings.TrimSuffix(raw, "\n")
45	}
46
47	token := core.NewToken(value, bridgeTokenTarget)
48	if err := token.Validate(); err != nil {
49		return errors.Wrap(err, "invalid token")
50	}
51
52	err := core.StoreToken(repo, token)
53	if err != nil {
54		return err
55	}
56
57	fmt.Printf("token %s added\n", token.ID())
58	return nil
59}
60
61var bridgeTokenAddCmd = &cobra.Command{
62	Use:     "add",
63	Short:   "Store a new token",
64	PreRunE: loadRepo,
65	RunE:    runBridgeTokenAdd,
66	Args:    cobra.MaximumNArgs(1),
67}
68
69func init() {
70	bridgeTokenCmd.AddCommand(bridgeTokenAddCmd)
71	bridgeTokenAddCmd.Flags().StringVarP(&bridgeTokenTarget, "target", "t", "",
72		fmt.Sprintf("The target of the bridge. Valid values are [%s]", strings.Join(bridge.Targets(), ",")))
73	bridgeTokenAddCmd.Flags().SortFlags = false
74}