diff options
Diffstat (limited to 'bridge/core/auth/credential.go')
-rw-r--r-- | bridge/core/auth/credential.go | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/bridge/core/auth/credential.go b/bridge/core/auth/credential.go index a462a116..fd026c5d 100644 --- a/bridge/core/auth/credential.go +++ b/bridge/core/auth/credential.go @@ -32,9 +32,15 @@ func NewErrMultipleMatchCredential(matching []entity.Id) *entity.ErrMultipleMatc return entity.NewErrMultipleMatch("credential", matching) } +// Special Id to mark a credential as being associated to the default user, whoever it might be. +// The intended use is for the bridge configuration, to be able to create and store a credential +// with no identities created yet, and then select one with `git-bug user adopt` +const DefaultUserId = entity.Id("default-user") + type Credential interface { ID() entity.Id UserId() entity.Id + updateUserId(id entity.Id) Target() string Kind() CredentialKind CreateTime() time.Time @@ -42,7 +48,7 @@ type Credential interface { // Return all the specific properties of the credential that need to be saved into the configuration. // This does not include Target, User, Kind and CreateTime. - ToConfig() map[string]string + toConfig() map[string]string } // Load loads a credential from the repo config @@ -90,6 +96,7 @@ func LoadWithPrefix(repo repository.RepoConfig, prefix string) (Credential, erro return matching[0], nil } +// loadFromConfig is a helper to construct a Credential from the set of git configs func loadFromConfig(rawConfigs map[string]string, id entity.Id) (Credential, error) { keyPrefix := fmt.Sprintf("%s.%s.", configKeyPrefix, id) @@ -168,7 +175,7 @@ func PrefixExist(repo repository.RepoConfig, prefix string) bool { // Store stores a credential in the global git config func Store(repo repository.RepoConfig, cred Credential) error { - confs := cred.ToConfig() + confs := cred.toConfig() prefix := fmt.Sprintf("%s.%s.", configKeyPrefix, cred.ID()) @@ -213,6 +220,25 @@ func Remove(repo repository.RepoConfig, id entity.Id) error { return repo.GlobalConfig().RemoveAll(keyPrefix) } +// ReplaceDefaultUser update all the credential attributed to the temporary "default user" +// with a real user Id +func ReplaceDefaultUser(repo repository.RepoConfig, id entity.Id) error { + list, err := List(repo, WithUserId(DefaultUserId)) + if err != nil { + return err + } + + for _, cred := range list { + cred.updateUserId(id) + err = Store(repo, cred) + if err != nil { + return err + } + } + + return nil +} + /* * Sorting */ |