From e38d702132dca04ec95178f68c500a9591c3631b Mon Sep 17 00:00:00 2001 From: Michael Muré Date: Thu, 16 Jul 2020 20:06:20 +0200 Subject: some light code reorg --- identity/identity_user.go | 71 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 identity/identity_user.go (limited to 'identity/identity_user.go') 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 +} -- cgit