From a643a6c0f0ee7e20050908a6d2f5c6d88156efec Mon Sep 17 00:00:00 2001 From: Jon Chambers Date: Wed, 19 Mar 2025 17:21:45 -0400 Subject: [PATCH] Always record inbound message byte rate limit events --- .../textsecuregcm/WhisperServerService.java | 2 +- .../dynamic/DynamicConfiguration.java | 8 -------- ...cInboundMessageByteLimitConfiguration.java | 9 --------- .../controllers/MessageController.java | 12 ++---------- .../controllers/MessageControllerTest.java | 19 +------------------ 5 files changed, 4 insertions(+), 46 deletions(-) delete mode 100644 service/src/main/java/org/whispersystems/textsecuregcm/configuration/dynamic/DynamicInboundMessageByteLimitConfiguration.java diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java index ef03ac3a6..20ec0b24a 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java @@ -1090,7 +1090,7 @@ public class WhisperServerService extends Application dynamicConfigurationManager; private final ServerSecretParams serverSecretParams; private final SpamChecker spamChecker; private final MessageMetrics messageMetrics; @@ -213,7 +209,6 @@ public class MessageController { ReportMessageManager reportMessageManager, Scheduler messageDeliveryScheduler, final ClientReleaseManager clientReleaseManager, - final DynamicConfigurationManager dynamicConfigurationManager, final ServerSecretParams serverSecretParams, final SpamChecker spamChecker, final MessageMetrics messageMetrics, @@ -231,7 +226,6 @@ public class MessageController { this.reportMessageManager = reportMessageManager; this.messageDeliveryScheduler = messageDeliveryScheduler; this.clientReleaseManager = clientReleaseManager; - this.dynamicConfigurationManager = dynamicConfigurationManager; this.serverSecretParams = serverSecretParams; this.spamChecker = spamChecker; this.messageMetrics = messageMetrics; @@ -340,10 +334,8 @@ public class MessageController { try { rateLimiters.getInboundMessageBytes().validate(destinationIdentifier.uuid(), totalContentLength); } catch (final RateLimitExceededException e) { - if (dynamicConfigurationManager.getConfiguration().getInboundMessageByteLimitConfiguration().enforceInboundLimit()) { - messageByteLimitEstimator.add(destinationIdentifier.uuid().toString()); - throw e; - } + messageByteLimitEstimator.add(destinationIdentifier.uuid().toString()); + throw e; } try { diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/controllers/MessageControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/controllers/MessageControllerTest.java index ec5dc198a..7ba048fd7 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/controllers/MessageControllerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/controllers/MessageControllerTest.java @@ -73,8 +73,6 @@ import org.mockito.ArgumentCaptor; import org.signal.libsignal.zkgroup.ServerSecretParams; import org.whispersystems.textsecuregcm.auth.AuthenticatedDevice; import org.whispersystems.textsecuregcm.auth.UnidentifiedAccessUtil; -import org.whispersystems.textsecuregcm.configuration.dynamic.DynamicConfiguration; -import org.whispersystems.textsecuregcm.configuration.dynamic.DynamicInboundMessageByteLimitConfiguration; import org.whispersystems.textsecuregcm.entities.IncomingMessage; import org.whispersystems.textsecuregcm.entities.IncomingMessageList; import org.whispersystems.textsecuregcm.entities.MessageProtos; @@ -105,7 +103,6 @@ import org.whispersystems.textsecuregcm.storage.Account; import org.whispersystems.textsecuregcm.storage.AccountsManager; import org.whispersystems.textsecuregcm.storage.ClientReleaseManager; import org.whispersystems.textsecuregcm.storage.Device; -import org.whispersystems.textsecuregcm.storage.DynamicConfigurationManager; import org.whispersystems.textsecuregcm.storage.MessagesManager; import org.whispersystems.textsecuregcm.storage.PhoneNumberIdentifiers; import org.whispersystems.textsecuregcm.storage.RemovedMessage; @@ -177,10 +174,6 @@ class MessageControllerTest { private static final ReportMessageManager reportMessageManager = mock(ReportMessageManager.class); private static final Scheduler messageDeliveryScheduler = Schedulers.newBoundedElastic(10, 10_000, "messageDelivery"); - @SuppressWarnings("unchecked") - private static final DynamicConfigurationManager dynamicConfigurationManager = - mock(DynamicConfigurationManager.class); - private static final ServerSecretParams serverSecretParams = ServerSecretParams.generate(); private static final TestClock clock = TestClock.now(); @@ -198,7 +191,7 @@ class MessageControllerTest { new MessageController(rateLimiters, cardinalityEstimator, messageSender, receiptSender, accountsManager, messagesManager, phoneNumberIdentifiers, pushNotificationManager, pushNotificationScheduler, reportMessageManager, messageDeliveryScheduler, mock(ClientReleaseManager.class), - dynamicConfigurationManager, serverSecretParams, SpamChecker.noop(), new MessageMetrics(), mock(MessageDeliveryLoopMonitor.class), + serverSecretParams, SpamChecker.noop(), new MessageMetrics(), mock(MessageDeliveryLoopMonitor.class), clock)) .build(); @@ -239,16 +232,6 @@ class MessageControllerTest { when(accountsManager.getByServiceIdentifierAsync(MULTI_DEVICE_PNI_ID)).thenReturn(CompletableFuture.completedFuture(Optional.of(multiDeviceAccount))); when(accountsManager.getByServiceIdentifierAsync(new AciServiceIdentifier(INTERNATIONAL_UUID))).thenReturn(CompletableFuture.completedFuture(Optional.of(internationalAccount))); - final DynamicInboundMessageByteLimitConfiguration inboundMessageByteLimitConfiguration = - mock(DynamicInboundMessageByteLimitConfiguration.class); - - when(inboundMessageByteLimitConfiguration.enforceInboundLimit()).thenReturn(false); - - final DynamicConfiguration dynamicConfiguration = mock(DynamicConfiguration.class); - when(dynamicConfiguration.getInboundMessageByteLimitConfiguration()).thenReturn(inboundMessageByteLimitConfiguration); - - when(dynamicConfigurationManager.getConfiguration()).thenReturn(dynamicConfiguration); - when(rateLimiters.getMessagesLimiter()).thenReturn(rateLimiter); when(rateLimiters.getStoriesLimiter()).thenReturn(rateLimiter); when(rateLimiters.getInboundMessageBytes()).thenReturn(rateLimiter);