Skip to content

Commit 8e51328

Browse files
committed
step 1 - refactoring
1 parent 44e9886 commit 8e51328

File tree

5 files changed

+30
-19
lines changed

5 files changed

+30
-19
lines changed

src/main/java/software/amazon/encryption/s3/internal/ContentMetadataEncodingStrategy.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22
// SPDX-License-Identifier: Apache-2.0
33
package software.amazon.encryption.s3.internal;
44

5+
import software.amazon.awssdk.services.s3.model.CreateMultipartUploadRequest;
6+
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
57
import software.amazon.encryption.s3.materials.EncryptionMaterials;
68

7-
import java.util.Map;
8-
9-
@FunctionalInterface
109
public interface ContentMetadataEncodingStrategy {
1110

12-
Map<String, String> encodeMetadata(EncryptionMaterials materials, byte[] iv,
13-
Map<String, String> metadata);
11+
PutObjectRequest encodeMetadata(EncryptionMaterials materials, byte[] iv, PutObjectRequest putObjectRequest);
12+
CreateMultipartUploadRequest encodeMetadata(EncryptionMaterials materials, byte[] iv, CreateMultipartUploadRequest createMultipartUploadRequest);
13+
1414
}

src/main/java/software/amazon/encryption/s3/internal/InstructionFileConfig.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public class InstructionFileConfig {
1616
final private InstructionFileClientType _clientType;
1717
final private S3AsyncClient _s3AsyncClient;
1818
final private S3Client _s3Client;
19+
final private boolean _enableInstructionFilePut;
1920

2021
private InstructionFileConfig(final Builder builder) {
2122
_clientType = builder._clientType;

src/main/java/software/amazon/encryption/s3/internal/MultipartUploadObjectPipeline.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,10 @@ public CreateMultipartUploadResponse createMultipartUpload(CreateMultipartUpload
6767

6868
MultipartEncryptedContent encryptedContent = _contentEncryptionStrategy.initMultipartEncryption(materials);
6969

70-
Map<String, String> metadata = new HashMap<>(request.metadata());
71-
metadata = _contentMetadataEncodingStrategy.encodeMetadata(materials, encryptedContent.getIv(), metadata);
72-
request = request.toBuilder()
70+
CreateMultipartUploadRequest createMpuRequest = _contentMetadataEncodingStrategy.encodeMetadata(materials, encryptedContent.getIv(), request);
71+
request = createMpuRequest.toBuilder()
7372
.overrideConfiguration(API_NAME_INTERCEPTOR)
74-
.metadata(metadata).build();
73+
.build();
7574

7675
CreateMultipartUploadResponse response = _s3AsyncClient.createMultipartUpload(request).join();
7776

src/main/java/software/amazon/encryption/s3/internal/ObjectMetadataEncodingStrategy.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,37 @@
11
package software.amazon.encryption.s3.internal;
22

33
import software.amazon.awssdk.protocols.jsoncore.JsonWriter;
4+
import software.amazon.awssdk.services.s3.model.CreateMultipartUploadRequest;
5+
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
46
import software.amazon.encryption.s3.S3EncryptionClientException;
57
import software.amazon.encryption.s3.materials.EncryptedDataKey;
68
import software.amazon.encryption.s3.materials.EncryptionMaterials;
79

810
import java.nio.charset.StandardCharsets;
911
import java.util.Base64;
12+
import java.util.HashMap;
1013
import java.util.Map;
1114

1215
public class ObjectMetadataEncodingStrategy implements ContentMetadataEncodingStrategy {
1316

1417
private static final Base64.Encoder ENCODER = Base64.getEncoder();
1518

16-
@Override
17-
public Map<String, String> encodeMetadata(EncryptionMaterials materials, byte[] iv,
18-
Map<String, String> metadata) {
19+
public PutObjectRequest encodeMetadata(EncryptionMaterials materials, byte[] iv, PutObjectRequest putObjectRequest) {
20+
Map<String, String> newMetadata = addMetadataToMap(putObjectRequest.metadata(), materials, iv);
21+
return putObjectRequest.toBuilder()
22+
.metadata(newMetadata)
23+
.build();
24+
}
25+
26+
public CreateMultipartUploadRequest encodeMetadata(EncryptionMaterials materials, byte[] iv, CreateMultipartUploadRequest createMultipartUploadRequest) {
27+
Map<String, String> newMetadata = addMetadataToMap(createMultipartUploadRequest.metadata(), materials, iv);
28+
return createMultipartUploadRequest.toBuilder()
29+
.metadata(newMetadata)
30+
.build();
31+
}
32+
33+
private Map<String, String> addMetadataToMap(Map<String, String> map, EncryptionMaterials materials, byte[] iv) {
34+
Map<String, String> metadata = new HashMap<>(map);
1935
EncryptedDataKey edk = materials.encryptedDataKeys().get(0);
2036
metadata.put(MetadataKeyConstants.ENCRYPTED_DATA_KEY_V2, ENCODER.encodeToString(edk.encryptedDatakey()));
2137
metadata.put(MetadataKeyConstants.CONTENT_IV, ENCODER.encodeToString(iv));
@@ -37,5 +53,4 @@ public Map<String, String> encodeMetadata(EncryptionMaterials materials, byte[]
3753
}
3854
return metadata;
3955
}
40-
4156
}

src/main/java/software/amazon/encryption/s3/internal/PutEncryptedObjectPipeline.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414
import software.amazon.encryption.s3.materials.EncryptionMaterialsRequest;
1515

1616
import java.security.SecureRandom;
17-
import java.util.HashMap;
18-
import java.util.Map;
1917
import java.util.concurrent.CompletableFuture;
2018

2119
import static software.amazon.encryption.s3.internal.ApiNameVersion.API_NAME_INTERCEPTOR;
@@ -70,12 +68,10 @@ public CompletableFuture<PutObjectResponse> putObject(PutObjectRequest request,
7068

7169
EncryptedContent encryptedContent = _asyncContentEncryptionStrategy.encryptContent(materials, requestBody);
7270

73-
Map<String, String> metadata = new HashMap<>(request.metadata());
74-
metadata = _contentMetadataEncodingStrategy.encodeMetadata(materials, encryptedContent.getIv(), metadata);
75-
PutObjectRequest encryptedPutRequest = request.toBuilder()
71+
PutObjectRequest modifiedRequest = _contentMetadataEncodingStrategy.encodeMetadata(materials, encryptedContent.getIv(), request);
72+
PutObjectRequest encryptedPutRequest = modifiedRequest.toBuilder()
7673
.overrideConfiguration(API_NAME_INTERCEPTOR)
7774
.contentLength(encryptedContent.getCiphertextLength())
78-
.metadata(metadata)
7975
.build();
8076
return _s3AsyncClient.putObject(encryptedPutRequest, encryptedContent.getAsyncCiphertext());
8177
}

0 commit comments

Comments
 (0)