login.go

 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}