diff options
Diffstat (limited to 'bridge/core')
-rw-r--r-- | bridge/core/bridge.go | 15 | ||||
-rw-r--r-- | bridge/core/token.go | 76 |
2 files changed, 87 insertions, 4 deletions
diff --git a/bridge/core/bridge.go b/bridge/core/bridge.go index a3133b9c..3a36dfaa 100644 --- a/bridge/core/bridge.go +++ b/bridge/core/bridge.go @@ -13,6 +13,7 @@ import ( "github.com/pkg/errors" "github.com/MichaelMure/git-bug/cache" + "github.com/MichaelMure/git-bug/entity" "github.com/MichaelMure/git-bug/repository" ) @@ -20,8 +21,10 @@ var ErrImportNotSupported = errors.New("import is not supported") var ErrExportNotSupported = errors.New("export is not supported") const ( - ConfigKeyTarget = "target" - MetaKeyOrigin = "origin" + ConfigKeyTarget = "target" + ConfigKeyToken = "token" + ConfigKeyTokenId = "token-id" + MetaKeyOrigin = "origin" bridgeConfigKeyPrefix = "git-bug.bridge" ) @@ -35,6 +38,7 @@ type BridgeParams struct { Project string URL string Token string + TokenId string TokenStdin bool } @@ -276,6 +280,13 @@ func (b *Bridge) ensureInit() error { return nil } + token, err := LoadToken(b.repo, entity.Id(b.conf[ConfigKeyTokenId])) + if err != nil { + return err + } + + b.conf[ConfigKeyToken] = token.Value + importer := b.getImporter() if importer != nil { err := importer.Init(b.conf) diff --git a/bridge/core/token.go b/bridge/core/token.go index 449ebbb5..0eac1a24 100644 --- a/bridge/core/token.go +++ b/bridge/core/token.go @@ -122,8 +122,7 @@ func LoadTokenPrefix(repo repository.RepoCommon, prefix string) (*Token, error) return LoadToken(repo, matching[0]) } -// ListTokens return a map representing the stored tokens in the repo config and global config -// along with their type (global: true, local:false) +// ListTokens list all existing token ids func ListTokens(repo repository.RepoCommon) ([]entity.Id, error) { configs, err := repo.GlobalConfig().ReadAll(tokenConfigKeyPrefix + ".") if err != nil { @@ -157,6 +156,79 @@ func ListTokens(repo repository.RepoCommon) ([]entity.Id, error) { return result, nil } +// ListTokensWithTarget list all token ids associated with the target +func ListTokensWithTarget(repo repository.RepoCommon, target string) ([]entity.Id, error) { + var ids []entity.Id + tokensIds, err := ListTokens(repo) + if err != nil { + return nil, err + } + + for _, tokenId := range tokensIds { + token, err := LoadToken(repo, tokenId) + if err != nil { + return nil, err + } + + if token.Target == target { + ids = append(ids, tokenId) + } + } + return ids, nil +} + +// LoadTokens load all existing tokens +func LoadTokens(repo repository.RepoCommon) ([]*Token, error) { + tokensIds, err := ListTokens(repo) + if err != nil { + return nil, err + } + + var tokens []*Token + for _, id := range tokensIds { + token, err := LoadToken(repo, id) + if err != nil { + return nil, err + } + tokens = append(tokens, token) + } + return tokens, nil +} + +// TokenIdExist return wether token id exist or not +func TokenIdExist(repo repository.RepoCommon, id entity.Id) bool { + _, err := LoadToken(repo, id) + return err == nil +} + +// TokenExist return wether there is a token with a certain value or not +func TokenExist(repo repository.RepoCommon, value string) bool { + tokens, err := LoadTokens(repo) + if err != nil { + return false + } + for _, token := range tokens { + if token.Value == value { + return true + } + } + return false +} + +// TokenExistWithTarget same as TokenExist but restrict search for a given target +func TokenExistWithTarget(repo repository.RepoCommon, value string, target string) bool { + tokens, err := LoadTokens(repo) + if err != nil { + return false + } + for _, token := range tokens { + if token.Value == value && token.Target == target { + return true + } + } + return false +} + // StoreToken stores a token in the repo config func StoreToken(repo repository.RepoCommon, token *Token) error { storeValueKey := fmt.Sprintf("git-bug.token.%s.%s", token.ID().String(), tokenValueKey) |