From e4c08be28e964e601057c4fc5890462e8de0e76d Mon Sep 17 00:00:00 2001 From: James Houlahan Date: Thu, 27 Oct 2022 01:26:22 +0200 Subject: [PATCH] Other: Don't remove/add gluon user when in combined mode This used to be necessary because the connectors didn't have access to the user's emails, but now they do, so we no longer need to do this. --- internal/bridge/user_events.go | 28 ++-------------------------- internal/user/events.go | 20 +++++++++++++------- 2 files changed, 15 insertions(+), 33 deletions(-) diff --git a/internal/bridge/user_events.go b/internal/bridge/user_events.go index fd5214f6..16253642 100644 --- a/internal/bridge/user_events.go +++ b/internal/bridge/user_events.go @@ -56,19 +56,7 @@ func (bridge *Bridge) handleUserEvent(ctx context.Context, user *user.User, even } func (bridge *Bridge) handleUserAddressCreated(ctx context.Context, user *user.User, event events.UserAddressCreated) error { - switch user.GetAddressMode() { - case vault.CombinedMode: - for addrID, gluonID := range user.GetGluonIDs() { - if err := bridge.imapServer.RemoveUser(ctx, gluonID, false); err != nil { - return fmt.Errorf("failed to remove user from IMAP server: %w", err) - } - - if err := bridge.imapServer.LoadUser(ctx, user.NewIMAPConnector(addrID), gluonID, user.GluonKey()); err != nil { - return fmt.Errorf("failed to add user to IMAP server: %w", err) - } - } - - case vault.SplitMode: + if user.GetAddressMode() == vault.SplitMode { gluonID, err := bridge.imapServer.AddUser(ctx, user.NewIMAPConnector(event.AddressID), user.GluonKey()) if err != nil { return fmt.Errorf("failed to add user to IMAP server: %w", err) @@ -96,19 +84,7 @@ func (bridge *Bridge) handleUserAddressUpdated(_ context.Context, user *user.Use } func (bridge *Bridge) handleUserAddressDeleted(ctx context.Context, user *user.User, event events.UserAddressDeleted) error { - switch user.GetAddressMode() { - case vault.CombinedMode: - for addrID, gluonID := range user.GetGluonIDs() { - if err := bridge.imapServer.RemoveUser(ctx, gluonID, false); err != nil { - return fmt.Errorf("failed to remove user from IMAP server: %w", err) - } - - if err := bridge.imapServer.LoadUser(ctx, user.NewIMAPConnector(addrID), gluonID, user.GluonKey()); err != nil { - return fmt.Errorf("failed to add user to IMAP server: %w", err) - } - } - - case vault.SplitMode: + if user.GetAddressMode() == vault.SplitMode { gluonID, ok := user.GetGluonID(event.AddressID) if !ok { return fmt.Errorf("gluon ID not found for address %s", event.AddressID) diff --git a/internal/user/events.go b/internal/user/events.go index 6d652f2a..59c90f0c 100644 --- a/internal/user/events.go +++ b/internal/user/events.go @@ -99,7 +99,7 @@ func (user *User) handleAddressEvents(ctx context.Context, addressEvents []litea } func (user *User) handleCreateAddressEvent(ctx context.Context, event liteapi.AddressEvent) error { - return safe.LockRet(func() error { + if err := safe.LockRet(func() error { if _, ok := user.apiAddrs[event.Address.ID]; ok { return fmt.Errorf("address %q already exists", event.ID) } @@ -119,18 +119,24 @@ func (user *User) handleCreateAddressEvent(ctx context.Context, event liteapi.Ad user.updateCh[event.Address.ID] = queue.NewQueuedChannel[imap.Update](0, 0) } + return nil + }, user.apiAddrsLock, user.updateChLock); err != nil { + return fmt.Errorf("failed to handle create address event: %w", err) + } + + user.eventCh.Enqueue(events.UserAddressCreated{ + UserID: user.ID(), + AddressID: event.Address.ID, + Email: event.Address.Email, + }) + + return safe.RLockRet(func() error { if user.vault.AddressMode() == vault.SplitMode { if err := syncLabels(ctx, user.client, user.updateCh[event.Address.ID]); err != nil { return fmt.Errorf("failed to sync labels to new address: %w", err) } } - user.eventCh.Enqueue(events.UserAddressCreated{ - UserID: user.ID(), - AddressID: event.Address.ID, - Email: event.Address.Email, - }) - return nil }, user.apiAddrsLock, user.updateChLock) }