diff --git a/go.sum b/go.sum index 11d73012..e11cf41b 100644 --- a/go.sum +++ b/go.sum @@ -36,15 +36,6 @@ github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAE github.com/ProtonMail/bcrypt v0.0.0-20210511135022-227b4adcab57/go.mod h1:HecWFHognK8GfRDGnFQbW/LiV7A3MX3gZVs45vk5h8I= github.com/ProtonMail/bcrypt v0.0.0-20211005172633-e235017c1baf h1:yc9daCCYUefEs69zUkSzubzjBbL+cmOXgnmt9Fyd9ug= github.com/ProtonMail/bcrypt v0.0.0-20211005172633-e235017c1baf/go.mod h1:o0ESU9p83twszAU8LBeJKFAAMX14tISa0yk4Oo5TOqo= -github.com/ProtonMail/gluon v0.17.1-0.20250513141309-843796a505bc h1:2oppv7H5ZeFnRDohTbLZW5A8I1ylhoX2QEi3RtKxrLE= -github.com/ProtonMail/gluon v0.17.1-0.20250513141309-843796a505bc/go.mod h1:0/c03TzZPNiSgY5UDJK1iRDkjlDPwWugxTT6et2qDu8= -github.com/ProtonMail/gluon v0.17.1-0.20250514104052-2f93fdfc4850 h1:OFMVeakcDS9nHW5kQ/CuBXri84iPBqPgZFHz5Xs/8jo= -github.com/ProtonMail/gluon v0.17.1-0.20250514104052-2f93fdfc4850/go.mod h1:0/c03TzZPNiSgY5UDJK1iRDkjlDPwWugxTT6et2qDu8= -github.com/ProtonMail/gluon v0.17.1-0.20250515084749-4afe6a076ac4 h1:L1JeVS2op3VIcPKctS493+qOBFGhr488mMkYVSLr9eY= -github.com/ProtonMail/gluon v0.17.1-0.20250515084749-4afe6a076ac4/go.mod h1:0/c03TzZPNiSgY5UDJK1iRDkjlDPwWugxTT6et2qDu8= -github.com/ProtonMail/gluon v0.17.1-0.20250516132429-a4b2de331311 h1:8oEkpmF8PD7GyCQjmTto+4yhz4vE1tTT2djL2BgJcBI= -github.com/ProtonMail/gluon v0.17.1-0.20250516132429-a4b2de331311/go.mod h1:0/c03TzZPNiSgY5UDJK1iRDkjlDPwWugxTT6et2qDu8= -github.com/ProtonMail/gluon v0.17.1-0.20250527153202-a7383713882a/go.mod h1:0/c03TzZPNiSgY5UDJK1iRDkjlDPwWugxTT6et2qDu8= github.com/ProtonMail/gluon v0.17.1-0.20250528125353-9b611f58b753 h1:Zym7WHKLOu1RAUc9b8vkhwEaEU2Gi6MkaurCm7zpK6E= github.com/ProtonMail/gluon v0.17.1-0.20250528125353-9b611f58b753/go.mod h1:0/c03TzZPNiSgY5UDJK1iRDkjlDPwWugxTT6et2qDu8= github.com/ProtonMail/go-crypto v0.0.0-20230321155629-9a39f2531310/go.mod h1:8TI4H3IbrackdNgv+92dI+rhpCaLqM0IfpgCgenFvRE= diff --git a/internal/services/imapservice/conflicts.go b/internal/services/imapservice/conflicts.go index d38290f4..fd82d436 100644 --- a/internal/services/imapservice/conflicts.go +++ b/internal/services/imapservice/conflicts.go @@ -54,7 +54,7 @@ type LabelConflictManager struct { gluonIDProvider gluonIDProvider client apiClient reporter sentryReporter - getFeatureFlagValueFn unleash.GetFlagValueFn + featureFlagProvider unleash.FeatureFlagValueProvider } func NewLabelConflictManager( @@ -62,13 +62,13 @@ func NewLabelConflictManager( gluonIDProvider gluonIDProvider, client apiClient, reporter sentryReporter, - getFeatureFlagValueFn unleash.GetFlagValueFn) *LabelConflictManager { + featureFlagProvider unleash.FeatureFlagValueProvider) *LabelConflictManager { return &LabelConflictManager{ gluonLabelNameProvider: gluonLabelNameProvider, gluonIDProvider: gluonIDProvider, client: client, reporter: reporter, - getFeatureFlagValueFn: getFeatureFlagValueFn, + featureFlagProvider: featureFlagProvider, } } @@ -104,7 +104,7 @@ func (r *nullLabelConflictResolverImpl) ResolveConflict(_ context.Context, _ pro } func (m *LabelConflictManager) NewConflictResolver(connectors []*Connector) LabelConflictResolver { - if m.getFeatureFlagValueFn(unleash.LabelConflictResolverDisabled) { + if m.featureFlagProvider.GetFlagValue(unleash.LabelConflictResolverDisabled) { return &nullLabelConflictResolverImpl{} } diff --git a/internal/services/imapservice/conflicts_test.go b/internal/services/imapservice/conflicts_test.go index 9cf654a3..22115389 100644 --- a/internal/services/imapservice/conflicts_test.go +++ b/internal/services/imapservice/conflicts_test.go @@ -33,10 +33,17 @@ import ( "github.com/stretchr/testify/require" ) -func getFeatureFlagValueMock(_ string) bool { +type ffProviderFalse struct{} +type ffProviderTrue struct{} + +func (f ffProviderFalse) GetFlagValue(_ string) bool { return false } +func (f ffProviderTrue) GetFlagValue(_ string) bool { + return true +} + type mockLabelNameProvider struct { mock.Mock } @@ -113,7 +120,7 @@ func TestResolveConflict_UnexpectedLabelConflict(t *testing.T) { connector := &imapservice.Connector{} connector.SetAddrIDTest("addr-1") - resolver := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, getFeatureFlagValueMock). + resolver := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, ffProviderFalse{}). NewConflictResolver([]*imapservice.Connector{connector}) visited := make(map[string]bool) @@ -144,7 +151,7 @@ func TestResolveDiscrepancy_LabelDoesNotExist(t *testing.T) { connector.SetAddrIDTest("addr-1") connectors := []*imapservice.Connector{connector} - manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, getFeatureFlagValueMock) + manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, ffProviderFalse{}) resolver := manager.NewConflictResolver(connectors) visited := make(map[string]bool) @@ -177,7 +184,7 @@ func TestResolveConflict_MailboxFetchError(t *testing.T) { connector := &imapservice.Connector{} connector.SetAddrIDTest("addr-1") - resolver := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, getFeatureFlagValueMock). + resolver := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, ffProviderFalse{}). NewConflictResolver([]*imapservice.Connector{connector}) visited := make(map[string]bool) @@ -215,7 +222,7 @@ func TestResolveDiscrepancy_ConflictingLabelDeletedRemotely(t *testing.T) { connector.SetAddrIDTest("addr-1") connectors := []*imapservice.Connector{connector} - manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, getFeatureFlagValueMock) + manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, ffProviderFalse{}) resolver := manager.NewConflictResolver(connectors) visited := make(map[string]bool) @@ -258,7 +265,7 @@ func TestResolveDiscrepancy_LabelAlreadyCorrect(t *testing.T) { connector.SetAddrIDTest("addr-1") connectors := []*imapservice.Connector{connector} - manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, getFeatureFlagValueMock) + manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, ffProviderFalse{}) resolver := manager.NewConflictResolver(connectors) visited := make(map[string]bool) @@ -287,7 +294,7 @@ func TestResolveConflict_DeepNestedPath(t *testing.T) { connector := &imapservice.Connector{} connector.SetAddrIDTest("addr-1") - resolver := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, getFeatureFlagValueMock). + resolver := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, ffProviderFalse{}). NewConflictResolver([]*imapservice.Connector{connector}) visited := make(map[string]bool) @@ -352,7 +359,7 @@ func TestResolveLabelDiscrepancy_LabelSwap(t *testing.T) { connector.SetAddrIDTest("addr-1") connectors := []*imapservice.Connector{connector} - manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, getFeatureFlagValueMock) + manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, ffProviderFalse{}) resolver := manager.NewConflictResolver(connectors) visited := make(map[string]bool) @@ -445,7 +452,7 @@ func TestResolveLabelDiscrepancy_LabelSwapExtended(t *testing.T) { connector.SetAddrIDTest("addr-1") connectors := []*imapservice.Connector{connector} - manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, getFeatureFlagValueMock) + manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, ffProviderFalse{}) resolver := manager.NewConflictResolver(connectors) fn, err := resolver.ResolveConflict(context.Background(), apiLabels[0], make(map[string]bool)) @@ -530,7 +537,7 @@ func TestResolveLabelDiscrepancy_LabelSwapCyclic(t *testing.T) { connector.SetAddrIDTest("addr-1") connectors := []*imapservice.Connector{connector} - manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, getFeatureFlagValueMock) + manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, ffProviderFalse{}) resolver := manager.NewConflictResolver(connectors) fn, err := resolver.ResolveConflict(context.Background(), apiLabels[0], make(map[string]bool)) @@ -604,7 +611,7 @@ func TestResolveLabelDiscrepancy_LabelSwapCyclicWithDeletedLabel(t *testing.T) { connector.SetAddrIDTest("addr-1") connectors := []*imapservice.Connector{connector} - manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, getFeatureFlagValueMock) + manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, ffProviderFalse{}) resolver := manager.NewConflictResolver(connectors) fn, err := resolver.ResolveConflict(context.Background(), apiLabels[2], make(map[string]bool)) @@ -667,11 +674,7 @@ func TestResolveLabelDiscrepancy_LabelSwapCyclicWithDeletedLabel_KillSwitchEnabl connector.SetAddrIDTest("addr-1") connectors := []*imapservice.Connector{connector} - getFeatureFlagFn := func(_ string) bool { - return true - } - - manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, getFeatureFlagFn) + manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, ffProviderTrue{}) resolver := manager.NewConflictResolver(connectors) fn, err := resolver.ResolveConflict(context.Background(), apiLabels[2], make(map[string]bool)) diff --git a/internal/services/imapservice/service.go b/internal/services/imapservice/service.go index 475a4f3f..34e50a54 100644 --- a/internal/services/imapservice/service.go +++ b/internal/services/imapservice/service.go @@ -114,7 +114,7 @@ func NewService( maxSyncMemory uint64, showAllMail bool, observabilitySender observability.Sender, - getFeatureFlagValueFn unleash.GetFlagValueFn, + featureFlagProvider unleash.FeatureFlagValueProvider, ) *Service { subscriberName := fmt.Sprintf("imap-%v", identityState.User.ID) @@ -124,7 +124,7 @@ func NewService( }) rwIdentity := newRWIdentity(identityState, bridgePassProvider, keyPassProvider) - labelConflictManager := NewLabelConflictManager(serverManager, gluonIDProvider, client, reporter, getFeatureFlagValueFn) + labelConflictManager := NewLabelConflictManager(serverManager, gluonIDProvider, client, reporter, featureFlagProvider) syncUpdateApplier := NewSyncUpdateApplier(labelConflictManager) syncMessageBuilder := NewSyncMessageBuilder(rwIdentity) syncReporter := newSyncReporter(identityState.User.ID, eventPublisher, time.Second) diff --git a/internal/unleash/service.go b/internal/unleash/service.go index fadc4979..e4fb2339 100644 --- a/internal/unleash/service.go +++ b/internal/unleash/service.go @@ -37,11 +37,11 @@ var pollJitter = 2 * time.Minute //nolint:gochecknoglobals const filename = "unleash_flags" const ( - EventLoopNotificationDisabled = "InboxBridgeEventLoopNotificationDisabled" - IMAPAuthenticateCommandDisabled = "InboxBridgeImapAuthenticateCommandDisabled" - UserRemovalGluonDataCleanupDisabled = "InboxBridgeUserRemovalGluonDataCleanupDisabled" - UpdateUseNewVersionFileStructureDisabled = "InboxBridgeUpdateWithOsFilterDisabled" - LabelConflictResolverDisabled = "InboxBridgeLabelConflictResolverDisabled" + EventLoopNotificationDisabled = "InboxBridgeEventLoopNotificationDisabled" + IMAPAuthenticateCommandDisabled = "InboxBridgeImapAuthenticateCommandDisabled" + UserRemovalGluonDataCleanupDisabled = "InboxBridgeUserRemovalGluonDataCleanupDisabled" + UpdateUseNewVersionFileStructureDisabled = "InboxBridgeUpdateWithOsFilterDisabled" + LabelConflictResolverDisabled = "InboxBridgeLabelConflictResolverDisabled" SMTPSubmissionRequestSentryReportDisabled = "InboxBridgeSmtpSubmissionRequestSentryReportDisabled" ) diff --git a/internal/user/user.go b/internal/user/user.go index 926b729c..41019d76 100644 --- a/internal/user/user.go +++ b/internal/user/user.go @@ -284,7 +284,7 @@ func newImpl( user.maxSyncMemory, showAllMail, observabilityService, - getFlagValueFn, + featureFlagValueProvider, ) user.notificationService = notifications.NewService(user.id, user.eventService, user, notificationStore, featureFlagValueProvider, observabilityService)