Skip to content

Commit bf72702

Browse files
fix: Update user agent string to correctly reflect version (#141)
* fix: Update user agent string to correctly reflect version
1 parent fd6b20e commit bf72702

File tree

5 files changed

+41
-4
lines changed

5 files changed

+41
-4
lines changed

sdk1/pom.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,13 @@
272272
</repositories>
273273

274274
<build>
275+
<resources>
276+
<resource>
277+
<directory>src/main/resources</directory>
278+
<filtering>true</filtering>
279+
</resource>
280+
</resources>
281+
275282
<plugins>
276283
<plugin>
277284
<groupId>org.apache.maven.plugins</groupId>

sdk1/src/main/java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/providers/DirectKmsMaterialProvider.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import com.amazonaws.services.kms.model.GenerateDataKeyRequest;
3131
import com.amazonaws.services.kms.model.GenerateDataKeyResult;
3232
import com.amazonaws.util.StringUtils;
33-
import com.amazonaws.util.VersionInfoUtils;
3433

3534
import javax.crypto.SecretKey;
3635
import javax.crypto.spec.SecretKeySpec;
@@ -43,6 +42,7 @@
4342
import static com.amazonaws.services.dynamodbv2.datamodeling.encryption.materials.WrappedRawMaterials.CONTENT_KEY_ALGORITHM;
4443
import static com.amazonaws.services.dynamodbv2.datamodeling.encryption.materials.WrappedRawMaterials.ENVELOPE_KEY;
4544
import static com.amazonaws.services.dynamodbv2.datamodeling.encryption.materials.WrappedRawMaterials.KEY_WRAPPING_ALGORITHM;
45+
import static com.amazonaws.services.dynamodbv2.datamodeling.internal.Utils.loadVersion;
4646

4747
/**
4848
* Generates a unique data key for each record in DynamoDB and protects that key
@@ -53,9 +53,8 @@
5353
* @see <a href="http://docs.aws.amazon.com/kms/latest/developerguide/encrypt-context.html">KMS Encryption Context</a>
5454
*/
5555
public class DirectKmsMaterialProvider implements EncryptionMaterialsProvider {
56-
private static final String VERSION_STRING = "1.0";
57-
private static final String USER_AGENT = DirectKmsMaterialProvider.class.getName()
58-
+ "/" + VERSION_STRING + "/" + VersionInfoUtils.getVersion();
56+
static final String USER_AGENT_PREFIX = "DynamodbEncryptionSdkJava/";
57+
private static final String USER_AGENT = USER_AGENT_PREFIX + loadVersion();
5958
private static final String COVERED_ATTR_CTX_KEY = "aws-kms-ec-attr";
6059
private static final String SIGNING_KEY_ALGORITHM = "amzn-ddb-sig-alg";
6160
private static final String TABLE_NAME_EC_KEY = "*aws-kms-table*";

sdk1/src/main/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/Utils.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414
*/
1515
package com.amazonaws.services.dynamodbv2.datamodeling.internal;
1616

17+
import java.io.IOException;
1718
import java.security.SecureRandom;
19+
import java.util.Properties;
1820

1921
public class Utils {
2022
private static final ThreadLocal<SecureRandom> RND = new ThreadLocal<SecureRandom>() {
@@ -47,4 +49,18 @@ public static <V> V checkNotNull(final V ref, final String errMsg) {
4749
return ref;
4850
}
4951
}
52+
53+
/*
54+
* Loads the version of the library
55+
*/
56+
public static String loadVersion() {
57+
try {
58+
final Properties properties = new Properties();
59+
properties.load(ClassLoader.getSystemResourceAsStream("project.properties"));
60+
return properties.getProperty("version");
61+
} catch (final IOException ex) {
62+
return "unknown";
63+
}
64+
}
65+
5066
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
version=${project.version}

sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/providers/DirectKmsMaterialProviderTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
*/
1313
package com.amazonaws.services.dynamodbv2.datamodeling.encryption.providers;
1414

15+
import com.amazonaws.RequestClientOptions;
1516
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException;
1617
import com.amazonaws.services.dynamodbv2.datamodeling.encryption.EncryptionContext;
1718
import com.amazonaws.services.dynamodbv2.datamodeling.encryption.materials.DecryptionMaterials;
@@ -337,6 +338,19 @@ public GenerateDataKeyResult generateDataKey(GenerateDataKeyRequest r) {
337338
assertTrue(gdkCalled.get());
338339
}
339340

341+
@Test
342+
public void userAgentIsAdded() {
343+
AWSKMS kmsSpy = new FakeKMS() {
344+
@Override
345+
public GenerateDataKeyResult generateDataKey(GenerateDataKeyRequest r) {
346+
assertTrue(r.getRequestClientOptions().getClientMarker(RequestClientOptions.Marker.USER_AGENT)
347+
.contains(DirectKmsMaterialProvider.USER_AGENT_PREFIX));
348+
return super.generateDataKey(r);
349+
}
350+
};
351+
new DirectKmsMaterialProvider(kmsSpy, keyId).getEncryptionMaterials(ctx);
352+
}
353+
340354
private static class ExtendedKmsMaterialProvider extends DirectKmsMaterialProvider {
341355
private final String encryptionKeyIdAttributeName;
342356

0 commit comments

Comments
 (0)