2020-07-16 21:06:20 +03:00
|
|
|
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) {
|
2020-09-27 21:31:09 +03:00
|
|
|
val, err := repo.LocalConfig().ReadString(identityConfigKey)
|
|
|
|
if err == repository.ErrNoConfigEntry {
|
2020-07-16 21:06:20 +03:00
|
|
|
return entity.UnsetId, ErrNoIdentitySet
|
|
|
|
}
|
2020-09-27 21:31:09 +03:00
|
|
|
if err == repository.ErrMultipleConfigEntry {
|
2020-07-16 21:06:20 +03:00
|
|
|
return entity.UnsetId, ErrMultipleIdentitiesSet
|
|
|
|
}
|
2020-09-27 21:31:09 +03:00
|
|
|
if err != nil {
|
|
|
|
return entity.UnsetId, err
|
2020-07-16 21:06:20 +03:00
|
|
|
}
|
|
|
|
|
2020-09-27 21:31:09 +03:00
|
|
|
var id = entity.Id(val)
|
|
|
|
|
2020-07-16 21:06:20 +03:00
|
|
|
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) {
|
2020-09-27 21:31:09 +03:00
|
|
|
_, err := repo.LocalConfig().ReadString(identityConfigKey)
|
|
|
|
if err == repository.ErrNoConfigEntry {
|
|
|
|
return false, nil
|
|
|
|
}
|
2020-07-16 21:06:20 +03:00
|
|
|
if err != nil {
|
|
|
|
return false, err
|
|
|
|
}
|
2020-09-27 21:31:09 +03:00
|
|
|
return true, nil
|
2020-07-16 21:06:20 +03:00
|
|
|
}
|