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 bridgeAuthAddTokenTarget string
19)
20
21func runBridgeTokenAdd(cmd *cobra.Command, args []string) error {
22 var value string
23
24 if bridgeAuthAddTokenTarget == "" {
25 return fmt.Errorf("auth target is required")
26 }
27
28 if !core.TargetExist(bridgeAuthAddTokenTarget) {
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, bridgeAuthAddTokenTarget)
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 bridgeAuthAddTokenCmd = &cobra.Command{
62 Use: "add-token [<token>]",
63 Short: "Store a new token",
64 PreRunE: loadRepo,
65 RunE: runBridgeTokenAdd,
66 Args: cobra.MaximumNArgs(1),
67}
68
69func init() {
70 bridgeAuthCmd.AddCommand(bridgeAuthAddTokenCmd)
71 bridgeAuthAddTokenCmd.Flags().StringVarP(&bridgeAuthAddTokenTarget, "target", "t", "",
72 fmt.Sprintf("The target of the bridge. Valid values are [%s]", strings.Join(bridge.Targets(), ",")))
73 bridgeAuthAddTokenCmd.Flags().SortFlags = false
74}