Extract `RemoteAttachment` to a top-level entity
This commit is contained in:
parent
30ec06ca76
commit
0adaa331a1
|
@ -32,7 +32,6 @@ import java.util.stream.Stream;
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import javax.validation.constraints.Max;
|
import javax.validation.constraints.Max;
|
||||||
import javax.validation.constraints.Min;
|
import javax.validation.constraints.Min;
|
||||||
import javax.validation.constraints.NotBlank;
|
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
import javax.validation.constraints.PositiveOrZero;
|
import javax.validation.constraints.PositiveOrZero;
|
||||||
import javax.validation.constraints.Size;
|
import javax.validation.constraints.Size;
|
||||||
|
@ -60,13 +59,13 @@ import org.whispersystems.textsecuregcm.backup.BackupManager;
|
||||||
import org.whispersystems.textsecuregcm.backup.CopyParameters;
|
import org.whispersystems.textsecuregcm.backup.CopyParameters;
|
||||||
import org.whispersystems.textsecuregcm.backup.CopyResult;
|
import org.whispersystems.textsecuregcm.backup.CopyResult;
|
||||||
import org.whispersystems.textsecuregcm.backup.MediaEncryptionParameters;
|
import org.whispersystems.textsecuregcm.backup.MediaEncryptionParameters;
|
||||||
|
import org.whispersystems.textsecuregcm.entities.RemoteAttachment;
|
||||||
import org.whispersystems.textsecuregcm.util.BackupAuthCredentialAdapter;
|
import org.whispersystems.textsecuregcm.util.BackupAuthCredentialAdapter;
|
||||||
import org.whispersystems.textsecuregcm.util.ByteArrayAdapter;
|
import org.whispersystems.textsecuregcm.util.ByteArrayAdapter;
|
||||||
import org.whispersystems.textsecuregcm.util.ByteArrayBase64UrlAdapter;
|
import org.whispersystems.textsecuregcm.util.ByteArrayBase64UrlAdapter;
|
||||||
import org.whispersystems.textsecuregcm.util.ECPublicKeyAdapter;
|
import org.whispersystems.textsecuregcm.util.ECPublicKeyAdapter;
|
||||||
import org.whispersystems.textsecuregcm.util.ExactlySize;
|
import org.whispersystems.textsecuregcm.util.ExactlySize;
|
||||||
import org.whispersystems.textsecuregcm.util.Util;
|
import org.whispersystems.textsecuregcm.util.Util;
|
||||||
import org.whispersystems.textsecuregcm.util.ValidBase64URLString;
|
|
||||||
import org.whispersystems.websocket.auth.Mutable;
|
import org.whispersystems.websocket.auth.Mutable;
|
||||||
import org.whispersystems.websocket.auth.ReadOnly;
|
import org.whispersystems.websocket.auth.ReadOnly;
|
||||||
import reactor.core.publisher.Mono;
|
import reactor.core.publisher.Mono;
|
||||||
|
@ -462,16 +461,6 @@ public class ArchiveController {
|
||||||
result.signedUploadLocation()));
|
result.signedUploadLocation()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public record RemoteAttachment(
|
|
||||||
@Schema(description = "The attachment cdn")
|
|
||||||
@NotNull
|
|
||||||
Integer cdn,
|
|
||||||
|
|
||||||
@NotBlank
|
|
||||||
@ValidBase64URLString
|
|
||||||
@Schema(description = "The attachment key")
|
|
||||||
String key) {}
|
|
||||||
|
|
||||||
public record CopyMediaRequest(
|
public record CopyMediaRequest(
|
||||||
@Schema(description = "The object on the attachment CDN to copy")
|
@Schema(description = "The object on the attachment CDN to copy")
|
||||||
@NotNull
|
@NotNull
|
||||||
|
@ -510,7 +499,7 @@ public class ArchiveController {
|
||||||
|
|
||||||
CopyParameters toCopyParameters() {
|
CopyParameters toCopyParameters() {
|
||||||
return new CopyParameters(
|
return new CopyParameters(
|
||||||
sourceAttachment.cdn, sourceAttachment.key,
|
sourceAttachment.cdn(), sourceAttachment.key(),
|
||||||
objectLength,
|
objectLength,
|
||||||
new MediaEncryptionParameters(encryptionKey, hmacKey, iv),
|
new MediaEncryptionParameters(encryptionKey, hmacKey, iv),
|
||||||
mediaId);
|
mediaId);
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2024 Signal Messenger, LLC
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.whispersystems.textsecuregcm.entities;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
import org.whispersystems.textsecuregcm.util.ValidBase64URLString;
|
||||||
|
|
||||||
|
public record RemoteAttachment(
|
||||||
|
@Schema(description = "The attachment cdn")
|
||||||
|
@NotNull
|
||||||
|
Integer cdn,
|
||||||
|
|
||||||
|
@NotBlank
|
||||||
|
@ValidBase64URLString
|
||||||
|
@Schema(description = "The attachment key")
|
||||||
|
String key) {
|
||||||
|
}
|
|
@ -66,6 +66,7 @@ import org.whispersystems.textsecuregcm.backup.BackupAuthTestUtil;
|
||||||
import org.whispersystems.textsecuregcm.backup.BackupManager;
|
import org.whispersystems.textsecuregcm.backup.BackupManager;
|
||||||
import org.whispersystems.textsecuregcm.backup.BackupUploadDescriptor;
|
import org.whispersystems.textsecuregcm.backup.BackupUploadDescriptor;
|
||||||
import org.whispersystems.textsecuregcm.backup.CopyResult;
|
import org.whispersystems.textsecuregcm.backup.CopyResult;
|
||||||
|
import org.whispersystems.textsecuregcm.entities.RemoteAttachment;
|
||||||
import org.whispersystems.textsecuregcm.mappers.CompletionExceptionMapper;
|
import org.whispersystems.textsecuregcm.mappers.CompletionExceptionMapper;
|
||||||
import org.whispersystems.textsecuregcm.mappers.GrpcStatusRuntimeExceptionMapper;
|
import org.whispersystems.textsecuregcm.mappers.GrpcStatusRuntimeExceptionMapper;
|
||||||
import org.whispersystems.textsecuregcm.mappers.RateLimitExceededExceptionMapper;
|
import org.whispersystems.textsecuregcm.mappers.RateLimitExceededExceptionMapper;
|
||||||
|
@ -357,7 +358,7 @@ public class ArchiveControllerTest {
|
||||||
.header("X-Signal-ZK-Auth-Signature", "aaa")
|
.header("X-Signal-ZK-Auth-Signature", "aaa")
|
||||||
.put(Entity.json(new ArchiveController.CopyMediaBatchRequest(List.of(
|
.put(Entity.json(new ArchiveController.CopyMediaBatchRequest(List.of(
|
||||||
new ArchiveController.CopyMediaRequest(
|
new ArchiveController.CopyMediaRequest(
|
||||||
new ArchiveController.RemoteAttachment(3, "abc"),
|
new RemoteAttachment(3, "abc"),
|
||||||
100,
|
100,
|
||||||
mediaIds[0],
|
mediaIds[0],
|
||||||
TestRandomUtil.nextBytes(32),
|
TestRandomUtil.nextBytes(32),
|
||||||
|
@ -365,7 +366,7 @@ public class ArchiveControllerTest {
|
||||||
TestRandomUtil.nextBytes(16)),
|
TestRandomUtil.nextBytes(16)),
|
||||||
|
|
||||||
new ArchiveController.CopyMediaRequest(
|
new ArchiveController.CopyMediaRequest(
|
||||||
new ArchiveController.RemoteAttachment(3, "def"),
|
new RemoteAttachment(3, "def"),
|
||||||
200,
|
200,
|
||||||
mediaIds[1],
|
mediaIds[1],
|
||||||
TestRandomUtil.nextBytes(32),
|
TestRandomUtil.nextBytes(32),
|
||||||
|
@ -402,7 +403,7 @@ public class ArchiveControllerTest {
|
||||||
|
|
||||||
final List<ArchiveController.CopyMediaRequest> copyRequests = Arrays.stream(mediaIds)
|
final List<ArchiveController.CopyMediaRequest> copyRequests = Arrays.stream(mediaIds)
|
||||||
.map(mediaId -> new ArchiveController.CopyMediaRequest(
|
.map(mediaId -> new ArchiveController.CopyMediaRequest(
|
||||||
new ArchiveController.RemoteAttachment(3, "abc"),
|
new RemoteAttachment(3, "abc"),
|
||||||
100,
|
100,
|
||||||
mediaId,
|
mediaId,
|
||||||
TestRandomUtil.nextBytes(32),
|
TestRandomUtil.nextBytes(32),
|
||||||
|
@ -458,7 +459,7 @@ public class ArchiveControllerTest {
|
||||||
.header("X-Signal-ZK-Auth-Signature", "aaa")
|
.header("X-Signal-ZK-Auth-Signature", "aaa")
|
||||||
.put(Entity.json(new ArchiveController.CopyMediaBatchRequest(List.of(
|
.put(Entity.json(new ArchiveController.CopyMediaBatchRequest(List.of(
|
||||||
new ArchiveController.CopyMediaRequest(
|
new ArchiveController.CopyMediaRequest(
|
||||||
new ArchiveController.RemoteAttachment(3, "abc"),
|
new RemoteAttachment(3, "abc"),
|
||||||
1,
|
1,
|
||||||
mediaIds[0],
|
mediaIds[0],
|
||||||
TestRandomUtil.nextBytes(32),
|
TestRandomUtil.nextBytes(32),
|
||||||
|
@ -466,7 +467,7 @@ public class ArchiveControllerTest {
|
||||||
TestRandomUtil.nextBytes(16)),
|
TestRandomUtil.nextBytes(16)),
|
||||||
|
|
||||||
new ArchiveController.CopyMediaRequest(
|
new ArchiveController.CopyMediaRequest(
|
||||||
new ArchiveController.RemoteAttachment(3, "def"),
|
new RemoteAttachment(3, "def"),
|
||||||
-1,
|
-1,
|
||||||
mediaIds[1],
|
mediaIds[1],
|
||||||
TestRandomUtil.nextBytes(32),
|
TestRandomUtil.nextBytes(32),
|
||||||
|
@ -639,7 +640,7 @@ public class ArchiveControllerTest {
|
||||||
.header("X-Signal-ZK-Auth", Base64.getEncoder().encodeToString(presentation.serialize()))
|
.header("X-Signal-ZK-Auth", Base64.getEncoder().encodeToString(presentation.serialize()))
|
||||||
.header("X-Signal-ZK-Auth-Signature", "aaa")
|
.header("X-Signal-ZK-Auth-Signature", "aaa")
|
||||||
.put(Entity.json(new ArchiveController.CopyMediaRequest(
|
.put(Entity.json(new ArchiveController.CopyMediaRequest(
|
||||||
new ArchiveController.RemoteAttachment(3, "invalid/urlBase64"),
|
new RemoteAttachment(3, "invalid/urlBase64"),
|
||||||
100,
|
100,
|
||||||
TestRandomUtil.nextBytes(15),
|
TestRandomUtil.nextBytes(15),
|
||||||
TestRandomUtil.nextBytes(32),
|
TestRandomUtil.nextBytes(32),
|
||||||
|
|
Loading…
Reference in New Issue