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