forked from Silverfish/proton-bridge
fix(GODT-2913): Reduce the number of configuration failure detected.
This commit is contained in:
@ -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
|
||||
}
|
||||
|
||||
|
||||
@ -48,6 +48,7 @@ type EventProvider interface {
|
||||
type Telemetry interface {
|
||||
useridentity.Telemetry
|
||||
SendConfigStatusSuccess(ctx context.Context)
|
||||
ReportConfigStatusFailure(errDetails string)
|
||||
}
|
||||
|
||||
type GluonIDProvider interface {
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user