diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/MessageController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/MessageController.java index 15aefc903..119c82d00 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/MessageController.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/MessageController.java @@ -9,7 +9,6 @@ import static com.codahale.metrics.MetricRegistry.name; import com.codahale.metrics.annotation.Timed; import com.google.common.annotations.VisibleForTesting; import com.google.protobuf.ByteString; -import com.vdurmont.semver4j.Semver; import io.dropwizard.auth.Auth; import io.dropwizard.util.DataSize; import io.micrometer.core.instrument.Counter; @@ -93,9 +92,7 @@ import org.whispersystems.textsecuregcm.storage.ReportMessageManager; import org.whispersystems.textsecuregcm.util.MessageValidation; import org.whispersystems.textsecuregcm.util.Pair; import org.whispersystems.textsecuregcm.util.Util; -import org.whispersystems.textsecuregcm.util.ua.ClientPlatform; import org.whispersystems.textsecuregcm.util.ua.UnrecognizedUserAgentException; -import org.whispersystems.textsecuregcm.util.ua.UserAgent; import org.whispersystems.textsecuregcm.util.ua.UserAgentUtil; import org.whispersystems.textsecuregcm.websocket.WebSocketConnection; @@ -115,12 +112,6 @@ public class MessageController { private final ReportMessageManager reportMessageManager; private final ExecutorService multiRecipientMessageExecutor; - @VisibleForTesting - static final Semver FIRST_IOS_VERSION_WITH_INCORRECT_ENVELOPE_TYPE = new Semver("5.22.0"); - - @VisibleForTesting - static final Semver IOS_VERSION_WITH_FIXED_ENVELOPE_TYPE = new Semver("5.25.0"); - private static final String REJECT_OVERSIZE_MESSAGE_COUNTER = name(MessageController.class, "rejectOversizeMessage"); private static final String SENT_MESSAGE_COUNTER_NAME = name(MessageController.class, "sentMessages"); private static final String CONTENT_SIZE_DISTRIBUTION_NAME = name(MessageController.class, "messageContentSize"); @@ -610,23 +601,7 @@ public class MessageController { Optional messageContent = getMessageContent(incomingMessage); Envelope.Builder messageBuilder = Envelope.newBuilder(); - int envelopeTypeNumber = incomingMessage.getType(); - - // Some versions of the iOS app incorrectly use the reserved envelope type 7 for PLAINTEXT_CONTENT instead of type - // 8. This check can be removed safely after 2022-03-01. - if (envelopeTypeNumber == 7) { - try { - final UserAgent userAgent = UserAgentUtil.parseUserAgentString(userAgentString); - if (userAgent.getPlatform() == ClientPlatform.IOS && - FIRST_IOS_VERSION_WITH_INCORRECT_ENVELOPE_TYPE.isLowerThanOrEqualTo(userAgent.getVersion()) && - userAgent.getVersion().isLowerThan(IOS_VERSION_WITH_FIXED_ENVELOPE_TYPE)) { - envelopeTypeNumber = Type.PLAINTEXT_CONTENT.getNumber(); - } - } catch (final UnrecognizedUserAgentException ignored2) { - } - } - - final Envelope.Type envelopeType = Envelope.Type.forNumber(envelopeTypeNumber); + final Envelope.Type envelopeType = Envelope.Type.forNumber(incomingMessage.getType()); if (envelopeType == null) { logger.warn("Received bad envelope type {} from {}", incomingMessage.getType(), userAgentString); 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 a7cdb5f10..17fa2d66c 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/controllers/MessageControllerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/controllers/MessageControllerTest.java @@ -229,39 +229,6 @@ class MessageControllerTest { assertTrue(captor.getValue().hasSourceDevice()); } - @ParameterizedTest - @MethodSource - void testSingleDeviceCurrentBadType(final String userAgentString, final boolean expectAcceptMessage) throws Exception { - Response response = - resources.getJerseyTest() - .target(String.format("/v1/messages/%s", SINGLE_DEVICE_UUID)) - .request() - .header("Authorization", AuthHelper.getAuthHeader(AuthHelper.VALID_UUID, AuthHelper.VALID_PASSWORD)) - .header("User-Agent", userAgentString) - .put(Entity.entity(SystemMapper.getMapper().readValue(jsonFixture("fixtures/current_message_single_device_bad_type.json"), IncomingMessageList.class), - MediaType.APPLICATION_JSON_TYPE)); - - if (expectAcceptMessage) { - assertEquals(200, response.getStatus()); - - final ArgumentCaptor captor = ArgumentCaptor.forClass(Envelope.class); - verify(messageSender).sendMessage(any(Account.class), any(Device.class), captor.capture(), eq(false)); - } else { - assertEquals(400, response.getStatus()); - verify(messageSender, never()).sendMessage(any(), any(), any(), anyBoolean()); - } - } - - private static Stream testSingleDeviceCurrentBadType() { - return Stream.of( - Arguments.of(String.format("Signal-iOS/%s iOS/14.2", MessageController.FIRST_IOS_VERSION_WITH_INCORRECT_ENVELOPE_TYPE), true), - Arguments.of(String.format("Signal-iOS/%s iOS/14.2", MessageController.FIRST_IOS_VERSION_WITH_INCORRECT_ENVELOPE_TYPE.nextPatch()), true), - Arguments.of(String.format("Signal-iOS/%s iOS/14.2", new Semver("5.22.0.38")), true), - Arguments.of(String.format("Signal-iOS/%s iOS/14.2", MessageController.IOS_VERSION_WITH_FIXED_ENVELOPE_TYPE.withIncMinor(-1)), true), - Arguments.of(String.format("Signal-iOS/%s iOS/14.2", MessageController.IOS_VERSION_WITH_FIXED_ENVELOPE_TYPE), false) - ); - } - @ParameterizedTest @MethodSource("currentMessageSingleDevicePayloads") void testSingleDeviceCurrentByPni(Entity payload) throws Exception {