package auth
import (
"crypto/sha256"
"fmt"
"github.com/MichaelMure/git-bug/entity"
)
const (
keyringKeyLoginPasswordLogin = "login"
keyringKeyLoginPasswordPassword = "password"
)
var _ Credential = &LoginPassword{}
type LoginPassword struct {
*credentialBase
Login string
Password string
}
func NewLoginPassword(target, login, password string) *LoginPassword {
return &LoginPassword{
credentialBase: newCredentialBase(target),
Login: login,
Password: password,
}
}
func NewLoginPasswordFromConfig(conf map[string]string) (*LoginPassword, error) {
base, err := newCredentialBaseFromData(conf)
if err != nil {
return nil, err
}
return &LoginPassword{
credentialBase: base,
Login: conf[keyringKeyLoginPasswordLogin],
Password: conf[keyringKeyLoginPasswordPassword],
}, nil
}
func (lp *LoginPassword) ID() entity.Id {
h := sha256.New()
_, _ = h.Write(lp.salt)
_, _ = h.Write([]byte(lp.target))
_, _ = h.Write([]byte(lp.Login))
_, _ = h.Write([]byte(lp.Password))
return entity.Id(fmt.Sprintf("%x", h.Sum(nil)))
}
func (lp *LoginPassword) Kind() CredentialKind {
return KindLoginPassword
}
func (lp *LoginPassword) Validate() error {
err := lp.credentialBase.validate()
if err != nil {
return err
}
if lp.Login == "" {
return fmt.Errorf("missing login")
}
if lp.Password == "" {
return fmt.Errorf("missing password")
}
return nil
}
func (lp *LoginPassword) toConfig() map[string]string {
return map[string]string{
keyringKeyLoginPasswordLogin: lp.Login,
keyringKeyLoginPasswordPassword: lp.Password,
}
}