diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/jdbc/JdbcPropertiesBeanPostProcessor.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/jdbc/JdbcPropertiesBeanPostProcessor.java index a9443e2dbc64..95ecdea00068 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/jdbc/JdbcPropertiesBeanPostProcessor.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/jdbc/JdbcPropertiesBeanPostProcessor.java @@ -10,7 +10,7 @@ import com.azure.spring.cloud.core.implementation.util.AzurePasswordlessPropertiesUtils; import com.azure.spring.cloud.core.implementation.util.AzureSpringIdentifier; import com.azure.spring.cloud.service.implementation.identity.credential.provider.SpringTokenCredentialProvider; -import com.azure.spring.cloud.service.implementation.passwordless.AzureJdbcPasswordlessProperties; +import com.azure.spring.cloud.autoconfigure.implementation.passwordless.properties.AzureJdbcPasswordlessProperties; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/jms/properties/AzureServiceBusJmsProperties.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/jms/properties/AzureServiceBusJmsProperties.java index e732a0fc627f..882ef3f11f67 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/jms/properties/AzureServiceBusJmsProperties.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/jms/properties/AzureServiceBusJmsProperties.java @@ -27,14 +27,12 @@ public class AzureServiceBusJmsProperties implements InitializingBean, Passwordl private static final String SERVICE_BUS_SCOPE_AZURE = "https://servicebus.azure.net/.default"; private static final String SERVICE_BUS_SCOPE_AZURE_CHINA = SERVICE_BUS_SCOPE_AZURE; - private static final String SERVICE_BUS_SCOPE_AZURE_GERMANY = SERVICE_BUS_SCOPE_AZURE; private static final String SERVICE_BUS_SCOPE_AZURE_US_GOVERNMENT = SERVICE_BUS_SCOPE_AZURE; private static final Map SERVICEBUS_SCOPE_MAP = new HashMap() { { put(CloudType.AZURE, SERVICE_BUS_SCOPE_AZURE); put(CloudType.AZURE_CHINA, SERVICE_BUS_SCOPE_AZURE_CHINA); - put(CloudType.AZURE_GERMANY, SERVICE_BUS_SCOPE_AZURE_GERMANY); put(CloudType.AZURE_US_GOVERNMENT, SERVICE_BUS_SCOPE_AZURE_US_GOVERNMENT); } }; diff --git a/sdk/spring/spring-cloud-azure-service/src/main/java/com/azure/spring/cloud/service/implementation/passwordless/AzureJdbcPasswordlessProperties.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/passwordless/properties/AzureJdbcPasswordlessProperties.java similarity index 94% rename from sdk/spring/spring-cloud-azure-service/src/main/java/com/azure/spring/cloud/service/implementation/passwordless/AzureJdbcPasswordlessProperties.java rename to sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/passwordless/properties/AzureJdbcPasswordlessProperties.java index 689b13a25c0a..f9951793aad1 100644 --- a/sdk/spring/spring-cloud-azure-service/src/main/java/com/azure/spring/cloud/service/implementation/passwordless/AzureJdbcPasswordlessProperties.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/passwordless/properties/AzureJdbcPasswordlessProperties.java @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -package com.azure.spring.cloud.service.implementation.passwordless; +package com.azure.spring.cloud.autoconfigure.implementation.passwordless.properties; import com.azure.spring.cloud.core.properties.PasswordlessProperties; import com.azure.spring.cloud.core.properties.authentication.TokenCredentialProperties; @@ -17,14 +17,12 @@ public class AzureJdbcPasswordlessProperties implements PasswordlessProperties { private static final String JDBC_SCOPE_AZURE = "https://ossrdbms-aad.database.windows.net/.default"; private static final String JDBC_SCOPE_AZURE_CHINA = "https://ossrdbms-aad.database.chinacloudapi.cn/.default"; - private static final String JDBC_SCOPE_AZURE_GERMANY = "https://ossrdbms-aad.database.cloudapi.de/.default"; private static final String JDBC_SCOPE_AZURE_US_GOVERNMENT = "https://ossrdbms-aad.database.usgovcloudapi.net/.default"; private static final Map JDBC_SCOPE_MAP = new HashMap() { { put(CloudType.AZURE, JDBC_SCOPE_AZURE); put(CloudType.AZURE_CHINA, JDBC_SCOPE_AZURE_CHINA); - put(CloudType.AZURE_GERMANY, JDBC_SCOPE_AZURE_GERMANY); put(CloudType.AZURE_US_GOVERNMENT, JDBC_SCOPE_AZURE_US_GOVERNMENT); } }; diff --git a/sdk/spring/spring-cloud-azure-service/src/main/java/com/azure/spring/cloud/service/implementation/passwordless/AzureKafkaPasswordlessProperties.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/passwordless/properties/AzureKafkaPasswordlessProperties.java similarity index 96% rename from sdk/spring/spring-cloud-azure-service/src/main/java/com/azure/spring/cloud/service/implementation/passwordless/AzureKafkaPasswordlessProperties.java rename to sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/passwordless/properties/AzureKafkaPasswordlessProperties.java index 9b99c5f0795f..e19b1b2a909d 100644 --- a/sdk/spring/spring-cloud-azure-service/src/main/java/com/azure/spring/cloud/service/implementation/passwordless/AzureKafkaPasswordlessProperties.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/passwordless/properties/AzureKafkaPasswordlessProperties.java @@ -1,14 +1,14 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -package com.azure.spring.cloud.service.implementation.passwordless; +package com.azure.spring.cloud.autoconfigure.implementation.passwordless.properties; import com.azure.spring.cloud.core.properties.PasswordlessProperties; import com.azure.spring.cloud.core.properties.authentication.TokenCredentialProperties; import com.azure.spring.cloud.core.properties.profile.AzureProfileProperties; /** - * Configuration properties for passwordless connections with Azure ServiceBus. + * Configuration properties for passwordless connections with Azure Event Hubs Kafka. */ public class AzureKafkaPasswordlessProperties implements PasswordlessProperties { diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 2f3aa7bc275a..2fbf22be3e74 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -532,68 +532,68 @@ "name": "spring.datasource.azure.credential.client-id", "type": "java.lang.String", "description": "Client ID to use when performing service principal authentication with Azure.", - "sourceType": "com.azure.spring.cloud.service.implementation.passwordless.AzureJdbcPasswordlessProperties" + "sourceType": "com.azure.spring.cloud.autoconfigure.implementation.passwordless.properties.AzureJdbcPasswordlessProperties" }, { "name": "spring.datasource.azure.credential.client-secret", "type": "java.lang.String", "description": "Client secret to use when performing service principal authentication with Azure.", - "sourceType": "com.azure.spring.cloud.service.implementation.passwordless.AzureJdbcPasswordlessProperties" + "sourceType": "com.azure.spring.cloud.autoconfigure.implementation.passwordless.properties.AzureJdbcPasswordlessProperties" }, { "name": "spring.datasource.azure.credential.client-certificate-password", "type": "java.lang.String", "description": "Password of the certificate file.", - "sourceType": "com.azure.spring.cloud.service.implementation.passwordless.AzureJdbcPasswordlessProperties" + "sourceType": "com.azure.spring.cloud.autoconfigure.implementation.passwordless.properties.AzureJdbcPasswordlessProperties" }, { "name": "spring.datasource.azure.credential.client-certificate-path", "type": "java.lang.String", "description": "Path of a PEM certificate file to use when performing service principal authentication with Azure.", - "sourceType": "com.azure.spring.cloud.service.implementation.passwordless.AzureJdbcPasswordlessProperties" + "sourceType": "com.azure.spring.cloud.autoconfigure.implementation.passwordless.properties.AzureJdbcPasswordlessProperties" }, { "name": "spring.datasource.azure.credential.username", "type": "java.lang.String", "description": "Username to use when performing username\/password authentication with Azure.", - "sourceType": "com.azure.spring.cloud.service.implementation.passwordless.AzureJdbcPasswordlessProperties" + "sourceType": "com.azure.spring.cloud.autoconfigure.implementation.passwordless.properties.AzureJdbcPasswordlessProperties" }, { "name": "spring.datasource.azure.credential.password", "type": "java.lang.String", "description": "Password to use when performing username\/password authentication with Azure.", - "sourceType": "com.azure.spring.cloud.service.implementation.passwordless.AzureJdbcPasswordlessProperties" + "sourceType": "com.azure.spring.cloud.autoconfigure.implementation.passwordless.properties.AzureJdbcPasswordlessProperties" }, { "name": "spring.datasource.azure.credential.managed-identity-enabled", "type": "java.lang.Boolean", "description": "Whether to enable managed identity to authenticate with Azure. If true and the client-id is set, will use the client ID as user assigned managed identity client ID.", - "sourceType": "com.azure.spring.cloud.service.implementation.passwordless.AzureJdbcPasswordlessProperties", + "sourceType": "com.azure.spring.cloud.autoconfigure.implementation.passwordless.properties.AzureJdbcPasswordlessProperties", "defaultValue": false }, { "name": "spring.datasource.azure.profile.environment.active-directory-endpoint", "type": "java.lang.String", "description": "The Azure Active Directory endpoint to connect to.", - "sourceType": "com.azure.spring.cloud.service.implementation.passwordless.AzureJdbcPasswordlessProperties" + "sourceType": "com.azure.spring.cloud.autoconfigure.implementation.passwordless.properties.AzureJdbcPasswordlessProperties" }, { "name": "spring.datasource.azure.profile.tenant-id", "type": "java.lang.String", "description": "Tenant ID for Azure resources.", - "sourceType": "com.azure.spring.cloud.service.implementation.passwordless.AzureJdbcPasswordlessProperties" + "sourceType": "com.azure.spring.cloud.autoconfigure.implementation.passwordless.properties.AzureJdbcPasswordlessProperties" }, { "name": "spring.datasource.azure.profile.cloud-type", "type": "java.lang.String", "description": "Name of the Azure cloud to connect to. Supported types are: AZURE, AZURE_CHINA, AZURE_US_GOVERNMENT, OTHER. The default value is `AZURE`.", - "sourceType": "com.azure.spring.cloud.service.implementation.passwordless.AzureJdbcPasswordlessProperties" + "sourceType": "com.azure.spring.cloud.autoconfigure.implementation.passwordless.properties.AzureJdbcPasswordlessProperties" }, { "name": "spring.datasource.azure.passwordless-enabled", "type": "java.lang.Boolean", "description": "Whether to enable passwordless connections to Azure databases by using OAuth2 Azure Active Directory token credentials.", - "sourceType": "com.azure.spring.cloud.service.implementation.passwordless.AzureJdbcPasswordlessProperties", + "sourceType": "com.azure.spring.cloud.autoconfigure.implementation.passwordless.properties.AzureJdbcPasswordlessProperties", "defaultValue": false }, { diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/jdbc/JdbcPropertiesBeanPostProcessorWithApplicationContextRunnerTest.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/jdbc/JdbcPropertiesBeanPostProcessorWithApplicationContextRunnerTest.java index 3a85569689b7..34badc584b5f 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/jdbc/JdbcPropertiesBeanPostProcessorWithApplicationContextRunnerTest.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/jdbc/JdbcPropertiesBeanPostProcessorWithApplicationContextRunnerTest.java @@ -9,7 +9,7 @@ import com.azure.spring.cloud.autoconfigure.implementation.context.AzureTokenCredentialAutoConfiguration; import com.azure.spring.cloud.autoconfigure.implementation.context.properties.AzureGlobalProperties; import com.azure.spring.cloud.service.implementation.identity.credential.provider.SpringTokenCredentialProvider; -import com.azure.spring.cloud.service.implementation.passwordless.AzureJdbcPasswordlessProperties; +import com.azure.spring.cloud.autoconfigure.implementation.passwordless.properties.AzureJdbcPasswordlessProperties; import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; diff --git a/sdk/spring/spring-cloud-azure-core/src/main/java/com/azure/spring/cloud/core/implementation/properties/AzurePasswordlessPropertiesMapping.java b/sdk/spring/spring-cloud-azure-core/src/main/java/com/azure/spring/cloud/core/implementation/properties/AzurePasswordlessPropertiesMapping.java new file mode 100644 index 000000000000..26d2b8a086b0 --- /dev/null +++ b/sdk/spring/spring-cloud-azure-core/src/main/java/com/azure/spring/cloud/core/implementation/properties/AzurePasswordlessPropertiesMapping.java @@ -0,0 +1,94 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.spring.cloud.core.implementation.properties; + +import com.azure.identity.extensions.implementation.enums.AuthProperty; +import com.azure.spring.cloud.core.properties.PasswordlessProperties; + +import java.util.Properties; +import java.util.function.BiConsumer; +import java.util.function.Function; + +/** + * A mapping util used to convert a {@link PasswordlessProperties} instance to a {@link Properties} instance. + */ +public enum AzurePasswordlessPropertiesMapping { + + /** + * Getter function and setter biConsumer for scopes. + */ + SCOPES(p -> p.getScopes(), + (p, s) -> p.setProperty(AuthProperty.SCOPES.getPropertyKey(), s)), + + /** + * Getter function and setter biConsumer for clientCertificatePassword. + */ + CLIENT_CERTIFICATE_PASSWORD(p -> p.getCredential().getClientCertificatePassword(), + (p, s) -> p.setProperty(AuthProperty.CLIENT_CERTIFICATE_PASSWORD.getPropertyKey(), s)), + + /** + * Getter function and setter biConsumer for clientCertificatePath. + */ + CLIENT_CERTIFICATE_PATH(p -> p.getCredential().getClientCertificatePath(), + (p, s) -> p.setProperty(AuthProperty.CLIENT_CERTIFICATE_PATH.getPropertyKey(), s)), + + /** + * Getter function and setter biConsumer for clientId. + */ + CLIENT_ID(p -> p.getCredential().getClientId(), + (p, s) -> p.setProperty(AuthProperty.CLIENT_ID.getPropertyKey(), s)), + + /** + * Getter function and setter biConsumer for clientSecret. + */ + CLIENT_SECRET(p -> p.getCredential().getClientSecret(), + (p, s) -> p.setProperty(AuthProperty.CLIENT_SECRET.getPropertyKey(), s)), + + /** + * Getter function and setter biConsumer for managedIdentityEnabled. + */ + MANAGED_IDENTITY_ENABLED(p -> String.valueOf(p.getCredential().isManagedIdentityEnabled()), + (p, s) -> p.setProperty(AuthProperty.MANAGED_IDENTITY_ENABLED.getPropertyKey(), s)), + + /** + * Getter function and setter biConsumer for password. + */ + PASSWORD(p -> p.getCredential().getPassword(), + (p, s) -> p.setProperty(AuthProperty.PASSWORD.getPropertyKey(), s)), + + /** + * Getter function and setter biConsumer for username. + */ + USERNAME(p -> p.getCredential().getUsername(), + (p, s) -> p.setProperty(AuthProperty.USERNAME.getPropertyKey(), s)), + + /** + * Getter function and setter biConsumer for tenantId. + */ + TENANT_ID(p -> p.getProfile().getTenantId(), + (p, s) -> p.setProperty(AuthProperty.TENANT_ID.getPropertyKey(), s)), + + /** + * Getter function and setter biConsumer for authorityHost. + */ + AUTHORITY_HOST(p -> p.getProfile().getEnvironment().getActiveDirectoryEndpoint(), + (p, s) -> p.setProperty(AuthProperty.AUTHORITY_HOST.getPropertyKey(), s)); + + private Function getter; + private BiConsumer setter; + + public Function getGetter() { + return getter; + } + + public BiConsumer getSetter() { + return setter; + } + + AzurePasswordlessPropertiesMapping(Function getter, BiConsumer setter) { + this.getter = getter; + this.setter = setter; + } +} diff --git a/sdk/spring/spring-cloud-azure-core/src/main/java/com/azure/spring/cloud/core/properties/PasswordlessProperties.java b/sdk/spring/spring-cloud-azure-core/src/main/java/com/azure/spring/cloud/core/properties/PasswordlessProperties.java index 2389c228a364..a315650bc0ab 100644 --- a/sdk/spring/spring-cloud-azure-core/src/main/java/com/azure/spring/cloud/core/properties/PasswordlessProperties.java +++ b/sdk/spring/spring-cloud-azure-core/src/main/java/com/azure/spring/cloud/core/properties/PasswordlessProperties.java @@ -3,13 +3,11 @@ package com.azure.spring.cloud.core.properties; -import com.azure.identity.extensions.implementation.enums.AuthProperty; +import com.azure.spring.cloud.core.implementation.properties.AzurePasswordlessPropertiesMapping; import com.azure.spring.cloud.core.provider.AzureProfileOptionsProvider; import com.azure.spring.cloud.core.provider.authentication.TokenCredentialOptionsProvider; import java.util.Properties; -import java.util.function.BiConsumer; -import java.util.function.Function; /** * Unified properties for Azure passwordless clients. @@ -51,87 +49,11 @@ public interface PasswordlessProperties extends TokenCredentialOptionsProvider, default Properties toPasswordlessProperties() { Properties target = new Properties(); for (AzurePasswordlessPropertiesMapping m : AzurePasswordlessPropertiesMapping.values()) { - if (m.getter.apply(this) != null) { - m.setter.accept(target, m.getter.apply(this)); + if (m.getGetter().apply(this) != null) { + m.getSetter().accept(target, m.getGetter().apply(this)); } } return target; } - /** - * A mapping util used to convert a {@link PasswordlessProperties} instance to a {@link Properties} instance. - */ - enum AzurePasswordlessPropertiesMapping { - - /** - * Getter function and setter biConsumer for scopes. - */ - scopes(p -> p.getScopes(), - (p, s) -> p.setProperty(AuthProperty.SCOPES.getPropertyKey(), s)), - - /** - * Getter function and setter biConsumer for clientCertificatePassword. - */ - clientCertificatePassword(p -> p.getCredential().getClientCertificatePassword(), - (p, s) -> p.setProperty(AuthProperty.CLIENT_CERTIFICATE_PASSWORD.getPropertyKey(), s)), - - /** - * Getter function and setter biConsumer for clientCertificatePath. - */ - clientCertificatePath(p -> p.getCredential().getClientCertificatePath(), - (p, s) -> p.setProperty(AuthProperty.CLIENT_CERTIFICATE_PATH.getPropertyKey(), s)), - - /** - * Getter function and setter biConsumer for clientId. - */ - clientId(p -> p.getCredential().getClientId(), - (p, s) -> p.setProperty(AuthProperty.CLIENT_ID.getPropertyKey(), s)), - - /** - * Getter function and setter biConsumer for clientSecret. - */ - clientSecret(p -> p.getCredential().getClientSecret(), - (p, s) -> p.setProperty(AuthProperty.CLIENT_SECRET.getPropertyKey(), s)), - - /** - * Getter function and setter biConsumer for managedIdentityEnabled. - */ - managedIdentityEnabled(p -> String.valueOf(p.getCredential().isManagedIdentityEnabled()), - (p, s) -> p.setProperty(AuthProperty.MANAGED_IDENTITY_ENABLED.getPropertyKey(), s)), - - /** - * Getter function and setter biConsumer for password. - */ - password(p -> p.getCredential().getPassword(), - (p, s) -> p.setProperty(AuthProperty.PASSWORD.getPropertyKey(), s)), - - /** - * Getter function and setter biConsumer for username. - */ - username(p -> p.getCredential().getUsername(), - (p, s) -> p.setProperty(AuthProperty.USERNAME.getPropertyKey(), s)), - - /** - * Getter function and setter biConsumer for tenantId. - */ - tenantId(p -> p.getProfile().getTenantId(), - (p, s) -> p.setProperty(AuthProperty.TENANT_ID.getPropertyKey(), s)), - - /** - * Getter function and setter biConsumer for authorityHost. - */ - authorityHost(p -> p.getProfile().getEnvironment().getActiveDirectoryEndpoint(), - (p, s) -> p.setProperty(AuthProperty.AUTHORITY_HOST.getPropertyKey(), s)); - - private Function getter; - private BiConsumer setter; - - AzurePasswordlessPropertiesMapping(Function getter, BiConsumer setter) { - this.getter = getter; - this.setter = setter; - } - - } } - diff --git a/sdk/spring/spring-cloud-azure-service/src/main/java/com/azure/spring/cloud/service/implementation/kafka/AzureKafkaPropertiesUtils.java b/sdk/spring/spring-cloud-azure-service/src/main/java/com/azure/spring/cloud/service/implementation/kafka/AzureKafkaPropertiesUtils.java index a3ac2e2bd273..8ce8183ec2bb 100644 --- a/sdk/spring/spring-cloud-azure-service/src/main/java/com/azure/spring/cloud/service/implementation/kafka/AzureKafkaPropertiesUtils.java +++ b/sdk/spring/spring-cloud-azure-service/src/main/java/com/azure/spring/cloud/service/implementation/kafka/AzureKafkaPropertiesUtils.java @@ -44,119 +44,119 @@ public static void copyJaasPropertyToAzureProperties(String source, AzurePasswor public enum AzureKafkaPasswordlessPropertiesMapping { - clientCertificatePassword(CREDENTIAL_PREFIX + "client-certificate-password", + CLIENT_CERTIFICATE_PASSWORD(CREDENTIAL_PREFIX + "client-certificate-password", p -> p.getCredential().getClientCertificatePassword(), (p, s) -> p.getCredential().setClientCertificatePassword(s)), - clientCertificatePath(CREDENTIAL_PREFIX + "client-certificate-path", + CLIENT_CERTIFICATE_PATH(CREDENTIAL_PREFIX + "client-certificate-path", p -> p.getCredential().getClientCertificatePath(), (p, s) -> p.getCredential().setClientCertificatePath(s)), - clientId(CREDENTIAL_PREFIX + "client-id", + CLIENT_ID(CREDENTIAL_PREFIX + "client-id", p -> p.getCredential().getClientId(), (p, s) -> p.getCredential().setClientId(s)), - clientSecret(CREDENTIAL_PREFIX + "client-secret", + CLIENT_SECRET(CREDENTIAL_PREFIX + "client-secret", p -> p.getCredential().getClientSecret(), (p, s) -> p.getCredential().setClientSecret(s)), - managedIdentityEnabled(CREDENTIAL_PREFIX + "managed-identity-enabled", + MANAGED_IDENTITY_ENABLED(CREDENTIAL_PREFIX + "managed-identity-enabled", p -> String.valueOf(p.getCredential().isManagedIdentityEnabled()), (p, s) -> p.getCredential().setManagedIdentityEnabled(Boolean.valueOf(s))), - password(CREDENTIAL_PREFIX + "password", + PASSWORD(CREDENTIAL_PREFIX + "password", p -> p.getCredential().getPassword(), (p, s) -> p.getCredential().setPassword(s)), - username(CREDENTIAL_PREFIX + "username", + USERNAME(CREDENTIAL_PREFIX + "username", p -> p.getCredential().getUsername(), (p, s) -> p.getCredential().setUsername(s)), - cloudType(PROFILE_PREFIX + "cloud-type", + CLOUD_TYPE(PROFILE_PREFIX + "cloud-type", p -> Optional.ofNullable(p.getProfile().getCloudType()).map(v -> v.name()).orElse(null), (p, s) -> p.getProfile().setCloudType(AzureProfileOptionsProvider.CloudType.fromString(s))), - activeDirectoryEndpoint(ENVIRONMENT_PREFIX + "active-directory-endpoint", + ACTIVE_DIRECTORY_ENDPOINT(ENVIRONMENT_PREFIX + "active-directory-endpoint", p -> p.getProfile().getEnvironment().getActiveDirectoryEndpoint(), (p, s) -> p.getProfile().getEnvironment().setActiveDirectoryEndpoint(s)), - activeDirectoryGraphApiVersion(ENVIRONMENT_PREFIX + "active-directory-graph-api-version", + ACTIVE_DIRECTORY_GRAPH_API_VERSION(ENVIRONMENT_PREFIX + "active-directory-graph-api-version", p -> p.getProfile().getEnvironment().getActiveDirectoryGraphApiVersion(), (p, s) -> p.getProfile().getEnvironment().setActiveDirectoryGraphApiVersion(s)), - activeDirectoryGraphEndpoint(ENVIRONMENT_PREFIX + "active-directory-graph-endpoint", + ACTIVE_DIRECTORY_GRAPH_ENDPOINT(ENVIRONMENT_PREFIX + "active-directory-graph-endpoint", p -> p.getProfile().getEnvironment().getActiveDirectoryGraphEndpoint(), (p, s) -> p.getProfile().getEnvironment().setActiveDirectoryGraphEndpoint(s)), - activeDirectoryResourceId(ENVIRONMENT_PREFIX + "active-directory-resource-id", + ACTIVE_DIRECTORY_RESOURCE_ID(ENVIRONMENT_PREFIX + "active-directory-resource-id", p -> p.getProfile().getEnvironment().getActiveDirectoryResourceId(), (p, s) -> p.getProfile().getEnvironment().setActiveDirectoryResourceId(s)), - azureApplicationInsightsEndpoint(ENVIRONMENT_PREFIX + "azure-application-insights-endpoint", + AZURE_APPLICATION_INSIGHTS_ENDPOINT(ENVIRONMENT_PREFIX + "azure-application-insights-endpoint", p -> p.getProfile().getEnvironment().getAzureApplicationInsightsEndpoint(), (p, s) -> p.getProfile().getEnvironment().setAzureApplicationInsightsEndpoint(s)), - azureDataLakeAnalyticsCatalogAndJobEndpointSuffix(ENVIRONMENT_PREFIX + "azure-data-lake-analytics-catalog-and-job-endpoint-suffix", + AZURE_DATA_LAKE_ANALYTICS_CATALOG_AND_JOB_ENDPOINT_SUFFIX(ENVIRONMENT_PREFIX + "azure-data-lake-analytics-catalog-and-job-endpoint-suffix", p -> p.getProfile().getEnvironment().getAzureDataLakeAnalyticsCatalogAndJobEndpointSuffix(), (p, s) -> p.getProfile().getEnvironment().setAzureDataLakeAnalyticsCatalogAndJobEndpointSuffix(s)), - azureDataLakeStoreFileSystemEndpointSuffix(ENVIRONMENT_PREFIX + "azure-data-lake-store-file-system-endpoint-suffix", + AZURE_DATA_LAKE_STORE_FILE_SYSTEM_ENDPOINT_SUFFIX(ENVIRONMENT_PREFIX + "azure-data-lake-store-file-system-endpoint-suffix", p -> p.getProfile().getEnvironment().getAzureDataLakeStoreFileSystemEndpointSuffix(), (p, s) -> p.getProfile().getEnvironment().setAzureDataLakeStoreFileSystemEndpointSuffix(s)), - azureLogAnalyticsEndpoint(ENVIRONMENT_PREFIX + "azure-log-analytics-endpoint", + AZURE_LOG_ANALYTICS_ENDPOINT(ENVIRONMENT_PREFIX + "azure-log-analytics-endpoint", p -> p.getProfile().getEnvironment().getAzureLogAnalyticsEndpoint(), (p, s) -> p.getProfile().getEnvironment().setAzureLogAnalyticsEndpoint(s)), - dataLakeEndpointResourceId(ENVIRONMENT_PREFIX + "data-lake-endpoint-resource-id", + DATA_LAKE_ENDPOINT_RESOURCE_ID(ENVIRONMENT_PREFIX + "data-lake-endpoint-resource-id", p -> p.getProfile().getEnvironment().getDataLakeEndpointResourceId(), (p, s) -> p.getProfile().getEnvironment().setDataLakeEndpointResourceId(s)), - galleryEndpoint(ENVIRONMENT_PREFIX + "gallery-endpoint", + GALLERY_ENDPOINT(ENVIRONMENT_PREFIX + "gallery-endpoint", p -> p.getProfile().getEnvironment().getGalleryEndpoint(), (p, s) -> p.getProfile().getEnvironment().setGalleryEndpoint(s)), - keyVaultDnsSuffix(ENVIRONMENT_PREFIX + "key-vault-dns-suffix", + KEY_VAULT_DNS_SUFFIX(ENVIRONMENT_PREFIX + "key-vault-dns-suffix", p -> p.getProfile().getEnvironment().getKeyVaultDnsSuffix(), (p, s) -> p.getProfile().getEnvironment().setKeyVaultDnsSuffix(s)), - managementEndpoint(ENVIRONMENT_PREFIX + "management-endpoint", + MANAGEMENT_ENDPOINT(ENVIRONMENT_PREFIX + "management-endpoint", p -> p.getProfile().getEnvironment().getManagementEndpoint(), (p, s) -> p.getProfile().getEnvironment().setManagementEndpoint(s)), - microsoftGraphEndpoint(ENVIRONMENT_PREFIX + "microsoft-graph-endpoint", + MICROSOFT_GRAPH_ENDPOINT(ENVIRONMENT_PREFIX + "microsoft-graph-endpoint", p -> p.getProfile().getEnvironment().getMicrosoftGraphEndpoint(), (p, s) -> p.getProfile().getEnvironment().setMicrosoftGraphEndpoint(s)), - portal(ENVIRONMENT_PREFIX + "portal", + PORTAL(ENVIRONMENT_PREFIX + "portal", p -> p.getProfile().getEnvironment().getPortal(), (p, s) -> p.getProfile().getEnvironment().setPortal(s)), - publishingProfile(ENVIRONMENT_PREFIX + "publishing-profile", + PUBLISHING_PROFILE(ENVIRONMENT_PREFIX + "publishing-profile", p -> p.getProfile().getEnvironment().getPublishingProfile(), (p, s) -> p.getProfile().getEnvironment().setPublishingProfile(s)), - resourceManagerEndpoint(ENVIRONMENT_PREFIX + "resource-manager-endpoint", + RESOURCE_MANAGER_ENDPOINT(ENVIRONMENT_PREFIX + "resource-manager-endpoint", p -> p.getProfile().getEnvironment().getResourceManagerEndpoint(), (p, s) -> p.getProfile().getEnvironment().setResourceManagerEndpoint(s)), - sqlManagementEndpoint(ENVIRONMENT_PREFIX + "sql-management-endpoint", + SQL_MANAGEMENT_ENDPOINT(ENVIRONMENT_PREFIX + "sql-management-endpoint", p -> p.getProfile().getEnvironment().getSqlManagementEndpoint(), (p, s) -> p.getProfile().getEnvironment().setSqlManagementEndpoint(s)), - sqlServerHostnameSuffix(ENVIRONMENT_PREFIX + "sql-server-hostname-suffix", + SQL_SERVER_HOSTNAME_SUFFIX(ENVIRONMENT_PREFIX + "sql-server-hostname-suffix", p -> p.getProfile().getEnvironment().getSqlServerHostnameSuffix(), (p, s) -> p.getProfile().getEnvironment().setSqlServerHostnameSuffix(s)), - storageEndpointSuffix(ENVIRONMENT_PREFIX + "storage-endpoint-suffix", + STORAGE_ENDPOINT_SUFFIX(ENVIRONMENT_PREFIX + "storage-endpoint-suffix", p -> p.getProfile().getEnvironment().getStorageEndpointSuffix(), (p, s) -> p.getProfile().getEnvironment().setStorageEndpointSuffix(s)), - subscriptionId(PROFILE_PREFIX + "subscription-id", + SUBSCRIPTION_ID(PROFILE_PREFIX + "subscription-id", p -> p.getProfile().getSubscriptionId(), (p, s) -> p.getProfile().setSubscriptionId(s)), - tenantId(PROFILE_PREFIX + "tenant-id", + TENANT_ID(PROFILE_PREFIX + "tenant-id", p -> p.getProfile().getTenantId(), (p, s) -> p.getProfile().setTenantId(s)); diff --git a/sdk/spring/spring-cloud-azure-service/src/main/java/com/azure/spring/cloud/service/implementation/passwordless/AzurePasswordlessProperties.java b/sdk/spring/spring-cloud-azure-service/src/main/java/com/azure/spring/cloud/service/implementation/passwordless/AzurePasswordlessProperties.java index 2c1fc1f36793..0a900015795d 100644 --- a/sdk/spring/spring-cloud-azure-service/src/main/java/com/azure/spring/cloud/service/implementation/passwordless/AzurePasswordlessProperties.java +++ b/sdk/spring/spring-cloud-azure-service/src/main/java/com/azure/spring/cloud/service/implementation/passwordless/AzurePasswordlessProperties.java @@ -4,21 +4,21 @@ package com.azure.spring.cloud.service.implementation.passwordless; import com.azure.spring.cloud.core.properties.AzureProperties; +import com.azure.spring.cloud.core.properties.PasswordlessProperties; import com.azure.spring.cloud.core.properties.authentication.TokenCredentialProperties; import com.azure.spring.cloud.core.properties.client.ClientProperties; import com.azure.spring.cloud.core.properties.profile.AzureProfileProperties; import com.azure.spring.cloud.core.properties.proxy.ProxyProperties; -import com.azure.spring.cloud.core.provider.AzureProfileOptionsProvider; -import com.azure.spring.cloud.core.provider.authentication.TokenCredentialOptionsProvider; /** - * Implement {@link TokenCredentialOptionsProvider} and {@link AzureProfileOptionsProvider} for Spring Cloud Azure - * support for other third party services. + * Implement {@link PasswordlessProperties} for Spring Cloud Azure support for other third party services. */ -public class AzurePasswordlessProperties implements AzureProperties { +public class AzurePasswordlessProperties implements PasswordlessProperties, AzureProperties { private AzureProfileProperties profile = new AzureProfileProperties(); + private String scopes; + private TokenCredentialProperties credential = new TokenCredentialProperties(); // Use client options inside credential for azure identity @@ -73,4 +73,13 @@ public boolean isPasswordlessEnabled() { public void setPasswordlessEnabled(boolean passwordlessEnabled) { this.passwordlessEnabled = passwordlessEnabled; } + + public String getScopes() { + return scopes; + } + + public void setScopes(String scopes) { + this.scopes = scopes; + } + } diff --git a/sdk/spring/spring-cloud-azure-service/src/test/java/com/azure/spring/cloud/service/implementation/kafka/KafkaOAuth2AuthenticateCallbackHandlerTest.java b/sdk/spring/spring-cloud-azure-service/src/test/java/com/azure/spring/cloud/service/implementation/kafka/KafkaOAuth2AuthenticateCallbackHandlerTest.java index 403828fa7bdb..26e4317da6dc 100644 --- a/sdk/spring/spring-cloud-azure-service/src/test/java/com/azure/spring/cloud/service/implementation/kafka/KafkaOAuth2AuthenticateCallbackHandlerTest.java +++ b/sdk/spring/spring-cloud-azure-service/src/test/java/com/azure/spring/cloud/service/implementation/kafka/KafkaOAuth2AuthenticateCallbackHandlerTest.java @@ -27,7 +27,7 @@ import java.util.Map; import static com.azure.spring.cloud.service.implementation.kafka.AzureKafkaPropertiesUtils.AZURE_TOKEN_CREDENTIAL; -import static com.azure.spring.cloud.service.implementation.kafka.AzureKafkaPropertiesUtils.AzureKafkaPasswordlessPropertiesMapping.managedIdentityEnabled; +import static com.azure.spring.cloud.service.implementation.kafka.AzureKafkaPropertiesUtils.AzureKafkaPasswordlessPropertiesMapping.MANAGED_IDENTITY_ENABLED; import static com.azure.spring.cloud.service.implementation.kafka.AzureOAuthBearerTokenTest.FAKE_TOKEN; import static org.apache.kafka.clients.CommonClientConfigs.BOOTSTRAP_SERVERS_CONFIG; import static org.apache.kafka.common.config.SaslConfigs.SASL_JAAS_CONFIG; @@ -87,7 +87,7 @@ void testCreateTokenCredentialByResolver() { Map configs = new HashMap<>(); configs.put(BOOTSTRAP_SERVERS_CONFIG, KAFKA_BOOTSTRAP_SERVER); Jaas jaas = new Jaas(OAuthBearerLoginModule.class.getName()); - jaas.getOptions().put(managedIdentityEnabled.propertyKey(), "true"); + jaas.getOptions().put(MANAGED_IDENTITY_ENABLED.propertyKey(), "true"); configs.put(SASL_JAAS_CONFIG, new Password(jaas.toString())); KafkaOAuth2AuthenticateCallbackHandler handler = new KafkaOAuth2AuthenticateCallbackHandler();