diff --git a/eng/versioning/external_dependencies.txt b/eng/versioning/external_dependencies.txt index 8bb071c8802d..0917ab9ccfcb 100644 --- a/eng/versioning/external_dependencies.txt +++ b/eng/versioning/external_dependencies.txt @@ -211,4 +211,4 @@ media_com.microsoft.azure:adal4j;1.2.0 servicebus_com.microsoft.azure:azure-client-authentication;1.6.7 # sdk\storage\azure-storage-blob-cryptography\pom.xml -storage_com.microsoft.azure:azure-storage;8.4.0 \ No newline at end of file +storage_com.microsoft.azure:azure-storage;8.4.0 diff --git a/eng/versioning/version_client_java_files.txt b/eng/versioning/version_client_java_files.txt index b59b8ee005c9..9f2721aa11ba 100644 --- a/eng/versioning/version_client_java_files.txt +++ b/eng/versioning/version_client_java_files.txt @@ -4,12 +4,3 @@ # The file format here should be the relative path from the root of the azure-sdk-for-java sdk/core/azure-core-amqp/src/main/java/com/azure/core/amqp/implementation/ClientConstants.java -sdk/keyvault/azure-security-keyvault-certificates/src/main/java/com/azure/security/keyvault/certificates/AzureKeyVaultConfiguration.java -sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/implementation/AzureKeyVaultConfiguration.java -sdk/keyvault/azure-security-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/AzureKeyVaultConfiguration.java -sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/implementation/util/BuilderHelper.java -sdk/storage/azure-storage-blob-cryptography/src/main/java/com/azure/storage/blob/specialized/cryptography/BlobCryptographyConfiguration.java -sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/implementation/util/BuilderHelper.java -sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/FileConfiguration.java -sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/util/BuilderHelper.java -sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/QueueConfiguration.java diff --git a/sdk/appconfiguration/azure-data-appconfiguration/src/main/java/com/azure/data/appconfiguration/ConfigurationClient.java b/sdk/appconfiguration/azure-data-appconfiguration/src/main/java/com/azure/data/appconfiguration/ConfigurationClient.java index d3a3a8b58bbf..cc68fd2e2aa2 100644 --- a/sdk/appconfiguration/azure-data-appconfiguration/src/main/java/com/azure/data/appconfiguration/ConfigurationClient.java +++ b/sdk/appconfiguration/azure-data-appconfiguration/src/main/java/com/azure/data/appconfiguration/ConfigurationClient.java @@ -334,7 +334,7 @@ public ConfigurationSetting setReadOnly(String key, String label, boolean isRead * *

Set the setting to read-only with the key-label "prodDBConnection"-"westUS".

* - * {@codesnippet com.azure.data.applicationconfig.configurationclient.setReadOnlyWithResponse#ConfigurationSetting-boolean-Context} + * {@codesnippet com.azure.data.applicationconfig.configurationclient.setReadOnlyWithResponse#ConfigurationSetting-Boolean-Context} * *

Clear read-only of the setting with the key-label "prodDBConnection"-"westUS".

* diff --git a/sdk/appconfiguration/azure-data-appconfiguration/src/main/java/com/azure/data/appconfiguration/ConfigurationClientBuilder.java b/sdk/appconfiguration/azure-data-appconfiguration/src/main/java/com/azure/data/appconfiguration/ConfigurationClientBuilder.java index df4d670d247e..d4f2533c0a85 100644 --- a/sdk/appconfiguration/azure-data-appconfiguration/src/main/java/com/azure/data/appconfiguration/ConfigurationClientBuilder.java +++ b/sdk/appconfiguration/azure-data-appconfiguration/src/main/java/com/azure/data/appconfiguration/ConfigurationClientBuilder.java @@ -76,16 +76,16 @@ public final class ConfigurationClientBuilder { private static final String CONTENT_TYPE_HEADER_VALUE = "application/json"; private static final String ACCEPT_HEADER = "Accept"; private static final String ACCEPT_HEADER_VALUE = "application/vnd.microsoft.azconfig.kv+json"; + // This is properties file's name. private static final String APP_CONFIG_PROPERTIES = "azure-appconfig.properties"; - private static final String NAME = "name"; - private static final String VERSION = "version"; + private static final String SDK_NAME = "name"; + private static final String SDK_VERSION = "version"; private static final RetryPolicy DEFAULT_RETRY_POLICY = new RetryPolicy("retry-after-ms", ChronoUnit.MILLIS); private final ClientLogger logger = new ClientLogger(ConfigurationClientBuilder.class); private final List policies; private final HttpHeaders headers; - private final String clientName; - private final String clientVersion; + private final Map properties; private ConfigurationClientCredentials credential; private TokenCredential tokenCredential; @@ -105,9 +105,7 @@ public ConfigurationClientBuilder() { policies = new ArrayList<>(); httpLogOptions = new HttpLogOptions(); - Map properties = CoreUtils.getProperties(APP_CONFIG_PROPERTIES); - clientName = properties.getOrDefault(NAME, "UnknownName"); - clientVersion = properties.getOrDefault(VERSION, "UnknownVersion"); + properties = CoreUtils.getProperties(APP_CONFIG_PROPERTIES); headers = new HttpHeaders() .put(ECHO_REQUEST_ID_HEADER, "true") @@ -175,6 +173,9 @@ public ConfigurationAsyncClient buildAsyncClient() { // Closest to API goes first, closest to wire goes last. final List policies = new ArrayList<>(); + String clientName = properties.getOrDefault(SDK_NAME, "UnknownName"); + String clientVersion = properties.getOrDefault(SDK_VERSION, "UnknownVersion"); + policies.add(new UserAgentPolicy(httpLogOptions.getApplicationId(), clientName, clientVersion, buildConfiguration)); policies.add(new RequestIdPolicy()); diff --git a/sdk/keyvault/azure-security-keyvault-certificates/src/main/java/com/azure/security/keyvault/certificates/AzureKeyVaultConfiguration.java b/sdk/keyvault/azure-security-keyvault-certificates/src/main/java/com/azure/security/keyvault/certificates/AzureKeyVaultConfiguration.java deleted file mode 100644 index 05abc2d279a5..000000000000 --- a/sdk/keyvault/azure-security-keyvault-certificates/src/main/java/com/azure/security/keyvault/certificates/AzureKeyVaultConfiguration.java +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.security.keyvault.certificates; - -class AzureKeyVaultConfiguration { - //TODO: Eventually remove these hardcoded strings with https://github.com/Azure/azure-sdk-for-java/issues/3141 - static final String SDK_NAME = "Azure-Keyvault"; - // {x-version-update-start;com.azure:azure-security-keyvault-certificates;current} - static final String SDK_VERSION = "4.0.0-beta.7"; - // {x-version-update-end} -} diff --git a/sdk/keyvault/azure-security-keyvault-certificates/src/main/java/com/azure/security/keyvault/certificates/CertificateClientBuilder.java b/sdk/keyvault/azure-security-keyvault-certificates/src/main/java/com/azure/security/keyvault/certificates/CertificateClientBuilder.java index 8fbc0583e74e..0c349784b1d2 100644 --- a/sdk/keyvault/azure-security-keyvault-certificates/src/main/java/com/azure/security/keyvault/certificates/CertificateClientBuilder.java +++ b/sdk/keyvault/azure-security-keyvault-certificates/src/main/java/com/azure/security/keyvault/certificates/CertificateClientBuilder.java @@ -24,6 +24,7 @@ import java.net.URL; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.Objects; /** @@ -57,8 +58,12 @@ @ServiceClientBuilder(serviceClients = {CertificateClient.class, CertificateAsyncClient.class}) public final class CertificateClientBuilder { private final ClientLogger logger = new ClientLogger(CertificateClientBuilder.class); - + // This is properties file's name. + private static final String AZURE_KEY_VAULT_CERTIFICATES_PROPERTIES = "azure-key-vault-certificates.properties"; + private static final String SDK_NAME = "name"; + private static final String SDK_VERSION = "version"; private final List policies; + private final Map properties; private TokenCredential credential; private HttpPipeline pipeline; private URL vaultUrl; @@ -75,6 +80,7 @@ public CertificateClientBuilder() { retryPolicy = new RetryPolicy(); httpLogOptions = new HttpLogOptions(); policies = new ArrayList<>(); + properties = CoreUtils.getProperties(AZURE_KEY_VAULT_CERTIFICATES_PROPERTIES); } /** @@ -110,11 +116,13 @@ public CertificateClient buildClient() { * {@link CertificateClientBuilder#vaultUrl(String)} have not been set. */ public CertificateAsyncClient buildAsyncClient() { - Configuration buildConfiguration = (configuration == null) ? Configuration.getGlobalConfiguration().clone() : configuration; + Configuration buildConfiguration = (configuration != null) ? configuration + : Configuration.getGlobalConfiguration().clone(); URL buildEndpoint = getBuildEndpoint(buildConfiguration); if (buildEndpoint == null) { - throw logger.logExceptionAsError(new IllegalStateException(KeyVaultErrorCodeStrings.getErrorString(KeyVaultErrorCodeStrings.VAULT_END_POINT_REQUIRED))); + throw logger.logExceptionAsError(new IllegalStateException( + KeyVaultErrorCodeStrings.getErrorString(KeyVaultErrorCodeStrings.VAULT_END_POINT_REQUIRED))); } CertificateServiceVersion serviceVersion = version != null ? version : CertificateServiceVersion.getLatest(); @@ -123,12 +131,18 @@ public CertificateAsyncClient buildAsyncClient() { } if (credential == null) { - throw logger.logExceptionAsError(new IllegalStateException(KeyVaultErrorCodeStrings.getErrorString(KeyVaultErrorCodeStrings.CREDENTIALS_REQUIRED))); + throw logger.logExceptionAsError(new IllegalStateException( + KeyVaultErrorCodeStrings.getErrorString(KeyVaultErrorCodeStrings.CREDENTIALS_REQUIRED))); } // Closest to API goes first, closest to wire goes last. final List policies = new ArrayList<>(); - policies.add(new UserAgentPolicy(httpLogOptions.getApplicationId(), AzureKeyVaultConfiguration.SDK_NAME, AzureKeyVaultConfiguration.SDK_VERSION, buildConfiguration)); + + String clientName = properties.getOrDefault(SDK_NAME, "UnknownName"); + String clientVersion = properties.getOrDefault(SDK_VERSION, "UnknownVersion"); + policies.add(new UserAgentPolicy(httpLogOptions.getApplicationId(), clientName, clientVersion, + buildConfiguration)); + HttpPolicyProviders.addBeforeRetryPolicies(policies); policies.add(retryPolicy); policies.add(new KeyVaultCredentialPolicy(credential)); diff --git a/sdk/keyvault/azure-security-keyvault-certificates/src/main/resources/azure-key-vault-certificates.properties b/sdk/keyvault/azure-security-keyvault-certificates/src/main/resources/azure-key-vault-certificates.properties new file mode 100644 index 000000000000..ca812989b4f2 --- /dev/null +++ b/sdk/keyvault/azure-security-keyvault-certificates/src/main/resources/azure-key-vault-certificates.properties @@ -0,0 +1,2 @@ +name=${project.artifactId} +version=${project.version} diff --git a/sdk/keyvault/azure-security-keyvault-certificates/src/main/resources/kvErrorStrings.properties b/sdk/keyvault/azure-security-keyvault-certificates/src/main/resources/kvErrorStrings.properties index ffced4746fc3..df9cd43cfcc1 100644 --- a/sdk/keyvault/azure-security-keyvault-certificates/src/main/resources/kvErrorStrings.properties +++ b/sdk/keyvault/azure-security-keyvault-certificates/src/main/resources/kvErrorStrings.properties @@ -1,2 +1,3 @@ credentials_required=Azure Key Vault credentials are required. vault_endpoint_required=Azure Key Vault endpoint url is required. + diff --git a/sdk/keyvault/azure-security-keyvault-certificates/src/test/java/com/azure/security/keyvault/certificates/CertificateClientTestBase.java b/sdk/keyvault/azure-security-keyvault-certificates/src/test/java/com/azure/security/keyvault/certificates/CertificateClientTestBase.java index f7d2d5be365e..f7003dbf352e 100644 --- a/sdk/keyvault/azure-security-keyvault-certificates/src/test/java/com/azure/security/keyvault/certificates/CertificateClientTestBase.java +++ b/sdk/keyvault/azure-security-keyvault-certificates/src/test/java/com/azure/security/keyvault/certificates/CertificateClientTestBase.java @@ -57,6 +57,8 @@ import static org.junit.jupiter.api.Assertions.fail; public abstract class CertificateClientTestBase extends TestBase { + private static final String SDK_NAME = "client_name"; + private static final String SDK_VERSION = "client_version"; @Override protected String getTestName() { @@ -80,7 +82,7 @@ T clientSetup(Function clientBuilder) { HttpClient httpClient; // Closest to API goes first, closest to wire goes last. final List policies = new ArrayList<>(); - policies.add(new UserAgentPolicy(AzureKeyVaultConfiguration.SDK_NAME, AzureKeyVaultConfiguration.SDK_VERSION, + policies.add(new UserAgentPolicy(SDK_NAME, SDK_VERSION, Configuration.getGlobalConfiguration().clone(), CertificateServiceVersion.getLatest())); HttpPolicyProviders.addBeforeRetryPolicies(policies); policies.add(new RetryPolicy()); diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/KeyClientBuilder.java b/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/KeyClientBuilder.java index 986fe3c7d0c3..fd9a05b45977 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/KeyClientBuilder.java +++ b/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/KeyClientBuilder.java @@ -18,13 +18,13 @@ import com.azure.core.http.policy.UserAgentPolicy; import com.azure.core.annotation.ServiceClientBuilder; import com.azure.core.util.logging.ClientLogger; -import com.azure.security.keyvault.keys.implementation.AzureKeyVaultConfiguration; import com.azure.security.keyvault.keys.implementation.KeyVaultCredentialPolicy; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.Objects; /** @@ -60,8 +60,12 @@ @ServiceClientBuilder(serviceClients = KeyClient.class) public final class KeyClientBuilder { private final ClientLogger logger = new ClientLogger(KeyClientBuilder.class); - + // This is properties file's name. + private static final String AZURE_KEY_VAULT_KEYS = "azure-key-vault-keys.properties"; + private static final String SDK_NAME = "name"; + private static final String SDK_VERSION = "version"; private final List policies; + private final Map properties; private TokenCredential credential; private HttpPipeline pipeline; private URL vaultUrl; @@ -78,6 +82,7 @@ public KeyClientBuilder() { retryPolicy = new RetryPolicy(); httpLogOptions = new HttpLogOptions(); policies = new ArrayList<>(); + properties = CoreUtils.getProperties(AZURE_KEY_VAULT_KEYS); } /** @@ -136,7 +141,10 @@ public KeyAsyncClient buildAsyncClient() { // Closest to API goes first, closest to wire goes last. final List policies = new ArrayList<>(); - policies.add(new UserAgentPolicy(httpLogOptions.getApplicationId(), AzureKeyVaultConfiguration.SDK_NAME, AzureKeyVaultConfiguration.SDK_VERSION, + + String clientName = properties.getOrDefault(SDK_NAME, "UnknownName"); + String clientVersion = properties.getOrDefault(SDK_VERSION, "UnknownVersion"); + policies.add(new UserAgentPolicy(httpLogOptions.getApplicationId(), clientName, clientVersion, buildConfiguration)); HttpPolicyProviders.addBeforeRetryPolicies(policies); policies.add(retryPolicy); diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/cryptography/CryptographyClientBuilder.java b/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/cryptography/CryptographyClientBuilder.java index 5a76313f4fc8..09d3a75b6d28 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/cryptography/CryptographyClientBuilder.java +++ b/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/cryptography/CryptographyClientBuilder.java @@ -16,13 +16,14 @@ import com.azure.core.annotation.ServiceClientBuilder; import com.azure.core.http.policy.HttpPolicyProviders; import com.azure.core.util.Configuration; +import com.azure.core.util.CoreUtils; import com.azure.core.util.logging.ClientLogger; import com.azure.security.keyvault.keys.implementation.KeyVaultCredentialPolicy; -import com.azure.security.keyvault.keys.implementation.AzureKeyVaultConfiguration; import com.azure.security.keyvault.keys.models.JsonWebKey; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.Objects; /** @@ -63,7 +64,12 @@ @ServiceClientBuilder(serviceClients = CryptographyClient.class) public final class CryptographyClientBuilder { final List policies; + final Map properties; private final ClientLogger logger = new ClientLogger(CryptographyClientBuilder.class); + // This is properties file's name. + private static final String AZURE_KEY_VAULT_KEYS = "azure-key-vault-keys.properties"; + private static final String SDK_NAME = "name"; + private static final String SDK_VERSION = "version"; private TokenCredential credential; private HttpPipeline pipeline; private JsonWebKey jsonWebKey; @@ -81,6 +87,7 @@ public CryptographyClientBuilder() { retryPolicy = new RetryPolicy(); httpLogOptions = new HttpLogOptions(); policies = new ArrayList<>(); + properties = CoreUtils.getProperties(AZURE_KEY_VAULT_KEYS); } /** @@ -153,7 +160,10 @@ HttpPipeline setupPipeline() { // Closest to API goes first, closest to wire goes last. final List policies = new ArrayList<>(); - policies.add(new UserAgentPolicy(httpLogOptions.getApplicationId(), AzureKeyVaultConfiguration.SDK_NAME, AzureKeyVaultConfiguration.SDK_VERSION, + + String clientName = properties.getOrDefault(SDK_NAME, "UnknownName"); + String clientVersion = properties.getOrDefault(SDK_VERSION, "UnknownVersion"); + policies.add(new UserAgentPolicy(httpLogOptions.getApplicationId(), clientName, clientVersion, buildConfiguration)); HttpPolicyProviders.addBeforeRetryPolicies(policies); policies.add(retryPolicy); diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/implementation/AzureKeyVaultConfiguration.java b/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/implementation/AzureKeyVaultConfiguration.java deleted file mode 100644 index 46296bf3478b..000000000000 --- a/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/implementation/AzureKeyVaultConfiguration.java +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.security.keyvault.keys.implementation; - -public final class AzureKeyVaultConfiguration { - //TODO: Eventually remove these hardcoded strings with https://github.com/Azure/azure-sdk-for-java/issues/3141 - public static final String SDK_NAME = "Azure-Keyvault"; - // {x-version-update-start;com.azure:azure-security-keyvault-keys;current} - public static final String SDK_VERSION = "4.1.0-beta.1"; - // {x-version-update-end} -} diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/main/resources/azure-key-vault-keys.properties b/sdk/keyvault/azure-security-keyvault-keys/src/main/resources/azure-key-vault-keys.properties new file mode 100644 index 000000000000..ca812989b4f2 --- /dev/null +++ b/sdk/keyvault/azure-security-keyvault-keys/src/main/resources/azure-key-vault-keys.properties @@ -0,0 +1,2 @@ +name=${project.artifactId} +version=${project.version} diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyClientTestBase.java b/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyClientTestBase.java index 89d86b36d0d3..16bcf9b89b7c 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyClientTestBase.java +++ b/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyClientTestBase.java @@ -21,7 +21,6 @@ import com.azure.core.test.TestBase; import com.azure.core.util.Configuration; import com.azure.identity.DefaultAzureCredentialBuilder; -import com.azure.security.keyvault.keys.implementation.AzureKeyVaultConfiguration; import com.azure.security.keyvault.keys.models.CreateKeyOptions; import com.azure.security.keyvault.keys.models.KeyType; import com.azure.security.keyvault.keys.models.KeyVaultKey; @@ -47,6 +46,8 @@ public abstract class KeyClientTestBase extends TestBase { private static final String KEY_NAME = "javaKeyTemp"; private static final KeyType RSA_KEY_TYPE = KeyType.RSA; private static final KeyType EC_KEY_TYPE = KeyType.EC; + private static final String SDK_NAME = "client_name"; + private static final String SDK_VERSION = "client_version"; @Override protected String getTestName() { @@ -70,7 +71,7 @@ T clientSetup(Function clientBuilder) { HttpClient httpClient; // Closest to API goes first, closest to wire goes last. final List policies = new ArrayList<>(); - policies.add(new UserAgentPolicy(AzureKeyVaultConfiguration.SDK_NAME, AzureKeyVaultConfiguration.SDK_VERSION, Configuration.getGlobalConfiguration().clone(), KeyServiceVersion.getLatest())); + policies.add(new UserAgentPolicy(SDK_NAME, SDK_VERSION, Configuration.getGlobalConfiguration().clone(), KeyServiceVersion.getLatest())); HttpPolicyProviders.addBeforeRetryPolicies(policies); policies.add(new RetryPolicy()); if (credential != null) { diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyVaultKeysUserAgentPropertiesTest.java b/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyVaultKeysUserAgentPropertiesTest.java new file mode 100644 index 000000000000..b4c5c0c88f07 --- /dev/null +++ b/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyVaultKeysUserAgentPropertiesTest.java @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.security.keyvault.keys; + +import com.azure.core.util.CoreUtils; +import java.util.Map; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class KeyVaultKeysUserAgentPropertiesTest { + + @Test + public void testAzureConfiguration() { + Map properties = CoreUtils.getProperties("azure-key-vault-keys.properties"); + assertTrue(properties.get("name").matches("azure-security-keyvault-keys")); + assertTrue(properties.get("version").matches("(\\d)+.(\\d)+.(\\d)+([-a-zA-Z0-9.])*")); + } +} diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/cryptography/CryptographyClientTestBase.java b/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/cryptography/CryptographyClientTestBase.java index 7d7df1d6280e..31df034c7ffc 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/cryptography/CryptographyClientTestBase.java +++ b/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/cryptography/CryptographyClientTestBase.java @@ -20,7 +20,6 @@ import com.azure.core.test.TestBase; import com.azure.core.util.Configuration; import com.azure.identity.DefaultAzureCredentialBuilder; -import com.azure.security.keyvault.keys.implementation.AzureKeyVaultConfiguration; import org.junit.jupiter.api.Test; import java.math.BigInteger; @@ -45,6 +44,8 @@ public abstract class CryptographyClientTestBase extends TestBase { + private static final String SDK_NAME = "client_name"; + private static final String SDK_VERSION = "client_version"; @Override protected String getTestName() { @@ -77,7 +78,7 @@ T clientSetup(Function clientBuilder) { // Closest to API goes first, closest to wire goes last. final List policies = new ArrayList<>(); - policies.add(new UserAgentPolicy(AzureKeyVaultConfiguration.SDK_NAME, AzureKeyVaultConfiguration.SDK_VERSION, Configuration.getGlobalConfiguration().clone(), CryptographyServiceVersion.getLatest())); + policies.add(new UserAgentPolicy(SDK_NAME, SDK_VERSION, Configuration.getGlobalConfiguration().clone(), CryptographyServiceVersion.getLatest())); HttpPolicyProviders.addBeforeRetryPolicies(policies); policies.add(new RetryPolicy()); if (credential != null) { diff --git a/sdk/keyvault/azure-security-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/AzureKeyVaultConfiguration.java b/sdk/keyvault/azure-security-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/AzureKeyVaultConfiguration.java deleted file mode 100644 index c3ac3ff8fc93..000000000000 --- a/sdk/keyvault/azure-security-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/AzureKeyVaultConfiguration.java +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.security.keyvault.secrets; - -class AzureKeyVaultConfiguration { - //TODO: Eventually remove these hardcoded strings with https://github.com/Azure/azure-sdk-for-java/issues/3141 - static final String SDK_NAME = "Azure-Keyvault"; - // {x-version-update-start;com.azure:azure-security-keyvault-secrets;current} - static final String SDK_VERSION = "4.1.0-beta.1"; - // {x-version-update-end} -} diff --git a/sdk/keyvault/azure-security-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretClientBuilder.java b/sdk/keyvault/azure-security-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretClientBuilder.java index 2cc1c59a4a52..c790625ea190 100644 --- a/sdk/keyvault/azure-security-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretClientBuilder.java +++ b/sdk/keyvault/azure-security-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretClientBuilder.java @@ -24,6 +24,7 @@ import java.net.URL; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.Objects; /** @@ -58,8 +59,13 @@ @ServiceClientBuilder(serviceClients = SecretClient.class) public final class SecretClientBuilder { private final ClientLogger logger = new ClientLogger(SecretClientBuilder.class); + // This is properties file's name. + private static final String AZURE_KEY_VAULT_SECRETS = "azure-key-vault-secrets.properties"; + private static final String SDK_NAME = "name"; + private static final String SDK_VERSION = "version"; private final List policies; + final Map properties; private TokenCredential credential; private HttpPipeline pipeline; private URL vaultUrl; @@ -76,6 +82,7 @@ public SecretClientBuilder() { retryPolicy = new RetryPolicy(); httpLogOptions = new HttpLogOptions(); policies = new ArrayList<>(); + properties = CoreUtils.getProperties(AZURE_KEY_VAULT_SECRETS); } /** @@ -137,7 +144,10 @@ public SecretAsyncClient buildAsyncClient() { // Closest to API goes first, closest to wire goes last. final List policies = new ArrayList<>(); - policies.add(new UserAgentPolicy(httpLogOptions.getApplicationId(), AzureKeyVaultConfiguration.SDK_NAME, AzureKeyVaultConfiguration.SDK_VERSION, + + String clientName = properties.getOrDefault(SDK_NAME, "UnknownName"); + String clientVersion = properties.getOrDefault(SDK_VERSION, "UnknownVersion"); + policies.add(new UserAgentPolicy(httpLogOptions.getApplicationId(), clientName, clientVersion, buildConfiguration)); HttpPolicyProviders.addBeforeRetryPolicies(policies); policies.add(retryPolicy); diff --git a/sdk/keyvault/azure-security-keyvault-secrets/src/main/resources/azure-key-vault-secrets.properties b/sdk/keyvault/azure-security-keyvault-secrets/src/main/resources/azure-key-vault-secrets.properties new file mode 100644 index 000000000000..ca812989b4f2 --- /dev/null +++ b/sdk/keyvault/azure-security-keyvault-secrets/src/main/resources/azure-key-vault-secrets.properties @@ -0,0 +1,2 @@ +name=${project.artifactId} +version=${project.version} diff --git a/sdk/keyvault/azure-security-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/KeyVaultSecretsUserAgentPropertiesTest.java b/sdk/keyvault/azure-security-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/KeyVaultSecretsUserAgentPropertiesTest.java new file mode 100644 index 000000000000..95aaac5b8de1 --- /dev/null +++ b/sdk/keyvault/azure-security-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/KeyVaultSecretsUserAgentPropertiesTest.java @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.security.keyvault.secrets; + +import com.azure.core.util.CoreUtils; +import java.util.Map; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class KeyVaultSecretsUserAgentPropertiesTest { + + @Test + public void testAzureConfiguration() { + Map properties = CoreUtils.getProperties("azure-key-vault-secrets.properties"); + assertTrue(properties.get("name").matches("azure-security-keyvault-secrets")); + assertTrue(properties.get("version").matches("(\\d)+.(\\d)+.(\\d)+([-a-zA-Z0-9.])*")); + } +} diff --git a/sdk/keyvault/azure-security-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/SecretClientTestBase.java b/sdk/keyvault/azure-security-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/SecretClientTestBase.java index 7bc64e3579f2..1af14cd26fe1 100644 --- a/sdk/keyvault/azure-security-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/SecretClientTestBase.java +++ b/sdk/keyvault/azure-security-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/SecretClientTestBase.java @@ -45,6 +45,9 @@ public abstract class SecretClientTestBase extends TestBase { private static final String SECRET_NAME = "javaSecretTemp"; private static final String SECRET_VALUE = "Chocolate is hidden in the toothpaste cabinet"; + private static final String SDK_NAME = "client_name"; + private static final String SDK_VERSION = "client_version"; + @Override protected String getTestName() { return ""; @@ -63,7 +66,7 @@ T clientSetup(Function clientBuilder) { HttpClient httpClient; // Closest to API goes first, closest to wire goes last. final List policies = new ArrayList<>(); - policies.add(new UserAgentPolicy(AzureKeyVaultConfiguration.SDK_NAME, AzureKeyVaultConfiguration.SDK_VERSION, Configuration.getGlobalConfiguration().clone(), SecretServiceVersion.getLatest())); + policies.add(new UserAgentPolicy(SDK_NAME, SDK_VERSION, Configuration.getGlobalConfiguration().clone(), SecretServiceVersion.getLatest())); HttpPolicyProviders.addBeforeRetryPolicies(policies); policies.add(new RetryPolicy()); if (credential != null) { diff --git a/sdk/storage/azure-storage-blob-cryptography/src/main/java/com/azure/storage/blob/specialized/cryptography/BlobCryptographyConfiguration.java b/sdk/storage/azure-storage-blob-cryptography/src/main/java/com/azure/storage/blob/specialized/cryptography/BlobCryptographyConfiguration.java deleted file mode 100644 index 604222e54bcb..000000000000 --- a/sdk/storage/azure-storage-blob-cryptography/src/main/java/com/azure/storage/blob/specialized/cryptography/BlobCryptographyConfiguration.java +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -package com.azure.storage.blob.specialized.cryptography; - -class BlobCryptographyConfiguration { - static final String NAME = "azure-storage-blob-cryptography"; - // {x-version-update-start;com.azure:azure-storage-blob-cryptography;current} - static final String VERSION = "12.2.0-beta.1"; - // {x-version-update-end} -} diff --git a/sdk/storage/azure-storage-blob-cryptography/src/main/java/com/azure/storage/blob/specialized/cryptography/CryptographyConstants.java b/sdk/storage/azure-storage-blob-cryptography/src/main/java/com/azure/storage/blob/specialized/cryptography/CryptographyConstants.java index b6dd0dce1187..bca0671b6b8f 100644 --- a/sdk/storage/azure-storage-blob-cryptography/src/main/java/com/azure/storage/blob/specialized/cryptography/CryptographyConstants.java +++ b/sdk/storage/azure-storage-blob-cryptography/src/main/java/com/azure/storage/blob/specialized/cryptography/CryptographyConstants.java @@ -3,6 +3,8 @@ package com.azure.storage.blob.specialized.cryptography; +import com.azure.core.util.CoreUtils; +import java.util.Map; final class CryptographyConstants { static final String ENCRYPTION_PROTOCOL_V1 = "1.0"; @@ -15,7 +17,9 @@ final class CryptographyConstants { static final String AES = "AES"; - static final String AGENT_METADATA_VALUE = "JavaTrack2" + BlobCryptographyConfiguration.VERSION; + static final Map USER_AGENT_PROPERTIES = CoreUtils.getProperties("azure-storage-blob.properties"); + + static final String AGENT_METADATA_VALUE = "JavaTrack2" + USER_AGENT_PROPERTIES.get("version"); static final String ENCRYPTION_DATA_KEY = "encryptiondata"; @@ -34,6 +38,8 @@ final class CryptographyConstants { static final String DECRYPT_UNENCRYPTED_BLOB = "Encryption client is being used but the blob metadata indicates " + "that it is not encrypted."; + private CryptographyConstants() { } + } diff --git a/sdk/storage/azure-storage-blob-cryptography/src/main/java/com/azure/storage/blob/specialized/cryptography/EncryptedBlobClientBuilder.java b/sdk/storage/azure-storage-blob-cryptography/src/main/java/com/azure/storage/blob/specialized/cryptography/EncryptedBlobClientBuilder.java index ddcbf18452df..6fe06546aade 100644 --- a/sdk/storage/azure-storage-blob-cryptography/src/main/java/com/azure/storage/blob/specialized/cryptography/EncryptedBlobClientBuilder.java +++ b/sdk/storage/azure-storage-blob-cryptography/src/main/java/com/azure/storage/blob/specialized/cryptography/EncryptedBlobClientBuilder.java @@ -45,6 +45,8 @@ import java.util.List; import java.util.Objects; +import static com.azure.storage.blob.specialized.cryptography.CryptographyConstants.USER_AGENT_PROPERTIES; + /** * This class provides a fluent builder API to help aid the configuration and instantiation of Storage Blob clients. * @@ -73,6 +75,8 @@ @ServiceClientBuilder(serviceClients = {EncryptedBlobAsyncClient.class, EncryptedBlobClient.class}) public final class EncryptedBlobClientBuilder { private final ClientLogger logger = new ClientLogger(EncryptedBlobClientBuilder.class); + private static final String SDK_NAME = "name"; + private static final String SDK_VERSION = "version"; private String endpoint; private String accountName; @@ -151,15 +155,15 @@ private HttpPipeline getHttpPipeline() { return httpPipeline; } - String userAgentName = BlobCryptographyConfiguration.NAME; - String userAgentVersion = BlobCryptographyConfiguration.VERSION; Configuration userAgentConfiguration = (configuration == null) ? Configuration.NONE : configuration; // Closest to API goes first, closest to wire goes last. List policies = new ArrayList<>(); policies.add(new BlobDecryptionPolicy(keyWrapper, keyResolver)); - policies.add(new UserAgentPolicy(logOptions.getApplicationId(), userAgentName, userAgentVersion, + String clientName = USER_AGENT_PROPERTIES.getOrDefault(SDK_NAME, "UnknownName"); + String clientVersion = USER_AGENT_PROPERTIES.getOrDefault(SDK_VERSION, "UnknownVersion"); + policies.add(new UserAgentPolicy(logOptions.getApplicationId(), clientName, clientVersion, userAgentConfiguration)); policies.add(new RequestIdPolicy()); policies.add(new AddDatePolicy()); diff --git a/sdk/storage/azure-storage-blob-cryptography/src/main/resources/azure-storage-blob-cryptography.properties b/sdk/storage/azure-storage-blob-cryptography/src/main/resources/azure-storage-blob-cryptography.properties new file mode 100644 index 000000000000..ca812989b4f2 --- /dev/null +++ b/sdk/storage/azure-storage-blob-cryptography/src/main/resources/azure-storage-blob-cryptography.properties @@ -0,0 +1,2 @@ +name=${project.artifactId} +version=${project.version} diff --git a/sdk/storage/azure-storage-blob-cryptography/src/test/java/com/azure/storage/blob/specialized/cryptography/BlobCryptographyUserAgentPropertiesTest.groovy b/sdk/storage/azure-storage-blob-cryptography/src/test/java/com/azure/storage/blob/specialized/cryptography/BlobCryptographyUserAgentPropertiesTest.groovy new file mode 100644 index 000000000000..eb3a60059ac9 --- /dev/null +++ b/sdk/storage/azure-storage-blob-cryptography/src/test/java/com/azure/storage/blob/specialized/cryptography/BlobCryptographyUserAgentPropertiesTest.groovy @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.storage.blob.specialized.cryptography + +import com.azure.core.util.CoreUtils +import spock.lang.Specification + +class BlobCryptographyUserAgentPropertiesTest extends Specification { + + def "User agent properties not null"() { + given: + Map properties = CoreUtils.getProperties("azure-storage-blob-cryptography.properties") + expect: + properties.get("name") == "azure-storage-blob-cryptography" + properties.get("version").matches("(\\d)+.(\\d)+.(\\d)+([-a-zA-Z0-9.])*") + } +} diff --git a/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/implementation/util/BuilderHelper.java b/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/implementation/util/BuilderHelper.java index f1abf2207f8c..31bcf0dc84ec 100644 --- a/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/implementation/util/BuilderHelper.java +++ b/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/implementation/util/BuilderHelper.java @@ -16,6 +16,7 @@ import com.azure.core.http.policy.RequestIdPolicy; import com.azure.core.http.policy.UserAgentPolicy; import com.azure.core.util.Configuration; +import com.azure.core.util.CoreUtils; import com.azure.core.util.logging.ClientLogger; import com.azure.storage.blob.BlobUrlParts; import com.azure.storage.common.StorageSharedKeyCredential; @@ -30,6 +31,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * This class provides helper methods for common builder patterns. @@ -37,10 +39,10 @@ * RESERVED FOR INTERNAL USE. */ public final class BuilderHelper { - private static final String DEFAULT_USER_AGENT_NAME = "azure-storage-blob"; - // {x-version-update-start;com.azure:azure-storage-blob;current} - private static final String DEFAULT_USER_AGENT_VERSION = "12.2.0-beta.1"; - // {x-version-update-end} + private static final Map PROPERTIES = + CoreUtils.getProperties("azure-storage-blob.properties"); + private static final String SDK_NAME = "name"; + private static final String SDK_VERSION = "version"; /** * Constructs a {@link HttpPipeline} from values passed from a builder. @@ -153,8 +155,10 @@ public static void httpsValidation(Object objectToCheck, String objectName, Stri private static UserAgentPolicy getUserAgentPolicy(Configuration configuration) { configuration = (configuration == null) ? Configuration.NONE : configuration; - return new UserAgentPolicy(getDefaultHttpLogOptions().getApplicationId(), DEFAULT_USER_AGENT_NAME, - DEFAULT_USER_AGENT_VERSION, configuration); + String clientName = PROPERTIES.getOrDefault(SDK_NAME, "UnknownName"); + String clientVersion = PROPERTIES.getOrDefault(SDK_VERSION, "UnknownVersion"); + return new UserAgentPolicy(getDefaultHttpLogOptions().getApplicationId(), clientName, clientVersion, + configuration); } /* diff --git a/sdk/storage/azure-storage-blob/src/main/resources/azure-storage-blob.properties b/sdk/storage/azure-storage-blob/src/main/resources/azure-storage-blob.properties new file mode 100644 index 000000000000..ca812989b4f2 --- /dev/null +++ b/sdk/storage/azure-storage-blob/src/main/resources/azure-storage-blob.properties @@ -0,0 +1,2 @@ +name=${project.artifactId} +version=${project.version} diff --git a/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/BlobUserAgentPropertiesTest.groovy b/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/BlobUserAgentPropertiesTest.groovy new file mode 100644 index 000000000000..104ffe20273a --- /dev/null +++ b/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/BlobUserAgentPropertiesTest.groovy @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.storage.blob + +import com.azure.core.util.CoreUtils +import spock.lang.Specification + +class BlobUserAgentPropertiesTest extends Specification { + + def "User agent properties not null"() { + given: + Map properties = CoreUtils.getProperties("azure-storage-blob.properties") + expect: + properties.get("name") == "azure-storage-blob" + properties.get("version").matches("(\\d)+.(\\d)+.(\\d)+([-a-zA-Z0-9.])*") + } +} diff --git a/sdk/storage/azure-storage-file-datalake/src/main/java/com/azure/storage/file/datalake/implementation/util/BuilderHelper.java b/sdk/storage/azure-storage-file-datalake/src/main/java/com/azure/storage/file/datalake/implementation/util/BuilderHelper.java index a335d56e47ca..f3dba9d1914b 100644 --- a/sdk/storage/azure-storage-file-datalake/src/main/java/com/azure/storage/file/datalake/implementation/util/BuilderHelper.java +++ b/sdk/storage/azure-storage-file-datalake/src/main/java/com/azure/storage/file/datalake/implementation/util/BuilderHelper.java @@ -16,6 +16,7 @@ import com.azure.core.http.policy.RequestIdPolicy; import com.azure.core.http.policy.UserAgentPolicy; import com.azure.core.util.Configuration; +import com.azure.core.util.CoreUtils; import com.azure.core.util.logging.ClientLogger; import com.azure.storage.blob.BlobUrlParts; import com.azure.storage.blob.implementation.util.ModelHelper; @@ -31,6 +32,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * This class provides helper methods for common builder patterns. @@ -38,10 +40,10 @@ * RESERVED FOR INTERNAL USE. */ public final class BuilderHelper { - private static final String DEFAULT_USER_AGENT_NAME = "azure-storage-file-datalake"; - // {x-version-update-start;com.azure:azure-storage-file-datalake;current} - private static final String DEFAULT_USER_AGENT_VERSION = "12.0.0-preview.7"; - // {x-version-update-end} + private static final Map PROPERTIES = + CoreUtils.getProperties("azure-storage-file-datalake.properties"); + private static final String SDK_NAME = "name"; + private static final String SDK_VERSION = "version"; /** * Constructs a {@link HttpPipeline} from values passed from a builder. @@ -141,8 +143,10 @@ public static String getEndpoint(BlobUrlParts parts) { private static UserAgentPolicy getUserAgentPolicy(Configuration configuration) { configuration = (configuration == null) ? Configuration.NONE : configuration; - return new UserAgentPolicy(getDefaultHttpLogOptions().getApplicationId(), - DEFAULT_USER_AGENT_NAME, DEFAULT_USER_AGENT_VERSION, configuration); + String clientName = PROPERTIES.getOrDefault(SDK_NAME, "UnknownName"); + String clientVersion = PROPERTIES.getOrDefault(SDK_VERSION, "UnknownVersion"); + return new UserAgentPolicy(getDefaultHttpLogOptions().getApplicationId(), clientName, clientVersion, + configuration); } /* diff --git a/sdk/storage/azure-storage-file-datalake/src/main/resources/azure-storage-file-datalake.properties b/sdk/storage/azure-storage-file-datalake/src/main/resources/azure-storage-file-datalake.properties new file mode 100644 index 000000000000..ca812989b4f2 --- /dev/null +++ b/sdk/storage/azure-storage-file-datalake/src/main/resources/azure-storage-file-datalake.properties @@ -0,0 +1,2 @@ +name=${project.artifactId} +version=${project.version} diff --git a/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/FileConfiguration.java b/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/FileConfiguration.java deleted file mode 100644 index 8946b7a2df0b..000000000000 --- a/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/FileConfiguration.java +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.storage.file.share; - -/* - * Gets the SDK information for this library component. - */ -class FileConfiguration { - //TODO: Eventually remove these hardcoded strings with https://github.com/Azure/azure-sdk-for-java/issues/3141 - static final String NAME = "azure-storage-file-share"; - // {x-version-update-start;com.azure:azure-storage-file-share;current} - static final String VERSION = "12.1.0-beta.1"; - // {x-version-update-end} -} diff --git a/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/implementation/util/BuilderHelper.java b/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/implementation/util/BuilderHelper.java index 9f1f6ef4526d..64c5c9b393c0 100644 --- a/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/implementation/util/BuilderHelper.java +++ b/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/implementation/util/BuilderHelper.java @@ -24,6 +24,7 @@ import java.net.URL; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.function.Supplier; import java.util.regex.Pattern; @@ -31,10 +32,10 @@ * This class provides helper methods for common builder patterns. */ public final class BuilderHelper { - private static final String DEFAULT_USER_AGENT_NAME = "azure-storage-file-share"; - // {x-version-update-start;com.azure:azure-storage-file-share;current} - private static final String DEFAULT_USER_AGENT_VERSION = "12.1.0-beta.1"; - // {x-version-update-end} + private static final Map PROPERTIES = + CoreUtils.getProperties("azure-storage-file-share.properties"); + private static final String SDK_NAME = "name"; + private static final String SDK_VERSION = "version"; private static final Pattern IP_URL_PATTERN = Pattern .compile("(?:\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})|(?:localhost)"); @@ -94,8 +95,10 @@ public static HttpPipeline buildPipeline(Supplier credential private static UserAgentPolicy getUserAgentPolicy(Configuration configuration) { configuration = (configuration == null) ? Configuration.NONE : configuration; - return new UserAgentPolicy(getDefaultHttpLogOptions().getApplicationId(), - DEFAULT_USER_AGENT_NAME, DEFAULT_USER_AGENT_VERSION, configuration); + String clientName = PROPERTIES.getOrDefault(SDK_NAME, "UnknownName"); + String clientVersion = PROPERTIES.getOrDefault(SDK_VERSION, "UnknownVersion"); + return new UserAgentPolicy(getDefaultHttpLogOptions().getApplicationId(), clientName, clientVersion, + configuration); } /** diff --git a/sdk/storage/azure-storage-file-share/src/main/resources/azure-storage-file-share.properties b/sdk/storage/azure-storage-file-share/src/main/resources/azure-storage-file-share.properties new file mode 100644 index 000000000000..ca812989b4f2 --- /dev/null +++ b/sdk/storage/azure-storage-file-share/src/main/resources/azure-storage-file-share.properties @@ -0,0 +1,2 @@ +name=${project.artifactId} +version=${project.version} diff --git a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileShareUserAgentPropertiesTest.groovy b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileShareUserAgentPropertiesTest.groovy new file mode 100644 index 000000000000..6630282aa294 --- /dev/null +++ b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileShareUserAgentPropertiesTest.groovy @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.storage.file.share + +import com.azure.core.util.CoreUtils +import spock.lang.Specification + +class FileShareUserAgentPropertiesTest extends Specification { + + def "User agent properties not null"() { + given: + Map properties = CoreUtils.getProperties("azure-storage-file-share.properties") + expect: + properties.get("name") == "azure-storage-file-share" + properties.get("version").matches("(\\d)+.(\\d)+.(\\d)+([-a-zA-Z0-9.])*") + } +} diff --git a/sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/QueueConfiguration.java b/sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/QueueConfiguration.java deleted file mode 100644 index e2f678e6a109..000000000000 --- a/sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/QueueConfiguration.java +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.storage.queue; - -/* - * Gets the SDK information for this library component. - */ -class QueueConfiguration { - //TODO: Eventually remove these hardcoded strings with https://github.com/Azure/azure-sdk-for-java/issues/3141 - static final String NAME = "azure-storage-queue"; - // {x-version-update-start;com.azure:azure-storage-queue;current} - static final String VERSION = "12.2.0-beta.1"; - // {x-version-update-end} -} diff --git a/sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/util/BuilderHelper.java b/sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/util/BuilderHelper.java index 1774905f8c67..ec4e615d074c 100644 --- a/sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/util/BuilderHelper.java +++ b/sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/util/BuilderHelper.java @@ -19,7 +19,6 @@ import com.azure.core.util.CoreUtils; import com.azure.core.util.logging.ClientLogger; import com.azure.storage.common.StorageSharedKeyCredential; -import com.azure.storage.common.sas.CommonSasQueryParameters; import com.azure.storage.common.implementation.Constants; import com.azure.storage.common.implementation.StorageImplUtils; import com.azure.storage.common.implementation.credentials.SasTokenCredential; @@ -29,11 +28,13 @@ import com.azure.storage.common.policy.ResponseValidationPolicyBuilder; import com.azure.storage.common.policy.ScrubEtagPolicy; import com.azure.storage.common.policy.StorageSharedKeyCredentialPolicy; +import com.azure.storage.common.sas.CommonSasQueryParameters; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.regex.Pattern; @@ -41,10 +42,10 @@ * This class provides helper methods for common builder patterns. */ public final class BuilderHelper { - private static final String DEFAULT_USER_AGENT_NAME = "azure-storage-queue"; - // {x-version-update-start;com.azure:azure-storage-queue;current} - private static final String DEFAULT_USER_AGENT_VERSION = "12.2.0-beta.1"; - // {x-version-update-end} + private static final Map PROPERTIES = + CoreUtils.getProperties("azure-storage-queue.properties"); + private static final String SDK_NAME = "name"; + private static final String SDK_VERSION = "version"; private static final Pattern IP_URL_PATTERN = Pattern .compile("(?:\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})|(?:localhost)"); @@ -103,7 +104,6 @@ public static QueueUrlParts parseEndpoint(String endpoint, ClientLogger logger) parts.setEndpoint(String.format("%s://%s", url.getProtocol(), url.getAuthority())); } - // TODO (gapra) : What happens if a user has custom queries? // Attempt to get the SAS token from the URL passed String sasToken = new CommonSasQueryParameters( StorageImplUtils.parseQueryStringSplitValues(url.getQuery()), false).encode(); @@ -202,8 +202,10 @@ public static HttpLogOptions getDefaultHttpLogOptions() { private static UserAgentPolicy getUserAgentPolicy(Configuration configuration) { configuration = (configuration == null) ? Configuration.NONE : configuration; - return new UserAgentPolicy(getDefaultHttpLogOptions().getApplicationId(), - DEFAULT_USER_AGENT_NAME, DEFAULT_USER_AGENT_VERSION, configuration); + String clientName = PROPERTIES.getOrDefault(SDK_NAME, "UnknownName"); + String clientVersion = PROPERTIES.getOrDefault(SDK_VERSION, "UnknownVersion"); + return new UserAgentPolicy(getDefaultHttpLogOptions().getApplicationId(), clientName, clientVersion, + configuration); } /* diff --git a/sdk/storage/azure-storage-queue/src/main/resources/azure-storage-queue.properties b/sdk/storage/azure-storage-queue/src/main/resources/azure-storage-queue.properties new file mode 100644 index 000000000000..ca812989b4f2 --- /dev/null +++ b/sdk/storage/azure-storage-queue/src/main/resources/azure-storage-queue.properties @@ -0,0 +1,2 @@ +name=${project.artifactId} +version=${project.version} diff --git a/sdk/storage/azure-storage-queue/src/test/java/com/azure/storage/queue/QueueUserAgentPropertiesTest.groovy b/sdk/storage/azure-storage-queue/src/test/java/com/azure/storage/queue/QueueUserAgentPropertiesTest.groovy new file mode 100644 index 000000000000..57c874d79253 --- /dev/null +++ b/sdk/storage/azure-storage-queue/src/test/java/com/azure/storage/queue/QueueUserAgentPropertiesTest.groovy @@ -0,0 +1,19 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.storage.queue; + +import com.azure.core.util.CoreUtils +import com.azure.core.util.UserAgentProperties +import spock.lang.Specification + +class QueueUserAgentPropertiesTest extends Specification { + + def "User agent properties not null"() { + given: + Map properties = CoreUtils.getProperties("azure-storage-queue.properties") + expect: + properties.get("name") == "azure-storage-queue" + properties.get("version").matches("(\\d)+.(\\d)+.(\\d)+([-a-zA-Z0-9.])*") + } +}