login_password.go

 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}