From eb80305f87b114f06f28b5254c4bc7d5b13f32e9 Mon Sep 17 00:00:00 2001 From: Jon Chambers Date: Wed, 16 Oct 2024 15:02:17 -0400 Subject: [PATCH] Retire `AttachmentControllerV3` --- .../textsecuregcm/WhisperServerService.java | 2 - .../controllers/AttachmentControllerV3.java | 66 ------------------- .../controllers/AttachmentControllerTest.java | 11 ---- 3 files changed, 79 deletions(-) delete mode 100644 service/src/main/java/org/whispersystems/textsecuregcm/controllers/AttachmentControllerV3.java diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java index fb47fc141..0b17acb97 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java @@ -111,7 +111,6 @@ import org.whispersystems.textsecuregcm.controllers.ArchiveController; import org.whispersystems.textsecuregcm.controllers.ArtController; import org.whispersystems.textsecuregcm.controllers.AttachmentControllerV2; -import org.whispersystems.textsecuregcm.controllers.AttachmentControllerV3; import org.whispersystems.textsecuregcm.controllers.AttachmentControllerV4; import org.whispersystems.textsecuregcm.controllers.CallLinkController; import org.whispersystems.textsecuregcm.controllers.CallRoutingController; @@ -1101,7 +1100,6 @@ protected void configureServer(final ServerBuilder serverBuilder) { config.getAwsAttachmentsConfiguration().credentials().accessKeyId().value(), config.getAwsAttachmentsConfiguration().credentials().secretAccessKey().value(), config.getAwsAttachmentsConfiguration().region(), config.getAwsAttachmentsConfiguration().bucket()), - new AttachmentControllerV3(rateLimiters, gcsAttachmentGenerator), new AttachmentControllerV4(rateLimiters, gcsAttachmentGenerator, tusAttachmentGenerator, experimentEnrollmentManager), new ArchiveController(backupAuthManager, backupManager), diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AttachmentControllerV3.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AttachmentControllerV3.java deleted file mode 100644 index ab8d2f68c..000000000 --- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AttachmentControllerV3.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright 2013 Signal Messenger, LLC - * SPDX-License-Identifier: AGPL-3.0-only - */ - -package org.whispersystems.textsecuregcm.controllers; - -import io.dropwizard.auth.Auth; -import io.swagger.v3.oas.annotations.tags.Tag; -import java.io.IOException; -import java.security.InvalidKeyException; -import java.security.SecureRandom; -import java.security.spec.InvalidKeySpecException; -import java.util.Base64; -import javax.annotation.Nonnull; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import org.whispersystems.textsecuregcm.attachments.AttachmentGenerator; -import org.whispersystems.textsecuregcm.attachments.GcsAttachmentGenerator; -import org.whispersystems.textsecuregcm.auth.AuthenticatedDevice; -import org.whispersystems.textsecuregcm.entities.AttachmentDescriptorV3; -import org.whispersystems.textsecuregcm.limits.RateLimiter; -import org.whispersystems.textsecuregcm.limits.RateLimiters; -import org.whispersystems.websocket.auth.ReadOnly; - -// To be removed when Desktop 7.17 reaches saturation, likely some time toward the end of October 2024 -@Deprecated(forRemoval = true) -@Path("/v3/attachments") -@Tag(name = "Attachments") -public class AttachmentControllerV3 { - - @Nonnull - private final RateLimiter rateLimiter; - - @Nonnull - private final GcsAttachmentGenerator gcsAttachmentGenerator; - - @Nonnull - private final SecureRandom secureRandom; - - public AttachmentControllerV3(@Nonnull RateLimiters rateLimiters, @Nonnull GcsAttachmentGenerator gcsAttachmentGenerator) - throws IOException, InvalidKeyException, InvalidKeySpecException { - this.rateLimiter = rateLimiters.getAttachmentLimiter(); - this.gcsAttachmentGenerator = gcsAttachmentGenerator; - this.secureRandom = new SecureRandom(); - } - - @GET - @Produces(MediaType.APPLICATION_JSON) - @Path("/form/upload") - public AttachmentDescriptorV3 getAttachmentUploadForm(@ReadOnly @Auth AuthenticatedDevice auth) - throws RateLimitExceededException { - rateLimiter.validate(auth.getAccount().getUuid()); - final String key = generateAttachmentKey(); - final AttachmentGenerator.Descriptor descriptor = this.gcsAttachmentGenerator.generateAttachment(key); - return new AttachmentDescriptorV3(2, key, descriptor.headers(), descriptor.signedUploadLocation()); - } - - private String generateAttachmentKey() { - final byte[] bytes = new byte[15]; - secureRandom.nextBytes(bytes); - return Base64.getUrlEncoder().encodeToString(bytes); - } -} diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/controllers/AttachmentControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/controllers/AttachmentControllerTest.java index 005ebf173..6f20b19c9 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/controllers/AttachmentControllerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/controllers/AttachmentControllerTest.java @@ -95,7 +95,6 @@ class AttachmentControllerTest { .setTestContainerFactory(new GrizzlyWebTestContainerFactory()) .addResource(new AttachmentControllerV2(RATE_LIMITERS, "accessKey", "accessSecret", "us-east-1", "attachmentv2-bucket")) - .addResource(new AttachmentControllerV3(RATE_LIMITERS, gcsAttachmentGenerator)) .addProvider(new AttachmentControllerV4(RATE_LIMITERS, gcsAttachmentGenerator, new TusAttachmentGenerator(new TusConfiguration(new SecretBytes(TUS_SECRET), TUS_URL)), @@ -132,16 +131,6 @@ void testV4GcsForm() { assertValidCdn2Response(descriptor); } - @Test - void testV3Form() { - AttachmentDescriptorV3 descriptor = resources.getJerseyTest() - .target("/v3/attachments/form/upload") - .request() - .header("Authorization", AuthHelper.getAuthHeader(AuthHelper.VALID_UUID, AuthHelper.VALID_PASSWORD)) - .get(AttachmentDescriptorV3.class); - assertValidCdn2Response(descriptor); - } - private static void assertValidCdn2Response(final AttachmentDescriptorV3 descriptor) { assertThat(descriptor.key()).isNotBlank(); assertThat(descriptor.cdn()).isEqualTo(2);