aboutsummaryrefslogtreecommitdiffstats
path: root/identity/identity_user.go
diff options
context:
space:
mode:
Diffstat (limited to 'identity/identity_user.go')
-rw-r--r--identity/identity_user.go71
1 files changed, 71 insertions, 0 deletions
diff --git a/identity/identity_user.go b/identity/identity_user.go
new file mode 100644
index 00000000..60622c12
--- /dev/null
+++ b/identity/identity_user.go
@@ -0,0 +1,71 @@
+package identity
+
+import (
+ "fmt"
+ "os"
+
+ "github.com/pkg/errors"
+
+ "github.com/MichaelMure/git-bug/entity"
+ "github.com/MichaelMure/git-bug/repository"
+)
+
+// SetUserIdentity store the user identity's id in the git config
+func SetUserIdentity(repo repository.RepoConfig, identity *Identity) error {
+ return repo.LocalConfig().StoreString(identityConfigKey, identity.Id().String())
+}
+
+// GetUserIdentity read the current user identity, set with a git config entry
+func GetUserIdentity(repo repository.Repo) (*Identity, error) {
+ id, err := GetUserIdentityId(repo)
+ if err != nil {
+ return nil, err
+ }
+
+ i, err := ReadLocal(repo, id)
+ if err == ErrIdentityNotExist {
+ innerErr := repo.LocalConfig().RemoveAll(identityConfigKey)
+ if innerErr != nil {
+ _, _ = fmt.Fprintln(os.Stderr, errors.Wrap(innerErr, "can't clear user identity").Error())
+ }
+ return nil, err
+ }
+
+ return i, nil
+}
+
+func GetUserIdentityId(repo repository.Repo) (entity.Id, error) {
+ configs, err := repo.LocalConfig().ReadAll(identityConfigKey)
+ if err != nil {
+ return entity.UnsetId, err
+ }
+
+ if len(configs) == 0 {
+ return entity.UnsetId, ErrNoIdentitySet
+ }
+
+ if len(configs) > 1 {
+ return entity.UnsetId, ErrMultipleIdentitiesSet
+ }
+
+ var id entity.Id
+ for _, val := range configs {
+ id = entity.Id(val)
+ }
+
+ if err := id.Validate(); err != nil {
+ return entity.UnsetId, err
+ }
+
+ return id, nil
+}
+
+// IsUserIdentitySet say if the user has set his identity
+func IsUserIdentitySet(repo repository.Repo) (bool, error) {
+ configs, err := repo.LocalConfig().ReadAll(identityConfigKey)
+ if err != nil {
+ return false, err
+ }
+
+ return len(configs) == 1, nil
+}