1package auth
2
3import (
4 "crypto/sha256"
5 "fmt"
6
7 "github.com/git-bug/git-bug/entity"
8)
9
10const (
11 keyringKeyLoginLogin = "login"
12)
13
14var _ Credential = &Login{}
15
16type Login struct {
17 *credentialBase
18 Login string
19}
20
21func NewLogin(target, login string) *Login {
22 return &Login{
23 credentialBase: newCredentialBase(target),
24 Login: login,
25 }
26}
27
28func NewLoginFromConfig(conf map[string]string) (*Login, error) {
29 base, err := newCredentialBaseFromData(conf)
30 if err != nil {
31 return nil, err
32 }
33
34 return &Login{
35 credentialBase: base,
36 Login: conf[keyringKeyLoginLogin],
37 }, nil
38}
39
40func (lp *Login) ID() entity.Id {
41 h := sha256.New()
42 _, _ = h.Write(lp.salt)
43 _, _ = h.Write([]byte(lp.target))
44 _, _ = h.Write([]byte(lp.Login))
45 return entity.Id(fmt.Sprintf("%x", h.Sum(nil)))
46}
47
48func (lp *Login) Kind() CredentialKind {
49 return KindLogin
50}
51
52func (lp *Login) Validate() error {
53 err := lp.credentialBase.validate()
54 if err != nil {
55 return err
56 }
57 if lp.Login == "" {
58 return fmt.Errorf("missing login")
59 }
60 return nil
61}
62
63func (lp *Login) toConfig() map[string]string {
64 return map[string]string{
65 keyringKeyLoginLogin: lp.Login,
66 }
67}