mirror of
https://github.com/MichaelMure/git-bug.git
synced 2024-12-14 17:51:44 +03:00
72 lines
1.6 KiB
Go
72 lines
1.6 KiB
Go
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
|
|
}
|