1package identity
2
3import (
4 "fmt"
5 "os"
6
7 "github.com/pkg/errors"
8
9 "github.com/MichaelMure/git-bug/entity"
10 "github.com/MichaelMure/git-bug/repository"
11)
12
13// SetUserIdentity store the user identity's id in the git config
14func SetUserIdentity(repo repository.RepoConfig, identity *Identity) error {
15 return repo.LocalConfig().StoreString(identityConfigKey, identity.Id().String())
16}
17
18// GetUserIdentity read the current user identity, set with a git config entry
19func GetUserIdentity(repo repository.Repo) (*Identity, error) {
20 id, err := GetUserIdentityId(repo)
21 if err != nil {
22 return nil, err
23 }
24
25 i, err := ReadLocal(repo, id)
26 if err == ErrIdentityNotExist {
27 innerErr := repo.LocalConfig().RemoveAll(identityConfigKey)
28 if innerErr != nil {
29 _, _ = fmt.Fprintln(os.Stderr, errors.Wrap(innerErr, "can't clear user identity").Error())
30 }
31 return nil, err
32 }
33
34 return i, nil
35}
36
37func GetUserIdentityId(repo repository.Repo) (entity.Id, error) {
38 val, err := repo.LocalConfig().ReadString(identityConfigKey)
39 if errors.Is(err, repository.ErrNoConfigEntry) {
40 return entity.UnsetId, ErrNoIdentitySet
41 }
42 if err == repository.ErrMultipleConfigEntry {
43 return entity.UnsetId, ErrMultipleIdentitiesSet
44 }
45 if err != nil {
46 return entity.UnsetId, err
47 }
48
49 var id = entity.Id(val)
50
51 if err := id.Validate(); err != nil {
52 return entity.UnsetId, err
53 }
54
55 return id, nil
56}
57
58// IsUserIdentitySet say if the user has set his identity
59func IsUserIdentitySet(repo repository.Repo) (bool, error) {
60 _, err := repo.LocalConfig().ReadString(identityConfigKey)
61 if errors.Is(err, repository.ErrNoConfigEntry) {
62 return false, nil
63 }
64 if err != nil {
65 return false, err
66 }
67 return true, nil
68}