forked from Silverfish/proton-bridge
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.
This commit is contained in:
@ -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 {
|
func (bridge *Bridge) handleUserAddressCreated(ctx context.Context, user *user.User, event events.UserAddressCreated) error {
|
||||||
switch user.GetAddressMode() {
|
if user.GetAddressMode() == vault.SplitMode {
|
||||||
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:
|
|
||||||
gluonID, err := bridge.imapServer.AddUser(ctx, user.NewIMAPConnector(event.AddressID), user.GluonKey())
|
gluonID, err := bridge.imapServer.AddUser(ctx, user.NewIMAPConnector(event.AddressID), user.GluonKey())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to add user to IMAP server: %w", err)
|
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 {
|
func (bridge *Bridge) handleUserAddressDeleted(ctx context.Context, user *user.User, event events.UserAddressDeleted) error {
|
||||||
switch user.GetAddressMode() {
|
if user.GetAddressMode() == vault.SplitMode {
|
||||||
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:
|
|
||||||
gluonID, ok := user.GetGluonID(event.AddressID)
|
gluonID, ok := user.GetGluonID(event.AddressID)
|
||||||
if !ok {
|
if !ok {
|
||||||
return fmt.Errorf("gluon ID not found for address %s", event.AddressID)
|
return fmt.Errorf("gluon ID not found for address %s", event.AddressID)
|
||||||
|
|||||||
@ -99,7 +99,7 @@ func (user *User) handleAddressEvents(ctx context.Context, addressEvents []litea
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (user *User) handleCreateAddressEvent(ctx context.Context, event liteapi.AddressEvent) error {
|
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 {
|
if _, ok := user.apiAddrs[event.Address.ID]; ok {
|
||||||
return fmt.Errorf("address %q already exists", event.ID)
|
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)
|
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 user.vault.AddressMode() == vault.SplitMode {
|
||||||
if err := syncLabels(ctx, user.client, user.updateCh[event.Address.ID]); err != nil {
|
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)
|
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
|
return nil
|
||||||
}, user.apiAddrsLock, user.updateChLock)
|
}, user.apiAddrsLock, user.updateChLock)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user