fix(GODT-2913): Reduce the number of configuration failure detected.

This commit is contained in:
Romain Le Jeune
2023-09-08 11:53:24 +00:00
parent 79524185a8
commit 6269b1ab88
7 changed files with 11 additions and 13 deletions

View File

@ -119,8 +119,9 @@ func (s *Connector) Init(_ context.Context, cache connector.IMAPState) error {
}
func (s *Connector) Authorize(ctx context.Context, username string, password []byte) bool {
addrID, err := s.identityState.CheckAuth(username, password, s.telemetry)
addrID, err := s.identityState.CheckAuth(username, password)
if err != nil {
s.telemetry.ReportConfigStatusFailure("IMAP " + err.Error())
return false
}

View File

@ -48,6 +48,7 @@ type EventProvider interface {
type Telemetry interface {
useridentity.Telemetry
SendConfigStatusSuccess(ctx context.Context)
ReportConfigStatusFailure(errDetails string)
}
type GluonIDProvider interface {

View File

@ -32,7 +32,7 @@ type sharedIdentity interface {
GetPrimaryAddress() (proton.Address, error)
GetAddresses() []proton.Address
WithAddrKR(addrID string, fn func(userKR, addrKR *crypto.KeyRing) error) error
CheckAuth(email string, password []byte, telemetry Telemetry) (string, error)
CheckAuth(email string, password []byte) (string, error)
}
type rwIdentity struct {
@ -102,11 +102,11 @@ func (r *rwIdentity) WithAddrKRs(fn func(*crypto.KeyRing, map[string]*crypto.Key
return r.identity.WithAddrKRs(r.keyPassProvider.KeyPass(), fn)
}
func (r *rwIdentity) CheckAuth(email string, password []byte, telemetry Telemetry) (string, error) {
func (r *rwIdentity) CheckAuth(email string, password []byte) (string, error) {
r.lock.RLock()
defer r.lock.RUnlock()
return r.identity.CheckAuth(email, password, r.bridgePassProvider, telemetry)
return r.identity.CheckAuth(email, password, r.bridgePassProvider)
}
func (r *rwIdentity) Write(f func(identity *useridentity.State) error) error {

View File

@ -221,7 +221,7 @@ func (s *Service) run(ctx context.Context) {
case *checkAuthReq:
s.log.WithField("email", bridgelogging.Sensitive(r.email)).Debug("Checking authentication")
addrID, err := s.identityState.CheckAuth(r.email, r.password, s.bridgePassProvider, s.telemetry)
addrID, err := s.identityState.CheckAuth(r.email, r.password, s.bridgePassProvider)
request.Reply(ctx, addrID, err)
case *resyncReq:

View File

@ -249,7 +249,7 @@ func (s *Service) run(ctx context.Context) {
r.Reply(ctx, maps.Clone(s.identity.Addresses), nil)
case *checkAuthReq:
id, err := s.identity.CheckAuth(req.email, req.password, s.bridgePassProvider, s.telemetry)
id, err := s.identity.CheckAuth(req.email, req.password, s.bridgePassProvider)
r.Reply(ctx, id, err)
default:

View File

@ -226,7 +226,7 @@ func (s *State) Clone() *State {
// CheckAuth returns whether the given email and password can be used to authenticate over IMAP or SMTP with this user.
// It returns the address ID of the authenticated address.
func (s *State) CheckAuth(email string, password []byte, bridgePassProvider BridgePassProvider, telemetry Telemetry) (string, error) {
func (s *State) CheckAuth(email string, password []byte, bridgePassProvider BridgePassProvider) (string, error) {
if email == "crash@bandicoot" {
panic("your wish is my command.. I crash")
}
@ -237,11 +237,7 @@ func (s *State) CheckAuth(email string, password []byte, bridgePassProvider Brid
}
if subtle.ConstantTimeCompare(bridgePassProvider.BridgePass(), dec) != 1 {
err := fmt.Errorf("invalid password")
if telemetry != nil {
telemetry.ReportConfigStatusFailure(err.Error())
}
return "", err
return "", fmt.Errorf("invalid password")
}
for _, addr := range s.AddressesSorted {

View File

@ -674,7 +674,7 @@ func (user *User) ReportSMTPAuthFailed(username string) {
emails := user.Emails()
for _, mail := range emails {
if mail == username {
user.ReportConfigStatusFailure("invalid username or password")
user.ReportConfigStatusFailure("SMTP invalid username or password")
}
}
}