diff options
Diffstat (limited to 'commands')
-rw-r--r-- | commands/bridge_auth.go | 53 | ||||
-rw-r--r-- | commands/bridge_auth_add.go | 74 | ||||
-rw-r--r-- | commands/bridge_auth_rm.go | 36 | ||||
-rw-r--r-- | commands/bridge_auth_show.go | 37 |
4 files changed, 200 insertions, 0 deletions
diff --git a/commands/bridge_auth.go b/commands/bridge_auth.go new file mode 100644 index 00000000..e7fce1bd --- /dev/null +++ b/commands/bridge_auth.go @@ -0,0 +1,53 @@ +package commands + +import ( + "fmt" + + "github.com/spf13/cobra" + + text "github.com/MichaelMure/go-term-text" + + "github.com/MichaelMure/git-bug/bridge/core" + "github.com/MichaelMure/git-bug/util/colors" +) + +func runBridgeAuth(cmd *cobra.Command, args []string) error { + tokens, err := core.ListTokens(repo) + if err != nil { + return err + } + + for _, token := range tokens { + token, err := core.LoadToken(repo, token) + if err != nil { + return err + } + printToken(token) + } + + return nil +} + +func printToken(token *core.Token) { + targetFmt := text.LeftPadMaxLine(token.Target, 10, 0) + + fmt.Printf("%s %s %s %s\n", + colors.Cyan(token.ID().Human()), + colors.Yellow(targetFmt), + colors.Magenta("token"), + token.Value, + ) +} + +var bridgeAuthCmd = &cobra.Command{ + Use: "auth", + Short: "List all known bridge authentication credentials.", + PreRunE: loadRepo, + RunE: runBridgeAuth, + Args: cobra.NoArgs, +} + +func init() { + bridgeCmd.AddCommand(bridgeAuthCmd) + bridgeAuthCmd.Flags().SortFlags = false +} diff --git a/commands/bridge_auth_add.go b/commands/bridge_auth_add.go new file mode 100644 index 00000000..ae2c4dbc --- /dev/null +++ b/commands/bridge_auth_add.go @@ -0,0 +1,74 @@ +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" +) + +var ( + bridgeAuthAddTokenTarget string +) + +func runBridgeTokenAdd(cmd *cobra.Command, args []string) error { + var value string + + if bridgeAuthAddTokenTarget == "" { + return fmt.Errorf("auth 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") + } + + token := core.NewToken(value, bridgeAuthAddTokenTarget) + if err := token.Validate(); err != nil { + return errors.Wrap(err, "invalid token") + } + + err := core.StoreToken(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: loadRepo, + 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 +} diff --git a/commands/bridge_auth_rm.go b/commands/bridge_auth_rm.go new file mode 100644 index 00000000..b0b4d437 --- /dev/null +++ b/commands/bridge_auth_rm.go @@ -0,0 +1,36 @@ +package commands + +import ( + "fmt" + + "github.com/spf13/cobra" + + "github.com/MichaelMure/git-bug/bridge/core" +) + +func runBridgeAuthRm(cmd *cobra.Command, args []string) error { + token, err := core.LoadTokenPrefix(repo, args[0]) + if err != nil { + return err + } + + err = core.RemoveToken(repo, token.ID()) + if err != nil { + return err + } + + fmt.Printf("token %s removed\n", token.ID()) + return nil +} + +var bridgeAuthRmCmd = &cobra.Command{ + Use: "rm <id>", + Short: "Remove a credential.", + PreRunE: loadRepo, + RunE: runBridgeAuthRm, + Args: cobra.ExactArgs(1), +} + +func init() { + bridgeAuthCmd.AddCommand(bridgeAuthRmCmd) +} diff --git a/commands/bridge_auth_show.go b/commands/bridge_auth_show.go new file mode 100644 index 00000000..94141b93 --- /dev/null +++ b/commands/bridge_auth_show.go @@ -0,0 +1,37 @@ +package commands + +import ( + "fmt" + "time" + + "github.com/spf13/cobra" + + "github.com/MichaelMure/git-bug/bridge/core" +) + +func runBridgeAuthShow(cmd *cobra.Command, args []string) error { + token, err := core.LoadTokenPrefix(repo, args[0]) + if err != nil { + return err + } + + fmt.Printf("Id: %s\n", token.ID()) + fmt.Printf("Target: %s\n", token.Target) + fmt.Printf("Type: token\n") + fmt.Printf("Value: %s\n", token.Value) + fmt.Printf("Creation: %s\n", token.CreateTime.Format(time.RFC822)) + + return nil +} + +var bridgeAuthShowCmd = &cobra.Command{ + Use: "show", + Short: "Display an authentication credential.", + PreRunE: loadRepo, + RunE: runBridgeAuthShow, + Args: cobra.ExactArgs(1), +} + +func init() { + bridgeAuthCmd.AddCommand(bridgeAuthShowCmd) +} |