aboutsummaryrefslogtreecommitdiffstats
path: root/bridge/core/auth
diff options
context:
space:
mode:
Diffstat (limited to 'bridge/core/auth')
-rw-r--r--bridge/core/auth/credential.go30
-rw-r--r--bridge/core/auth/token.go6
2 files changed, 33 insertions, 3 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
*/
diff --git a/bridge/core/auth/token.go b/bridge/core/auth/token.go
index 12a3bfc0..8333ef12 100644
--- a/bridge/core/auth/token.go
+++ b/bridge/core/auth/token.go
@@ -59,6 +59,10 @@ func (t *Token) UserId() entity.Id {
return t.userId
}
+func (t *Token) updateUserId(id entity.Id) {
+ t.userId = id
+}
+
func (t *Token) Target() string {
return t.target
}
@@ -88,7 +92,7 @@ func (t *Token) Validate() error {
return nil
}
-func (t *Token) ToConfig() map[string]string {
+func (t *Token) toConfig() map[string]string {
return map[string]string{
tokenValueKey: t.Value,
}