diff options
Diffstat (limited to 'commands/bridge_auth_addtoken.go')
-rw-r--r-- | commands/bridge_auth_addtoken.go | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/commands/bridge_auth_addtoken.go b/commands/bridge_auth_addtoken.go new file mode 100644 index 00000000..018015e4 --- /dev/null +++ b/commands/bridge_auth_addtoken.go @@ -0,0 +1,81 @@ +package commands + +import ( + "bufio" + "fmt" + "os" + "strings" + + "github.com/mattn/go-isatty" + "github.com/pkg/errors" + "github.com/spf13/cobra" + + "github.com/MichaelMure/git-bug/bridge" + "github.com/MichaelMure/git-bug/bridge/core" + "github.com/MichaelMure/git-bug/bridge/core/auth" + "github.com/MichaelMure/git-bug/identity" +) + +var ( + bridgeAuthAddTokenTarget string +) + +func runBridgeTokenAdd(cmd *cobra.Command, args []string) error { + var value string + + if bridgeAuthAddTokenTarget == "" { + return fmt.Errorf("flag --target is required") + } + + if !core.TargetExist(bridgeAuthAddTokenTarget) { + return fmt.Errorf("unknown target") + } + + if len(args) == 1 { + value = args[0] + } else { + // Read from Stdin + if isatty.IsTerminal(os.Stdin.Fd()) { + fmt.Println("Enter the token:") + } + reader := bufio.NewReader(os.Stdin) + raw, err := reader.ReadString('\n') + if err != nil { + return fmt.Errorf("reading from stdin: %v", err) + } + value = strings.TrimSuffix(raw, "\n") + } + + user, err := identity.GetUserIdentity(repo) + if err != nil { + return err + } + + token := auth.NewToken(user.Id(), value, bridgeAuthAddTokenTarget) + if err := token.Validate(); err != nil { + return errors.Wrap(err, "invalid token") + } + + err = auth.Store(repo, token) + if err != nil { + return err + } + + fmt.Printf("token %s added\n", token.ID()) + return nil +} + +var bridgeAuthAddTokenCmd = &cobra.Command{ + Use: "add-token [<token>]", + Short: "Store a new token", + PreRunE: loadRepoEnsureUser, + RunE: runBridgeTokenAdd, + Args: cobra.MaximumNArgs(1), +} + +func init() { + bridgeAuthCmd.AddCommand(bridgeAuthAddTokenCmd) + bridgeAuthAddTokenCmd.Flags().StringVarP(&bridgeAuthAddTokenTarget, "target", "t", "", + fmt.Sprintf("The target of the bridge. Valid values are [%s]", strings.Join(bridge.Targets(), ","))) + bridgeAuthAddTokenCmd.Flags().SortFlags = false +} |