diff --git a/pom.xml b/pom.xml index ad1d9998b..e2df92814 100644 --- a/pom.xml +++ b/pom.xml @@ -66,7 +66,7 @@ com.amazonaws aws-java-sdk-s3 - 1.10.6 + 1.11.115 com.google.protobuf diff --git a/src/main/java/org/whispersystems/textsecuregcm/util/UrlSigner.java b/src/main/java/org/whispersystems/textsecuregcm/util/UrlSigner.java index c7f1e55df..f59790571 100644 --- a/src/main/java/org/whispersystems/textsecuregcm/util/UrlSigner.java +++ b/src/main/java/org/whispersystems/textsecuregcm/util/UrlSigner.java @@ -21,6 +21,7 @@ import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3Client; +import com.amazonaws.services.s3.S3ClientOptions; import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest; import org.whispersystems.textsecuregcm.configuration.S3Configuration; @@ -42,10 +43,12 @@ public class UrlSigner { public URL getPreSignedUrl(long attachmentId, HttpMethod method) { AmazonS3 client = new AmazonS3Client(credentials); GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucket, String.valueOf(attachmentId), method); - + request.setExpiration(new Date(System.currentTimeMillis() + DURATION)); request.setContentType("application/octet-stream"); + client.setS3ClientOptions(S3ClientOptions.builder().setAccelerateModeEnabled(true).build()); + return client.generatePresignedUrl(request); } diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/util/UrlSignerTest.java b/src/test/java/org/whispersystems/textsecuregcm/tests/util/UrlSignerTest.java new file mode 100644 index 000000000..510029f3d --- /dev/null +++ b/src/test/java/org/whispersystems/textsecuregcm/tests/util/UrlSignerTest.java @@ -0,0 +1,30 @@ +package org.whispersystems.textsecuregcm.tests.util; + +import com.amazonaws.HttpMethod; +import org.junit.Test; +import org.whispersystems.textsecuregcm.configuration.S3Configuration; +import org.whispersystems.textsecuregcm.util.UrlSigner; + +import java.net.URL; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class UrlSignerTest { + + @Test + public void testTransferAcceleration() { + S3Configuration configuration = mock(S3Configuration.class); + when(configuration.getAccessKey()).thenReturn("foo"); + when(configuration.getAccessSecret()).thenReturn("bar"); + when(configuration.getAttachmentsBucket()).thenReturn("attachments-test"); + + UrlSigner signer = new UrlSigner(configuration); + URL url = signer.getPreSignedUrl(1234, HttpMethod.GET); + + System.out.println("The URL: " + url); + assertThat(url).hasHost("attachments-test.s3-accelerate.amazonaws.com"); + } + +}