diff --git a/internal/bridge/user_events.go b/internal/bridge/user_events.go index 402a6f2b..c0ee71bd 100644 --- a/internal/bridge/user_events.go +++ b/internal/bridge/user_events.go @@ -21,10 +21,12 @@ import ( "context" "fmt" + "github.com/ProtonMail/gluon/reporter" "github.com/ProtonMail/proton-bridge/v3/internal/events" "github.com/ProtonMail/proton-bridge/v3/internal/safe" "github.com/ProtonMail/proton-bridge/v3/internal/user" "github.com/ProtonMail/proton-bridge/v3/internal/vault" + "github.com/sirupsen/logrus" ) func (bridge *Bridge) handleUserEvent(ctx context.Context, user *user.User, event events.Event) error { @@ -53,7 +55,7 @@ func (bridge *Bridge) handleUserEvent(ctx context.Context, user *user.User, even bridge.handleUserDeauth(ctx, user) case events.UserBadEvent: - bridge.handleUserBadEvent(ctx, user) + bridge.handleUserBadEvent(ctx, user, event.Error) } return nil @@ -134,8 +136,14 @@ func (bridge *Bridge) handleUserDeauth(ctx context.Context, user *user.User) { }, bridge.usersLock) } -func (bridge *Bridge) handleUserBadEvent(ctx context.Context, user *user.User) { +func (bridge *Bridge) handleUserBadEvent(ctx context.Context, user *user.User, err error) { safe.Lock(func() { + if rerr := bridge.reporter.ReportMessageWithContext("Failed to handle event", reporter.Context{ + "error": err, + }); rerr != nil { + logrus.WithError(rerr).Error("Failed to report failed event handling") + } + bridge.logoutUser(ctx, user, true, false) }, bridge.usersLock) } diff --git a/internal/user/errors.go b/internal/user/errors.go index 24b880e4..ef61b136 100644 --- a/internal/user/errors.go +++ b/internal/user/errors.go @@ -21,8 +21,6 @@ import "errors" var ( ErrNoSuchAddress = errors.New("no such address") - ErrNotImplemented = errors.New("not implemented") - ErrNotSupported = errors.New("not supported") ErrInvalidReturnPath = errors.New("invalid return path") ErrInvalidRecipient = errors.New("invalid recipient") ErrMissingAddrKey = errors.New("missing address key") diff --git a/internal/user/events.go b/internal/user/events.go index 80f21861..317fcfc0 100644 --- a/internal/user/events.go +++ b/internal/user/events.go @@ -333,14 +333,13 @@ func (user *User) handleLabelEvents(ctx context.Context, labelEvents []proton.La func (user *User) handleCreateLabelEvent(ctx context.Context, event proton.LabelEvent) ([]imap.Update, error) { //nolint:unparam return safe.LockRetErr(func() ([]imap.Update, error) { var updates []imap.Update + user.log.WithFields(logrus.Fields{ "labelID": event.ID, "name": logging.Sensitive(event.Label.Name), }).Info("Handling label created event") - if _, ok := user.apiLabels[event.Label.ID]; ok { - user.apiLabels[event.Label.ID] = event.Label - } + user.apiLabels[event.Label.ID] = event.Label for _, updateCh := range xslices.Unique(maps.Values(user.updateCh)) { update := newMailboxCreatedUpdate(imap.MailboxID(event.ID), getMailboxName(event.Label)) @@ -361,14 +360,13 @@ func (user *User) handleCreateLabelEvent(ctx context.Context, event proton.Label func (user *User) handleUpdateLabelEvent(ctx context.Context, event proton.LabelEvent) ([]imap.Update, error) { //nolint:unparam return safe.LockRetErr(func() ([]imap.Update, error) { var updates []imap.Update + user.log.WithFields(logrus.Fields{ "labelID": event.ID, "name": logging.Sensitive(event.Label.Name), }).Info("Handling label updated event") - if _, ok := user.apiLabels[event.Label.ID]; !ok { - user.apiLabels[event.Label.ID] = event.Label - } + user.apiLabels[event.Label.ID] = event.Label for _, updateCh := range xslices.Unique(maps.Values(user.updateCh)) { update := imap.NewMailboxUpdated(