diff options
author | Michael Muré <batolettre@gmail.com> | 2020-02-12 18:32:01 +0100 |
---|---|---|
committer | Michael Muré <batolettre@gmail.com> | 2020-02-12 23:37:57 +0100 |
commit | 34083de0df5187caed3f788c1dcedf7196180206 (patch) | |
tree | 62f550b068f7dea989cfd232385181b5f6eba105 /bridge/core/auth/login.go | |
parent | 9f3618d886d461ea806468a8c690a4a303d66d9b (diff) | |
download | git-bug-34083de0df5187caed3f788c1dcedf7196180206.tar.gz |
auth: refactor and introduce Login and LoginPassword, salt IDs
Diffstat (limited to 'bridge/core/auth/login.go')
-rw-r--r-- | bridge/core/auth/login.go | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/bridge/core/auth/login.go b/bridge/core/auth/login.go new file mode 100644 index 00000000..ea74835a --- /dev/null +++ b/bridge/core/auth/login.go @@ -0,0 +1,67 @@ +package auth + +import ( + "crypto/sha256" + "fmt" + + "github.com/MichaelMure/git-bug/entity" +) + +const ( + configKeyLoginLogin = "login" +) + +var _ Credential = &Login{} + +type Login struct { + *credentialBase + Login string +} + +func NewLogin(target, login string) *Login { + return &Login{ + credentialBase: newCredentialBase(target), + Login: login, + } +} + +func NewLoginFromConfig(conf map[string]string) (*Login, error) { + base, err := newCredentialBaseFromConfig(conf) + if err != nil { + return nil, err + } + + return &Login{ + credentialBase: base, + Login: conf[configKeyLoginLogin], + }, nil +} + +func (lp *Login) ID() entity.Id { + h := sha256.New() + _, _ = h.Write(lp.salt) + _, _ = h.Write([]byte(lp.target)) + _, _ = h.Write([]byte(lp.Login)) + return entity.Id(fmt.Sprintf("%x", h.Sum(nil))) +} + +func (lp *Login) Kind() CredentialKind { + return KindLogin +} + +func (lp *Login) Validate() error { + err := lp.credentialBase.validate() + if err != nil { + return err + } + if lp.Login == "" { + return fmt.Errorf("missing login") + } + return nil +} + +func (lp *Login) toConfig() map[string]string { + return map[string]string{ + configKeyLoginLogin: lp.Login, + } +} |