diff options
-rw-r--r-- | bridge/core/token.go | 65 | ||||
-rw-r--r-- | commands/bridge_token.go | 45 | ||||
-rw-r--r-- | commands/bridge_token_add.go | 44 | ||||
-rw-r--r-- | commands/bridge_token_rm.go | 29 |
4 files changed, 133 insertions, 50 deletions
diff --git a/bridge/core/token.go b/bridge/core/token.go index 9e393642..5e629c51 100644 --- a/bridge/core/token.go +++ b/bridge/core/token.go @@ -3,7 +3,6 @@ package core import ( "fmt" "regexp" - "strconv" "strings" "github.com/MichaelMure/git-bug/repository" @@ -13,13 +12,12 @@ const ( tokenConfigKeyPrefix = "git-bug.token" tokenKeyValue = "value" tokenKeyTarget = "target" - tokenKeyGlobal = "global" tokenKeyScopes = "scopes" ) // Token represent token related informations type Token struct { - Name string + Id string Value string Target string Global bool @@ -27,9 +25,9 @@ type Token struct { } // NewToken instantiate a new token -func NewToken(name, value, target string, global bool, scopes []string) *Token { +func NewToken(id, value, target string, global bool, scopes []string) *Token { return &Token{ - Name: name, + Id: id, Value: value, Target: target, Global: global, @@ -39,8 +37,8 @@ func NewToken(name, value, target string, global bool, scopes []string) *Token { // Validate ensure token important fields are valid func (t *Token) Validate() error { - if t.Name == "" { - return fmt.Errorf("missing token name") + if t.Id == "" { + return fmt.Errorf("missing token id") } if t.Value == "" { return fmt.Errorf("missing token value") @@ -51,8 +49,8 @@ func (t *Token) Validate() error { return nil } -func loadToken(repo repository.RepoConfig, name string, global bool) (*Token, error) { - keyPrefix := fmt.Sprintf("git-bug.token.%s", name) +func loadToken(repo repository.RepoConfig, id string, global bool) (*Token, error) { + keyPrefix := fmt.Sprintf("git-bug.token.%s.", id) var pairs map[string]string var err error @@ -62,7 +60,6 @@ func loadToken(repo repository.RepoConfig, name string, global bool) (*Token, er if err != nil { return nil, err } - } else { pairs, err = repo.ReadConfigs(keyPrefix) if err != nil { @@ -78,7 +75,7 @@ func loadToken(repo repository.RepoConfig, name string, global bool) (*Token, er } var ok bool - token := &Token{Name: name} + token := &Token{Id: id, Global: global} token.Value, ok = result[tokenKeyValue] if !ok { return nil, fmt.Errorf("empty token value") @@ -89,12 +86,6 @@ func loadToken(repo repository.RepoConfig, name string, global bool) (*Token, er return nil, fmt.Errorf("empty token key") } - if g, ok := result[tokenKeyGlobal]; !ok { - return nil, fmt.Errorf("empty token global") - } else if g == "true" { - token.Global = true - } - scopesString, ok := result[tokenKeyScopes] if !ok { return nil, fmt.Errorf("missing scopes config") @@ -105,25 +96,25 @@ func loadToken(repo repository.RepoConfig, name string, global bool) (*Token, er } // GetToken loads a token from repo config -func GetToken(repo repository.RepoConfig, name string) (*Token, error) { - return loadToken(repo, name, false) +func GetToken(repo repository.RepoConfig, id string) (*Token, error) { + return loadToken(repo, id, false) } // GetGlobalToken loads a token from the global config -func GetGlobalToken(repo repository.RepoConfig, name string) (*Token, error) { - return loadToken(repo, name, true) +func GetGlobalToken(repo repository.RepoConfig, id string) (*Token, error) { + return loadToken(repo, id, true) } func listTokens(repo repository.RepoConfig, global bool) ([]string, error) { var configs map[string]string var err error if global { - configs, err = repo.ReadConfigs(tokenConfigKeyPrefix + ".") + configs, err = repo.ReadGlobalConfigs(tokenConfigKeyPrefix + ".") if err != nil { return nil, err } } else { - configs, err = repo.ReadGlobalConfigs(tokenConfigKeyPrefix + ".") + configs, err = repo.ReadConfigs(tokenConfigKeyPrefix + ".") if err != nil { return nil, err } @@ -175,25 +166,19 @@ func storeToken(repo repository.RepoConfig, token *Token) error { } var err error - storeValueKey := fmt.Sprintf("git-bug.token.%s.%s", token.Name, tokenKeyValue) + storeValueKey := fmt.Sprintf("git-bug.token.%s.%s", token.Id, tokenKeyValue) err = store(storeValueKey, token.Value) if err != nil { return err } - storeTargetKey := fmt.Sprintf("git-bug.token.%s.%s", token.Name, tokenKeyTarget) + storeTargetKey := fmt.Sprintf("git-bug.token.%s.%s", token.Id, tokenKeyTarget) err = store(storeTargetKey, token.Target) if err != nil { return err } - storeGlobalKey := fmt.Sprintf("git-bug.token.%s.%s", token.Name, tokenKeyGlobal) - err = store(storeGlobalKey, strconv.FormatBool(token.Global)) - if err != nil { - return err - } - - storeScopesKey := fmt.Sprintf("git-bug.token.%s.%s", token.Name, tokenKeyScopes) + storeScopesKey := fmt.Sprintf("git-bug.token.%s.%s", token.Id, tokenKeyScopes) err = store(storeScopesKey, strings.Join(token.Scopes, ",")) if err != nil { return err @@ -203,23 +188,23 @@ func storeToken(repo repository.RepoConfig, token *Token) error { } // StoreToken stores a token in the repo config -func StoreToken(repo repository.RepoConfig, name, value, target string, scopes []string) error { - return storeToken(repo, NewToken(name, value, target, false, scopes)) +func StoreToken(repo repository.RepoConfig, token *Token) error { + return storeToken(repo, token) } // StoreGlobalToken stores a token in global config -func StoreGlobalToken(repo repository.RepoConfig, name, value, target string, scopes []string) error { - return storeToken(repo, NewToken(name, value, target, true, scopes)) +func StoreGlobalToken(repo repository.RepoConfig, token *Token) error { + return storeToken(repo, token) } // RemoveToken removes a token from the repo config -func RemoveToken(repo repository.RepoConfig, name string) error { - keyPrefix := fmt.Sprintf("git-bug.token.%s", name) +func RemoveToken(repo repository.RepoConfig, id string) error { + keyPrefix := fmt.Sprintf("git-bug.token.%s", id) return repo.RmConfigs(keyPrefix) } // RemoveGlobalToken removes a token from the repo config -func RemoveGlobalToken(repo repository.RepoConfig, name string) error { - keyPrefix := fmt.Sprintf("git-bug.token.%s", name) +func RemoveGlobalToken(repo repository.RepoConfig, id string) error { + keyPrefix := fmt.Sprintf("git-bug.token.%s", id) return repo.RmGlobalConfigs(keyPrefix) } diff --git a/commands/bridge_token.go b/commands/bridge_token.go index 6cb6c4b7..52dea9a9 100644 --- a/commands/bridge_token.go +++ b/commands/bridge_token.go @@ -2,16 +2,18 @@ package commands import ( "fmt" + "strings" "github.com/spf13/cobra" "github.com/MichaelMure/git-bug/bridge/core" "github.com/MichaelMure/git-bug/cache" + "github.com/MichaelMure/git-bug/util/colors" "github.com/MichaelMure/git-bug/util/interrupt" + "github.com/MichaelMure/git-bug/util/text" ) var ( - bridgeTokenAll bool bridgeTokenLocalOnly bool bridgeTokenGlobalOnly bool ) @@ -24,25 +26,49 @@ func runTokenBridge(cmd *cobra.Command, args []string) error { defer backend.Close() interrupt.RegisterCleaner(backend.Close) - var tokens []string - if bridgeTokenLocalOnly || bridgeTokenAll { + var tokens []*core.Token + if !bridgeTokenGlobalOnly { localTokens, err := core.ListTokens(backend) if err != nil { return err } - tokens = localTokens + + for _, id := range localTokens { + token, err := core.GetToken(repo, id) + if err != nil { + return err + } + tokens = append(tokens, token) + } } - if bridgeTokenGlobalOnly || bridgeTokenAll { + if !bridgeTokenLocalOnly { globalTokens, err := core.ListGlobalTokens(backend) if err != nil { return err } - tokens = append(tokens, globalTokens...) + + for _, id := range globalTokens { + token, err := core.GetGlobalToken(repo, id) + if err != nil { + return err + } + tokens = append(tokens, token) + } } - for _, c := range tokens { - fmt.Println(c) + for _, token := range tokens { + valueFmt := text.LeftPadMaxLine(token.Value, 20, 0) + targetFmt := text.LeftPadMaxLine(token.Target, 10, 0) + scopesFmt := text.LeftPadMaxLine(strings.Join(token.Scopes, ","), 20, 0) + + fmt.Printf("%s %s %s %s %s\n", + colors.Cyan(token.Id), + colors.Magenta(targetFmt), + colors.Yellow(token.Global), + valueFmt, + scopesFmt, + ) } return nil } @@ -57,8 +83,7 @@ var bridgeTokenCmd = &cobra.Command{ func init() { bridgeCmd.AddCommand(bridgeTokenCmd) - bridgeTokenCmd.Flags().BoolVarP(&bridgeTokenAll, "all", "a", false, "") - bridgeTokenCmd.Flags().BoolVarP(&bridgeTokenLocalOnly, "local", "l", true, "") + bridgeTokenCmd.Flags().BoolVarP(&bridgeTokenLocalOnly, "local", "l", false, "") bridgeTokenCmd.Flags().BoolVarP(&bridgeTokenGlobalOnly, "global", "g", false, "") bridgeTokenCmd.Flags().SortFlags = false } diff --git a/commands/bridge_token_add.go b/commands/bridge_token_add.go new file mode 100644 index 00000000..8b3fc5ce --- /dev/null +++ b/commands/bridge_token_add.go @@ -0,0 +1,44 @@ +package commands + +import ( + "github.com/spf13/cobra" + + "github.com/MichaelMure/git-bug/bridge/core" +) + +var ( + bridgeToken core.Token +) + +func runBridgeTokenAdd(cmd *cobra.Command, args []string) error { + if bridgeToken.Global { + return core.StoreToken( + repo, + &bridgeToken, + ) + } + + return core.StoreGlobalToken( + repo, + &bridgeToken, + ) +} + +var bridgeTokenAddCmd = &cobra.Command{ + Use: "add", + Short: "Configure and use bridge tokens.", + PreRunE: loadRepo, + RunE: runBridgeTokenAdd, + Args: cobra.NoArgs, +} + +func init() { + bridgeTokenCmd.AddCommand(bridgeTokenAddCmd) + bridgeTokenAddCmd.Flags().StringVarP(&bridgeToken.Id, "id", "i", "", "") + bridgeTokenAddCmd.Flags().BoolVarP(&bridgeToken.Global, "global", "g", false, "") + bridgeTokenAddCmd.Flags().StringVarP(&bridgeToken.Value, "value", "v", "", "") + bridgeTokenAddCmd.Flags().StringVarP(&bridgeToken.Target, "target", "t", "", "") + bridgeTokenAddCmd.Flags().StringArrayVarP(&bridgeToken.Scopes, "scopes", "s", []string{}, "") + bridgeTokenAddCmd.Flags().SortFlags = false + +} diff --git a/commands/bridge_token_rm.go b/commands/bridge_token_rm.go new file mode 100644 index 00000000..7fd79126 --- /dev/null +++ b/commands/bridge_token_rm.go @@ -0,0 +1,29 @@ +package commands + +import ( + "github.com/spf13/cobra" + + "github.com/MichaelMure/git-bug/bridge/core" +) + +func runBridgeTokenRm(cmd *cobra.Command, args []string) error { + err := core.RemoveToken(repo, args[0]) + if err == nil { + return nil + } + + err = core.RemoveGlobalToken(repo, args[0]) + return err +} + +var bridgeTokenRmCmd = &cobra.Command{ + Use: "rm", + Short: "Configure and use bridge tokens.", + PreRunE: loadRepo, + RunE: runBridgeTokenRm, + Args: cobra.ExactArgs(1), +} + +func init() { + bridgeTokenCmd.AddCommand(bridgeTokenRmCmd) +} |