From 89073a3c54b8fb4598d5956339add4c2e3101ce4 Mon Sep 17 00:00:00 2001 From: Xiaolu Dai <31124698+saragluna@users.noreply.github.com> Date: Tue, 17 Aug 2021 14:44:48 +0800 Subject: [PATCH] Cherry-pick unifying configuration changes to Azure Spring Cloud 4.x (#23597) * Unify spring configurations (#22937) * Refactor Azure Spring projects structure (#23004) * Mapping spring legacy props (#23166) ** use file for property mapping ** add environmentpostprocessor after kv ** map multiple key vault use case * update readme for unified configuration (#23452) Co-authored-by: Yi Liu --- .../resources/spotbugs/spotbugs-exclude.xml | 34 +- eng/jacoco-test-coverage/pom.xml | 28 +- eng/versioning/version_client.txt | 4 +- sdk/boms/azure-spring-boot-bom/CHANGELOG.md | 2 +- sdk/spring/azure-identity-spring/README.md | 27 -- sdk/spring/azure-identity-spring/pom.xml | 75 ---- .../pom.xml | 18 +- .../pom.xml | 20 +- .../README.md | 37 +- .../azure-spring-boot-starter-cosmos/pom.xml | 29 +- .../README.md | 121 ++++-- .../pom.xml | 34 +- .../main/resources/META-INF/spring.factories | 3 +- .../pom.xml | 10 +- .../README.md | 34 +- .../azure-spring-boot-starter-storage/pom.xml | 24 +- .../azure-spring-boot-starter/CHANGELOG.md | 2 +- sdk/spring/azure-spring-boot-starter/pom.xml | 4 +- .../AADWebAppAndWebApiInOneAppIT.java | 5 +- .../spring/utils/test/ApplicationIdTest.java | 4 +- .../azure/test/aad/selenium/AADITHelper.java | 6 +- .../AADOauth2AuthorizedClientCachedIT.java | 5 +- .../scopes/AADAccessTokenScopesIT.java | 5 +- .../aad/selenium/ondemand/AADOnDemandIT.java | 3 +- .../src/main/resources/application.properties | 8 +- .../azure/test/cosmos/CosmosActuatorIT.java | 8 +- .../java/com/azure/test/cosmos/CosmosIT.java | 16 +- .../test/keyvault/KeyVaultActuatorIT.java | 20 +- .../test/keyvault/KeyVaultSecretValueIT.java | 22 +- .../test/keyvault/MultipleKeyVaultsIT.java | 68 +-- .../test-resources.json | 2 +- .../test/aad/common/AADSeleniumITHelper.java | 18 +- .../azure/test/storage/StorageActuatorIT.java | 12 +- .../src/test/resources/application.properties | 8 +- sdk/spring/azure-spring-boot/pom.xml | 399 ------------------ .../azure/spring/utils/AzureCloudUrls.java | 24 -- .../com/azure/spring/utils/Constants.java | 15 - .../azure/spring/utils/PropertyLoader.java | 40 -- .../main/resources/META-INF/spring.factories | 15 - .../src/test/resources/logback-test.xml | 17 - .../org.mockito.plugins.MockMaker | 1 - .../CHANGELOG-SPRINGBOOT.md} | 1 + .../README-SPRINGBOOT.md} | 3 +- .../azure-spring-cloud-autoconfigure/pom.xml | 234 ++++++++-- .../azure/spring/aad/AADApplicationType.java | 0 .../spring/aad/AADAuthorizationGrantType.java | 0 .../aad/AADAuthorizationServerEndpoints.java | 0 .../aad/AADClientRegistrationRepository.java | 0 .../spring/aad/AADIssuerJWSKeySelector.java | 0 .../AADJwtDecoderProviderConfiguration.java | 0 .../AADJwtGrantedAuthoritiesConverter.java | 0 .../aad/AADOAuth2AuthenticatedPrincipal.java | 0 .../aad/AADOAuth2ClientConfiguration.java | 0 .../aad/AADTrustedIssuerRepository.java | 0 ...zationCodeGrantRequestEntityConverter.java | 2 +- ...ssionOAuth2AuthorizedClientRepository.java | 0 .../constants/AADTokenClaim.java | 0 .../constants/AuthorityPrefix.java | 0 .../AADClientRegistrationDeserializer.java | 0 .../jackson/AADClientRegistrationMixin.java | 0 .../AADOAuth2ClientJackson2Module.java | 0 .../implementation/jackson/JsonNodeUtils.java | 0 .../jackson/SerializerUtils.java | 0 .../implementation/jackson/StdConverters.java | 0 .../com/azure/spring/aad/package-info.java | 0 ...JwtBearerTokenAuthenticationConverter.java | 0 .../AADOBOOAuth2AuthorizedClientProvider.java | 0 .../AADResourceServerConfiguration.java | 0 .../webapi/AADResourceServerProperties.java | 0 ...rceServerWebSecurityConfigurerAdapter.java | 0 .../azure/spring/aad/webapi/package-info.java | 0 .../validator/AADJwtAudienceValidator.java | 0 .../validator/AADJwtClaimValidator.java | 0 .../validator/AADJwtIssuerValidator.java | 0 .../aad/webapi/validator/package-info.java | 0 ...legatedOAuth2AuthorizedClientProvider.java | 0 .../AADHandleConditionalAccessFilter.java | 0 ...zationCodeGrantRequestEntityConverter.java | 2 +- ...AADOAuth2AuthorizationRequestResolver.java | 0 .../aad/webapp/AADOAuth2UserService.java | 0 .../AADWebApplicationConfiguration.java | 0 .../AADWebSecurityConfigurerAdapter.java | 0 .../webapp/AuthorizationClientProperties.java | 0 .../aad/webapp/AzureClientRegistration.java | 0 .../azure/spring/aad/webapp/GraphClient.java | 0 .../spring/aad/webapp/GroupInformation.java | 0 .../azure/spring/aad/webapp/package-info.java | 0 ...DAppRoleStatelessAuthenticationFilter.java | 0 .../aad/AADAuthenticationFilter.java | 0 ...AuthenticationFilterAutoConfiguration.java | 0 .../aad/AADAuthenticationProperties.java | 3 +- .../aad/AADAutoConfiguration.java | 0 .../autoconfigure/aad/AzureADGraphClient.java | 0 .../spring/autoconfigure/aad/Constants.java | 0 .../aad/JacksonObjectMapperFactory.java | 0 .../spring/autoconfigure/aad/Membership.java | 0 .../spring/autoconfigure/aad/Memberships.java | 0 .../autoconfigure/aad/UserPrincipal.java | 0 .../aad/UserPrincipalManager.java | 0 .../autoconfigure/aad/package-info.java | 0 .../AADB2CAuthorizationRequestResolver.java | 0 .../b2c/AADB2CAutoConfiguration.java | 0 .../AADB2CClientRegistrationRepository.java | 0 .../autoconfigure/b2c/AADB2CConditions.java | 0 .../b2c/AADB2CConfigurationException.java | 0 ...JwtBearerTokenAuthenticationConverter.java | 0 .../b2c/AADB2CLogoutSuccessHandler.java | 0 ...zationCodeGrantRequestEntityConverter.java | 2 +- .../b2c/AADB2COAuth2ClientConfiguration.java | 0 .../b2c/AADB2COidcLoginConfigurer.java | 0 .../autoconfigure/b2c/AADB2CProperties.java | 0 ...AADB2CResourceServerAutoConfiguration.java | 0 .../b2c/AADB2CTrustedIssuerRepository.java | 0 .../spring/autoconfigure/b2c/AADB2CURL.java | 0 .../b2c/AuthorizationClientProperties.java | 0 .../autoconfigure/b2c/package-info.java | 0 .../aad/ClientRegistrationCondition.java | 0 .../aad/ResourceServerCondition.java | 0 .../aad/WebApplicationCondition.java | 0 .../condition/aad/package-info.java | 0 .../cosmos/CosmosAutoConfiguration.java | 28 +- .../cosmos/CosmosHealthConfiguration.java | 0 .../cosmos/CosmosHealthIndicator.java | 4 +- .../cosmos/CosmosProperties.java | 7 +- ...ReactiveRepositoriesAutoConfiguration.java | 0 ...iveRepositoriesAutoConfigureRegistrar.java | 0 .../CosmosRepositoriesAutoConfiguration.java | 0 ...mosRepositoriesAutoConfigureRegistrar.java | 0 .../autoconfigure/cosmos/package-info.java | 0 .../jms/AzureServiceBusJMSProperties.java | 9 +- .../jms/ConnectionStringResolver.java | 0 ...PremiumServiceBusJMSAutoConfiguration.java | 7 +- ...PremiumServiceBusJMSAutoConfiguration.java | 11 +- .../autoconfigure/jms/ServiceBusKey.java | 0 .../SpringServiceBusJmsConnectionFactory.java | 0 .../autoconfigure/jms/package-info.java | 0 .../storage/StorageAutoConfiguration.java | 18 +- .../storage/StorageHealthConfiguration.java | 0 .../storage/StorageProperties.java | 7 +- .../actuator/BlobStorageHealthIndicator.java | 0 .../storage/actuator/Constants.java | 0 .../actuator/FileStorageHealthIndicator.java | 0 .../storage/actuator/package-info.java | 0 .../autoconfigure/storage/package-info.java | 0 .../AzureStorageProtocolResolver.java | 0 .../resource/AzureStorageResource.java | 0 .../AzureStorageResourcePatternResolver.java | 0 .../storage/resource/AzureStorageUtils.java | 0 .../storage/resource/BlobStorageResource.java | 0 .../storage/resource/FileStorageResource.java | 0 .../resource/StorageRuntimeException.java | 0 .../storage/resource/StorageType.java | 0 .../storage/resource/package-info.java | 0 ...egacyPropertyEnvironmentPostProcessor.java | 63 +++ .../autoconfigure/unity/AzureProperties.java | 34 ++ .../unity/AzurePropertyAutoConfiguration.java | 43 ++ .../unity/CredentialProperties.java | 76 ++++ .../unity/EnvironmentProperties.java | 41 ++ ...egacyPropertyEnvironmentPostProcessor.java | 151 +++++++ .../autoconfigure/unity}/package-info.java | 4 +- .../cache/AzureRedisAutoConfiguration.java | 17 +- ...eCloudFoundryEnvironmentPostProcessor.java | 4 +- .../context/AzureContextProperties.java} | 20 +- ...AzureResourceManagerAutoConfiguration.java | 128 ++++++ .../autoconfigure/context/package-info.java | 0 .../AzureEventHubAutoConfiguration.java | 25 +- .../AzureEventHubKafkaAutoConfiguration.java | 13 +- .../EventHubConnectionStringProvider.java | 2 +- .../AzureServiceBusAutoConfiguration.java | 13 +- ...AzureServiceBusQueueAutoConfiguration.java | 50 ++- ...AzureServiceBusTopicAutoConfiguration.java | 61 ++- .../ServiceBusConnectionStringProvider.java | 2 +- .../storage/AzureStorageProperties.java | 4 +- .../AzureStorageQueueAutoConfiguration.java | 14 +- .../autoconfigure/storage/package-info.java | 0 .../cloudfoundry/environment/Constants.java | 0 .../cloudfoundry/environment/VcapPojo.java | 0 .../environment/VcapProcessor.java | 0 .../cloudfoundry/environment/VcapResult.java | 0 .../environment/VcapServiceConfig.java | 0 .../environment/VcapServiceType.java | 0 .../environment/package-info.java | 0 .../KeyVaultEnvironmentPostProcessor.java | 4 +- ...eyVaultEnvironmentPostProcessorHelper.java | 42 +- .../keyvault/KeyVaultHealthConfiguration.java | 0 .../keyvault/KeyVaultHealthIndicator.java | 0 .../spring/keyvault/KeyVaultOperation.java | 2 - .../spring/keyvault/KeyVaultProperties.java | 74 +--- .../keyvault/KeyVaultPropertySource.java | 2 +- ...egacyPropertyEnvironmentPostProcessor.java | 110 +++++ .../azure/spring/keyvault/package-info.java | 0 .../azure/spring/utils/PropertyLoader.java | 31 ++ .../com/azure/spring/utils/package-info.java | 0 .../resources/META-INF/project.properties | 0 .../main/resources/META-INF/spring.factories | 36 +- ...eyvault-property-suffix-mapping.properties | 12 + .../legacy-property-mapping.properties | 24 ++ ...WebApplicationAndResourceServerConfig.java | 0 .../java/com/azure/spring/aad/JsonMapper.java | 0 ...AADOAuth2ResourceServerSecurityConfig.java | 0 .../spring/aad/webapi/HomeController.java | 0 .../spring/aad/webapi/SampleController.java | 0 .../webapp/AADOAuth2LoginSecurityConfig.java | 0 .../aad/webapp/AuthorityController.java | 0 .../spring/aad/webapp/ClientController.java | 0 .../aad/webapp/OnDemandClientController.java | 0 .../spring/aad/webapp/RoleController.java | 0 .../spring/aad/webapp/WebApiController.java | 0 .../b2c/ResourceServerConfiguration.java | 0 .../b2c/ResourceServerController.java | 0 .../WebappAccessResourceConfiguration.java | 0 .../b2c/WebappAccessResourceController.java | 0 .../cosmos/CosmosSampleApplication.java | 0 .../java/com/azure/spring/cosmos/User.java | 0 .../azure/spring/cosmos/UserRepository.java | 0 .../spring/jms/CustomMessageConverter.java | 0 .../spring/jms/QueueReceiveController.java | 0 .../com/azure/spring/jms/SendController.java | 0 .../spring/jms/TopicReceiveController.java | 0 .../java/com/azure/spring/jms/User.java | 0 .../azure/spring/keyvault/KeyVaultSample.java | 0 .../spring/aad/AADApplicationTypeTest.java | 0 .../AADClientRegistrationRepositoryTest.java | 0 .../aad/AADOAuth2ClientConfigurationTest.java | 0 .../jackson/SerializerUtilsTest.java | 0 ...earerTokenAuthenticationConverterTest.java | 0 .../AADResourceServerConfigurationTest.java | 0 .../AADResourceServerPropertiesTest.java | 0 .../AADJwtAudienceValidatorTest.java | 0 .../validator/AADJwtIssuerValidatorTest.java | 0 ...ADAccessTokenGroupRolesExtractionTest.java | 0 ...tedOAuth2AuthorizedClientProviderTest.java | 0 .../webapp/AADIdTokenRolesExtractionTest.java | 0 ...onCodeGrantRequestEntityConverterTest.java | 0 .../WebApplicationContextRunnerUtils.java | 0 .../AADAppRoleAuthenticationFilterTest.java | 0 ...AADAuthenticationFilterPropertiesTest.java | 47 +++ .../aad/AADAuthenticationFilterTest.java | 24 +- .../aad/AADAuthenticationPropertiesTest.java | 0 .../aad/AzureADGraphClientTest.java | 0 .../autoconfigure/aad/MembershipTest.java | 0 .../aad/MicrosoftGraphConstants.java | 0 .../aad/ResourceRetrieverTest.java | 0 .../autoconfigure/aad/TestConstants.java | 0 .../aad/UserPrincipalAzureADGraphTest.java | 0 .../aad/UserPrincipalManagerAudienceTest.java | 0 .../aad/UserPrincipalManagerTest.java | 0 .../aad/UserPrincipalMicrosoftGraphTest.java | 0 ...ADB2CAuthorizationRequestResolverTest.java | 0 .../b2c/AADB2CAutoConfigurationTest.java | 45 ++ .../autoconfigure/b2c/AADB2CConstants.java | 0 .../b2c/AADB2CLogoutSuccessHandlerTest.java | 0 ...2CResourceServerAutoConfigurationTest.java | 0 .../autoconfigure/b2c/AADB2CURLTest.java | 0 .../b2c/AADB2CUserPrincipalTest.java | 0 ...ctAADB2COAuth2ClientTestConfiguration.java | 0 .../condition/aad/AbstractCondition.java | 0 .../aad/ClientRegistrationConditionTest.java | 0 .../aad/ResourceServerConditionTest.java | 0 .../aad/WebApplicationConditionTest.java | 0 .../cosmos/CosmosAutoConfigurationTest.java | 27 +- .../cosmos/CosmosPropertiesTest.java | 10 +- ...RepositoriesAutoConfigurationUnitTest.java | 0 .../cosmos/PropertySettingUtil.java | 30 +- .../cosmos/TestAutoConfigurationPackage.java | 0 ...TestAutoConfigurationPackageRegistrar.java | 0 .../autoconfigure/cosmos/domain/Person.java | 0 .../cosmos/domain/PersonRepository.java | 0 .../jms/ConnectionStringResolverTest.java | 0 ...iumServiceBusJMSAutoConfigurationTest.java | 31 +- ...iumServiceBusJMSAutoConfigurationTest.java | 41 +- ...ureStorageResourcePatternResolverTest.java | 0 .../storage/StorageAutoConfigurationTest.java | 33 +- .../BlobStorageHealthIndicatorTest.java | 4 +- .../FileStorageHealthIndicatorTest.java | 4 +- .../resource/AzureBlobStorageTests.java | 0 .../AzurePropertyAutoConfigurationTest.java | 39 ++ .../unity/PreLegacyPropertyProcessorTest.java | 124 ++++++ ...dFoundryEnvironmentPostProcessorTests.java | 2 +- .../TestConfigWithAzureResourceManager.java | 35 ++ .../AzureContextAutoConfigurationTest.java | 36 +- .../AzureEventHubAutoConfigurationTest.java | 17 +- ...ureEventHubKafkaAutoConfigurationTest.java | 13 +- .../AzureServiceBusAutoConfigurationTest.java | 21 +- ...eServiceBusQueueAutoConfigurationTest.java | 26 +- ...eServiceBusTopicAutoConfigurationTest.java | 24 +- ...zureStorageQueueAutoConfigurationTest.java | 2 +- ...ureCloudFoundryServiceApplicationTest.java | 0 .../keyvault/CaseSensitiveKeyVaultTest.java | 2 +- .../spring/keyvault/InitializerTest.java | 4 +- .../KeyVaultEnvironmentPostProcessorTest.java | 90 +++- .../keyvault/KeyVaultOperationUnitTest.java | 0 .../KeyVaultPropertySourceUnitTest.java | 0 .../PostLegacyPropertyProcessorTest.java | 254 +++++++++++ .../aad-backend-oauth2-minimum.properties | 0 .../src/test/resources/aad.enable.config | 0 .../aad/microsoft-graph-user-groups.json | 0 .../src/test/resources/aadb2c.enable.config | 0 .../src/test/resources/application.properties | 0 .../test/resources/cloudfoundry/vcap1.json | 0 .../test/resources/cloudfoundry/vcap2.json | 0 .../test/resources/cloudfoundry/vcap3.json | 0 .../src/test/resources/cosmos.enable.config | 0 .../src/test/resources/fake-pfx-cert.pfx | 0 .../src/test/resources/gremlin.enable.config | 0 .../src/test/resources/jwt-bad-issuer.txt | 0 .../src/test/resources/jwt-null-issuer.txt | 0 .../src/test/resources/jwt-signed.txt | 0 .../src/test/resources/jwt-valid-issuer.txt | 0 .../src/test/resources/logback-test.xml | 13 +- .../src/test/resources/nopwdcert.pfx | Bin .../resources/servicebusjms.enable.config | 0 .../src/test/resources/storage.enable.config | 0 .../src/test/resources/test-public-key.txt | 0 .../src/test/resources/testkeyvault.pfx | Bin sdk/spring/azure-spring-cloud-context/pom.xml | 139 ++---- .../AzureContextAutoConfiguration.java | 76 ---- .../AzureEnvironmentAutoConfiguration.java | 34 -- .../context/core/api/CredentialSupplier.java | 23 - .../context/core/api/CredentialsProvider.java | 16 - .../context/core/api/EnvironmentProvider.java | 17 - .../context/core/config/package-info.java | 7 - .../context/core/enums/AzureEnvironments.java | 27 -- .../core/impl/DefaultCredentialsProvider.java | 62 --- .../core/impl/DefaultEnvironmentProvider.java | 28 -- .../cloud/context/core/util/Constants.java | 35 -- .../com/azure/spring/core}/ApplicationId.java | 26 +- .../spring/core/env/AzureEnvironment.java | 398 +++++++++++++++++ .../core/enums => core/env}/package-info.java | 4 +- .../com/azure/spring/core/package-info.java | 7 + .../context => }/core/util/Memoizer.java | 2 +- .../{cloud/context => }/core/util/Tuple.java | 2 +- .../context => }/core/util/TypeMap.java | 2 +- .../azure/spring/core/util/package-info.java | 7 + .../DefaultSpringCredentialBuilder.java | 0 .../PrefixedSpringCredentialBuilder.java | 0 .../identity/SpringCredentialBuilderBase.java | 35 +- .../azure/spring/identity/package-info.java | 2 +- .../main/resources/META-INF/spring.factories | 3 - .../AzureEnvironmentConfigurationTest.java | 69 --- .../cloud/context/core/ApplicationIdTest.java | 5 +- .../cloud/context/core/MemoizerTest.java | 14 +- .../DefaultSpringCredentialBuilderTest.java | 0 .../PrefixedSpringCredentialBuilderTest.java | 0 .../SpringCredentialBuilderBaseTest.java | 50 ++- .../identity/SpringCredentialTestBase.java | 0 .../azure-spring-cloud-messaging/pom.xml | 6 + .../CHANGELOG.md | 4 + .../README.md | 2 +- .../pom.xml | 41 ++ .../core/api/AzureResourceMetadata.java | 38 ++ .../cloud/context/core/api/package-info.java | 7 + .../cloud/context/core/impl/AzureManager.java | 14 +- .../impl/EventHubConsumerGroupManager.java | 11 +- .../context/core/impl/EventHubManager.java | 8 +- .../core/impl/EventHubNamespaceManager.java | 6 +- .../context/core/impl/RedisCacheManager.java | 6 +- .../core/impl/ResourceGroupManager.java | 6 +- .../core/impl/ServiceBusNamespaceManager.java | 8 +- .../core/impl/ServiceBusQueueManager.java | 8 +- .../core/impl/ServiceBusTopicManager.java | 8 +- .../ServiceBusTopicSubscriptionManager.java | 8 +- .../core/impl/StorageAccountManager.java | 9 +- .../cloud/context/core/impl/package-info.java | 0 .../StorageConnectionStringProvider.java | 0 .../context/core/storage/package-info.java | 0 .../azure-spring-cloud-starter-cache/pom.xml | 10 +- .../pom.xml | 4 +- .../pom.xml | 5 + .../pom.xml | 5 + .../pom.xml | 12 +- .../azure-spring-cloud-storage/CHANGELOG.md | 52 --- sdk/spring/azure-spring-cloud-storage/pom.xml | 170 -------- .../main/resources/META-INF/spring.factories | 2 - .../src/test/resources/logback-test.xml | 12 - .../org.mockito.plugins.MockMaker | 1 - .../pom.xml | 6 + .../config/EventHubBinderConfiguration.java | 19 +- ...tHubChannelResourceManagerProvisioner.java | 2 +- .../provisioning/EventHubProvisioner.java | 17 + .../pom.xml | 5 - .../pom.xml | 10 +- .../ServiceBusQueueBinderConfiguration.java | 6 +- ...ueueChannelResourceManagerProvisioner.java | 2 +- .../pom.xml | 5 + .../ServiceBusTopicBinderConfiguration.java | 6 +- ...opicChannelResourceManagerProvisioner.java | 2 +- .../azure-spring-cloud-test-eventhubs/pom.xml | 4 - .../factory/DefaultEventHubClientFactory.java | 14 +- .../eventhub/impl/EventHubRxTemplate.java | 2 +- .../eventhub/impl/EventHubTemplate.java | 2 +- .../support/RxEventHubTestOperation.java | 2 +- .../DefaultEventHubClientFactoryTest.java | 19 +- .../AbstractServiceBusSenderFactory.java | 31 +- .../DefaultServiceBusQueueClientFactory.java | 12 +- .../DefaultServiceBusTopicClientFactory.java | 15 +- .../factory/ServiceBusProvisioner.java | 19 + .../topic/ServiceBusTopicTemplate.java | 2 +- .../DefaultStorageQueueClientFactory.java | 16 +- sdk/spring/ci.yml | 20 +- sdk/spring/pom.xml | 30 +- 401 files changed, 3211 insertions(+), 2275 deletions(-) delete mode 100644 sdk/spring/azure-identity-spring/README.md delete mode 100644 sdk/spring/azure-identity-spring/pom.xml delete mode 100644 sdk/spring/azure-spring-boot/pom.xml delete mode 100644 sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/AzureCloudUrls.java delete mode 100644 sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/Constants.java delete mode 100644 sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/PropertyLoader.java delete mode 100644 sdk/spring/azure-spring-boot/src/main/resources/META-INF/spring.factories delete mode 100644 sdk/spring/azure-spring-boot/src/test/resources/logback-test.xml delete mode 100644 sdk/spring/azure-spring-boot/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker rename sdk/spring/{azure-spring-boot/CHANGELOG.md => azure-spring-cloud-autoconfigure/CHANGELOG-SPRINGBOOT.md} (99%) rename sdk/spring/{azure-spring-boot/README.md => azure-spring-cloud-autoconfigure/README-SPRINGBOOT.md} (97%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/AADApplicationType.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/AADAuthorizationGrantType.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/AADAuthorizationServerEndpoints.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/AADClientRegistrationRepository.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/AADIssuerJWSKeySelector.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/AADJwtDecoderProviderConfiguration.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/AADJwtGrantedAuthoritiesConverter.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/AADOAuth2AuthenticatedPrincipal.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/AADOAuth2ClientConfiguration.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/AADTrustedIssuerRepository.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter.java (98%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/JacksonHttpSessionOAuth2AuthorizedClientRepository.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/implementation/constants/AADTokenClaim.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/implementation/constants/AuthorityPrefix.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/implementation/jackson/AADClientRegistrationDeserializer.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/implementation/jackson/AADClientRegistrationMixin.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/implementation/jackson/AADOAuth2ClientJackson2Module.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/implementation/jackson/JsonNodeUtils.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/implementation/jackson/SerializerUtils.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/implementation/jackson/StdConverters.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/package-info.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/webapi/AADJwtBearerTokenAuthenticationConverter.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/webapi/AADOBOOAuth2AuthorizedClientProvider.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/webapi/AADResourceServerConfiguration.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/webapi/AADResourceServerProperties.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/webapi/AADResourceServerWebSecurityConfigurerAdapter.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/webapi/package-info.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/webapi/validator/AADJwtAudienceValidator.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/webapi/validator/AADJwtClaimValidator.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/webapi/validator/AADJwtIssuerValidator.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/webapi/validator/package-info.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/webapp/AADAzureDelegatedOAuth2AuthorizedClientProvider.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/webapp/AADHandleConditionalAccessFilter.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/webapp/AADOAuth2AuthorizationCodeGrantRequestEntityConverter.java (97%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/webapp/AADOAuth2AuthorizationRequestResolver.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/webapp/AADOAuth2UserService.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/webapp/AADWebApplicationConfiguration.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/webapp/AADWebSecurityConfigurerAdapter.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/webapp/AuthorizationClientProperties.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/webapp/AzureClientRegistration.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/webapp/GraphClient.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/webapp/GroupInformation.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/aad/webapp/package-info.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/aad/AADAppRoleStatelessAuthenticationFilter.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilter.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilterAutoConfiguration.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/aad/AADAuthenticationProperties.java (99%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/aad/AADAutoConfiguration.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/aad/AzureADGraphClient.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/aad/Constants.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/aad/JacksonObjectMapperFactory.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/aad/Membership.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/aad/Memberships.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/aad/UserPrincipal.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/aad/UserPrincipalManager.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/aad/package-info.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CAuthorizationRequestResolver.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CAutoConfiguration.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CClientRegistrationRepository.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CConditions.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CConfigurationException.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CJwtBearerTokenAuthenticationConverter.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CLogoutSuccessHandler.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2COAuth2AuthorizationCodeGrantRequestEntityConverter.java (92%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2COAuth2ClientConfiguration.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2COidcLoginConfigurer.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CProperties.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CResourceServerAutoConfiguration.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CTrustedIssuerRepository.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CURL.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/b2c/AuthorizationClientProperties.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/b2c/package-info.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/condition/aad/ClientRegistrationCondition.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/condition/aad/ResourceServerCondition.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/condition/aad/WebApplicationCondition.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/condition/aad/package-info.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosAutoConfiguration.java (61%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosHealthConfiguration.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosHealthIndicator.java (94%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosProperties.java (93%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosReactiveRepositoriesAutoConfiguration.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosReactiveRepositoriesAutoConfigureRegistrar.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosRepositoriesAutoConfiguration.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosRepositoriesAutoConfigureRegistrar.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/cosmos/package-info.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/jms/AzureServiceBusJMSProperties.java (88%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/jms/ConnectionStringResolver.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/jms/NonPremiumServiceBusJMSAutoConfiguration.java (90%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/jms/PremiumServiceBusJMSAutoConfiguration.java (85%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/jms/ServiceBusKey.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/jms/SpringServiceBusJmsConnectionFactory.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/jms/package-info.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/storage/StorageAutoConfiguration.java (78%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/storage/StorageHealthConfiguration.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/storage/StorageProperties.java (85%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/storage/actuator/BlobStorageHealthIndicator.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/storage/actuator/Constants.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/storage/actuator/FileStorageHealthIndicator.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/storage/actuator/package-info.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/storage/package-info.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/storage/resource/AzureStorageProtocolResolver.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/storage/resource/AzureStorageResource.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/storage/resource/AzureStorageResourcePatternResolver.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/storage/resource/AzureStorageUtils.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/storage/resource/BlobStorageResource.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/storage/resource/FileStorageResource.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/storage/resource/StorageRuntimeException.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/storage/resource/StorageType.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/autoconfigure/storage/resource/package-info.java (100%) create mode 100644 sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/unity/AbstractLegacyPropertyEnvironmentPostProcessor.java create mode 100644 sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/unity/AzureProperties.java create mode 100644 sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/unity/AzurePropertyAutoConfiguration.java create mode 100644 sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/unity/CredentialProperties.java create mode 100644 sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/unity/EnvironmentProperties.java create mode 100644 sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/unity/PreLegacyPropertyEnvironmentPostProcessor.java rename sdk/spring/{azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util => azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/unity}/package-info.java (50%) rename sdk/spring/{azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/config/AzureProperties.java => azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/context/AzureContextProperties.java} (80%) create mode 100644 sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/context/AzureResourceManagerAutoConfiguration.java rename sdk/spring/{azure-spring-cloud-context => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/cloud/autoconfigure/context/package-info.java (100%) rename sdk/spring/{azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/factory => azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/eventhub}/EventHubConnectionStringProvider.java (96%) rename sdk/spring/{azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/factory => azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/servicebus}/ServiceBusConnectionStringProvider.java (97%) rename sdk/spring/{azure-spring-cloud-storage => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/cloud/autoconfigure/storage/AzureStorageProperties.java (99%) rename sdk/spring/{azure-spring-cloud-storage => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/cloud/autoconfigure/storage/AzureStorageQueueAutoConfiguration.java (84%) rename sdk/spring/{azure-spring-cloud-storage => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/cloud/autoconfigure/storage/package-info.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/cloudfoundry/environment/Constants.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/cloudfoundry/environment/VcapPojo.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/cloudfoundry/environment/VcapProcessor.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/cloudfoundry/environment/VcapResult.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/cloudfoundry/environment/VcapServiceConfig.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/cloudfoundry/environment/VcapServiceType.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/cloudfoundry/environment/package-info.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessor.java (94%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessorHelper.java (82%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/keyvault/KeyVaultHealthConfiguration.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/keyvault/KeyVaultHealthIndicator.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/keyvault/KeyVaultOperation.java (98%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/keyvault/KeyVaultProperties.java (69%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/keyvault/KeyVaultPropertySource.java (90%) create mode 100644 sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/keyvault/PostLegacyPropertyEnvironmentPostProcessor.java rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/keyvault/package-info.java (100%) create mode 100644 sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/utils/PropertyLoader.java rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/java/com/azure/spring/utils/package-info.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/main/resources/META-INF/project.properties (100%) create mode 100644 sdk/spring/azure-spring-cloud-autoconfigure/src/main/resources/legacy-keyvault-property-suffix-mapping.properties create mode 100644 sdk/spring/azure-spring-cloud-autoconfigure/src/main/resources/legacy-property-mapping.properties rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/samples/java/com/azure/spring/aad/AADWebApplicationAndResourceServerConfig.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/samples/java/com/azure/spring/aad/JsonMapper.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/samples/java/com/azure/spring/aad/webapi/AADOAuth2ResourceServerSecurityConfig.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/samples/java/com/azure/spring/aad/webapi/HomeController.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/samples/java/com/azure/spring/aad/webapi/SampleController.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/samples/java/com/azure/spring/aad/webapp/AADOAuth2LoginSecurityConfig.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/samples/java/com/azure/spring/aad/webapp/AuthorityController.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/samples/java/com/azure/spring/aad/webapp/ClientController.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/samples/java/com/azure/spring/aad/webapp/OnDemandClientController.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/samples/java/com/azure/spring/aad/webapp/RoleController.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/samples/java/com/azure/spring/aad/webapp/WebApiController.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/samples/java/com/azure/spring/autoconfigure/b2c/ResourceServerConfiguration.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/samples/java/com/azure/spring/autoconfigure/b2c/ResourceServerController.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/samples/java/com/azure/spring/autoconfigure/b2c/WebappAccessResourceConfiguration.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/samples/java/com/azure/spring/autoconfigure/b2c/WebappAccessResourceController.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/samples/java/com/azure/spring/cosmos/CosmosSampleApplication.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/samples/java/com/azure/spring/cosmos/User.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/samples/java/com/azure/spring/cosmos/UserRepository.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/samples/java/com/azure/spring/jms/CustomMessageConverter.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/samples/java/com/azure/spring/jms/QueueReceiveController.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/samples/java/com/azure/spring/jms/SendController.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/samples/java/com/azure/spring/jms/TopicReceiveController.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/samples/java/com/azure/spring/jms/User.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/samples/java/com/azure/spring/keyvault/KeyVaultSample.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/aad/AADApplicationTypeTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/aad/AADClientRegistrationRepositoryTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/aad/AADOAuth2ClientConfigurationTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/aad/implementation/jackson/SerializerUtilsTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/aad/webapi/AADJwtBearerTokenAuthenticationConverterTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/aad/webapi/AADResourceServerConfigurationTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/aad/webapi/AADResourceServerPropertiesTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/aad/webapi/validator/AADJwtAudienceValidatorTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/aad/webapi/validator/AADJwtIssuerValidatorTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/aad/webapp/AADAccessTokenGroupRolesExtractionTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/aad/webapp/AADAzureDelegatedOAuth2AuthorizedClientProviderTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/aad/webapp/AADIdTokenRolesExtractionTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/aad/webapp/AADOAuth2AuthorizationCodeGrantRequestEntityConverterTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/aad/webapp/WebApplicationContextRunnerUtils.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/aad/AADAppRoleAuthenticationFilterTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilterPropertiesTest.java (68%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilterTest.java (83%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/aad/AADAuthenticationPropertiesTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/aad/AzureADGraphClientTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/aad/MembershipTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/aad/MicrosoftGraphConstants.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/aad/ResourceRetrieverTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/aad/TestConstants.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/aad/UserPrincipalAzureADGraphTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/aad/UserPrincipalManagerAudienceTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/aad/UserPrincipalManagerTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/aad/UserPrincipalMicrosoftGraphTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CAuthorizationRequestResolverTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CAutoConfigurationTest.java (75%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CConstants.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CLogoutSuccessHandlerTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CResourceServerAutoConfigurationTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CURLTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CUserPrincipalTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/b2c/AbstractAADB2COAuth2ClientTestConfiguration.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/condition/aad/AbstractCondition.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/condition/aad/ClientRegistrationConditionTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/condition/aad/ResourceServerConditionTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/condition/aad/WebApplicationConditionTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/cosmos/CosmosAutoConfigurationTest.java (70%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/cosmos/CosmosPropertiesTest.java (84%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/cosmos/CosmosRepositoriesAutoConfigurationUnitTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/cosmos/PropertySettingUtil.java (57%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/cosmos/TestAutoConfigurationPackage.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/cosmos/TestAutoConfigurationPackageRegistrar.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/cosmos/domain/Person.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/cosmos/domain/PersonRepository.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/jms/ConnectionStringResolverTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/jms/NonPremiumServiceBusJMSAutoConfigurationTest.java (74%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/jms/PremiumServiceBusJMSAutoConfigurationTest.java (65%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/storage/AzureStorageResourcePatternResolverTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/storage/StorageAutoConfigurationTest.java (57%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/storage/actuator/BlobStorageHealthIndicatorTest.java (96%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/storage/actuator/FileStorageHealthIndicatorTest.java (96%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/autoconfigure/storage/resource/AzureBlobStorageTests.java (100%) create mode 100644 sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/unity/AzurePropertyAutoConfigurationTest.java create mode 100644 sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/unity/PreLegacyPropertyProcessorTest.java create mode 100644 sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/commonconfig/TestConfigWithAzureResourceManager.java rename sdk/spring/{azure-spring-cloud-context => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/cloud/autoconfigure/context/AzureContextAutoConfigurationTest.java (66%) rename sdk/spring/{azure-spring-cloud-storage => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/cloud/autoconfigure/storage/AzureStorageQueueAutoConfigurationTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/cloudfoundry/environment/AzureCloudFoundryServiceApplicationTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/keyvault/CaseSensitiveKeyVaultTest.java (92%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/keyvault/InitializerTest.java (87%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessorTest.java (58%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/keyvault/KeyVaultOperationUnitTest.java (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/java/com/azure/spring/keyvault/KeyVaultPropertySourceUnitTest.java (100%) create mode 100644 sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/keyvault/PostLegacyPropertyProcessorTest.java rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/resources/aad-backend-oauth2-minimum.properties (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/resources/aad.enable.config (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/resources/aad/microsoft-graph-user-groups.json (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/resources/aadb2c.enable.config (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/resources/application.properties (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/resources/cloudfoundry/vcap1.json (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/resources/cloudfoundry/vcap2.json (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/resources/cloudfoundry/vcap3.json (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/resources/cosmos.enable.config (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/resources/fake-pfx-cert.pfx (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/resources/gremlin.enable.config (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/resources/jwt-bad-issuer.txt (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/resources/jwt-null-issuer.txt (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/resources/jwt-signed.txt (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/resources/jwt-valid-issuer.txt (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/resources/nopwdcert.pfx (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/resources/servicebusjms.enable.config (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/resources/storage.enable.config (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/resources/test-public-key.txt (100%) rename sdk/spring/{azure-spring-boot => azure-spring-cloud-autoconfigure}/src/test/resources/testkeyvault.pfx (100%) delete mode 100644 sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/autoconfigure/context/AzureContextAutoConfiguration.java delete mode 100644 sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/autoconfigure/context/AzureEnvironmentAutoConfiguration.java delete mode 100644 sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/api/CredentialSupplier.java delete mode 100644 sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/api/CredentialsProvider.java delete mode 100644 sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/api/EnvironmentProvider.java delete mode 100644 sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/config/package-info.java delete mode 100644 sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/enums/AzureEnvironments.java delete mode 100644 sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/DefaultCredentialsProvider.java delete mode 100644 sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/DefaultEnvironmentProvider.java delete mode 100644 sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util/Constants.java rename sdk/spring/{azure-spring-boot/src/main/java/com/azure/spring/utils => azure-spring-cloud-context/src/main/java/com/azure/spring/core}/ApplicationId.java (73%) create mode 100644 sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/core/env/AzureEnvironment.java rename sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/{cloud/context/core/enums => core/env}/package-info.java (50%) create mode 100644 sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/core/package-info.java rename sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/{cloud/context => }/core/util/Memoizer.java (95%) rename sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/{cloud/context => }/core/util/Tuple.java (95%) rename sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/{cloud/context => }/core/util/TypeMap.java (91%) create mode 100644 sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/core/util/package-info.java rename sdk/spring/{azure-identity-spring => azure-spring-cloud-context}/src/main/java/com/azure/spring/identity/DefaultSpringCredentialBuilder.java (100%) rename sdk/spring/{azure-identity-spring => azure-spring-cloud-context}/src/main/java/com/azure/spring/identity/PrefixedSpringCredentialBuilder.java (100%) rename sdk/spring/{azure-identity-spring => azure-spring-cloud-context}/src/main/java/com/azure/spring/identity/SpringCredentialBuilderBase.java (61%) rename sdk/spring/{azure-identity-spring => azure-spring-cloud-context}/src/main/java/com/azure/spring/identity/package-info.java (78%) delete mode 100644 sdk/spring/azure-spring-cloud-context/src/main/resources/META-INF/spring.factories delete mode 100644 sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/cloud/autoconfigure/context/AzureEnvironmentConfigurationTest.java rename sdk/spring/{azure-identity-spring => azure-spring-cloud-context}/src/test/java/com/azure/spring/identity/DefaultSpringCredentialBuilderTest.java (100%) rename sdk/spring/{azure-identity-spring => azure-spring-cloud-context}/src/test/java/com/azure/spring/identity/PrefixedSpringCredentialBuilderTest.java (100%) rename sdk/spring/{azure-identity-spring => azure-spring-cloud-context}/src/test/java/com/azure/spring/identity/SpringCredentialBuilderBaseTest.java (65%) rename sdk/spring/{azure-identity-spring => azure-spring-cloud-context}/src/test/java/com/azure/spring/identity/SpringCredentialTestBase.java (100%) create mode 100644 sdk/spring/azure-spring-cloud-resourcemanager/CHANGELOG.md rename sdk/spring/{azure-spring-cloud-storage => azure-spring-cloud-resourcemanager}/README.md (96%) create mode 100644 sdk/spring/azure-spring-cloud-resourcemanager/pom.xml create mode 100644 sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/api/AzureResourceMetadata.java create mode 100644 sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/api/package-info.java rename sdk/spring/{azure-spring-cloud-context => azure-spring-cloud-resourcemanager}/src/main/java/com/azure/spring/cloud/context/core/impl/AzureManager.java (87%) rename sdk/spring/{azure-spring-cloud-context => azure-spring-cloud-resourcemanager}/src/main/java/com/azure/spring/cloud/context/core/impl/EventHubConsumerGroupManager.java (87%) rename sdk/spring/{azure-spring-cloud-context => azure-spring-cloud-resourcemanager}/src/main/java/com/azure/spring/cloud/context/core/impl/EventHubManager.java (90%) rename sdk/spring/{azure-spring-cloud-context => azure-spring-cloud-resourcemanager}/src/main/java/com/azure/spring/cloud/context/core/impl/EventHubNamespaceManager.java (90%) rename sdk/spring/{azure-spring-cloud-context => azure-spring-cloud-resourcemanager}/src/main/java/com/azure/spring/cloud/context/core/impl/RedisCacheManager.java (90%) rename sdk/spring/{azure-spring-cloud-context => azure-spring-cloud-resourcemanager}/src/main/java/com/azure/spring/cloud/context/core/impl/ResourceGroupManager.java (89%) rename sdk/spring/{azure-spring-cloud-context => azure-spring-cloud-resourcemanager}/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusNamespaceManager.java (82%) rename sdk/spring/{azure-spring-cloud-context => azure-spring-cloud-resourcemanager}/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusQueueManager.java (85%) rename sdk/spring/{azure-spring-cloud-context => azure-spring-cloud-resourcemanager}/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusTopicManager.java (85%) rename sdk/spring/{azure-spring-cloud-context => azure-spring-cloud-resourcemanager}/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusTopicSubscriptionManager.java (86%) rename sdk/spring/{azure-spring-cloud-context => azure-spring-cloud-resourcemanager}/src/main/java/com/azure/spring/cloud/context/core/impl/StorageAccountManager.java (84%) rename sdk/spring/{azure-spring-cloud-context => azure-spring-cloud-resourcemanager}/src/main/java/com/azure/spring/cloud/context/core/impl/package-info.java (100%) rename sdk/spring/{azure-spring-cloud-context => azure-spring-cloud-resourcemanager}/src/main/java/com/azure/spring/cloud/context/core/storage/StorageConnectionStringProvider.java (100%) rename sdk/spring/{azure-spring-cloud-context => azure-spring-cloud-resourcemanager}/src/main/java/com/azure/spring/cloud/context/core/storage/package-info.java (100%) delete mode 100644 sdk/spring/azure-spring-cloud-storage/CHANGELOG.md delete mode 100644 sdk/spring/azure-spring-cloud-storage/pom.xml delete mode 100644 sdk/spring/azure-spring-cloud-storage/src/main/resources/META-INF/spring.factories delete mode 100644 sdk/spring/azure-spring-cloud-storage/src/test/resources/logback-test.xml delete mode 100644 sdk/spring/azure-spring-cloud-storage/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker create mode 100644 sdk/spring/azure-spring-cloud-stream-binder-eventhubs/src/main/java/com/azure/spring/eventhub/stream/binder/provisioning/EventHubProvisioner.java create mode 100644 sdk/spring/azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/factory/ServiceBusProvisioner.java diff --git a/eng/code-quality-reports/src/main/resources/spotbugs/spotbugs-exclude.xml b/eng/code-quality-reports/src/main/resources/spotbugs/spotbugs-exclude.xml index b07da304ba766..d656a83ceeb43 100755 --- a/eng/code-quality-reports/src/main/resources/spotbugs/spotbugs-exclude.xml +++ b/eng/code-quality-reports/src/main/resources/spotbugs/spotbugs-exclude.xml @@ -2314,9 +2314,6 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/eng/jacoco-test-coverage/pom.xml b/eng/jacoco-test-coverage/pom.xml index 25b1b013fe179..01cc7ca2a3e48 100644 --- a/eng/jacoco-test-coverage/pom.xml +++ b/eng/jacoco-test-coverage/pom.xml @@ -414,13 +414,18 @@ com.azure.spring - azure-identity-spring - 1.8.0-beta.1 + azure-spring-cloud-context + 2.8.0-beta.1 + + + com.azure.spring + azure-spring-cloud-autoconfigure + 2.8.0-beta.1 com.azure.spring - azure-spring-boot - 3.8.0-beta.1 + azure-spring-cloud-resourcemanager + 2.8.0-beta.1 com.azure.spring @@ -467,11 +472,6 @@ azure-spring-data-cosmos 3.10.0-beta.1 - - com.azure.spring - azure-spring-cloud-context - 2.8.0-beta.1 - com.azure.spring azure-spring-integration-core @@ -497,16 +497,6 @@ azure-spring-integration-storage-queue 2.8.0-beta.1 - - com.azure.spring - azure-spring-cloud-storage - 2.8.0-beta.1 - - - com.azure.spring - azure-spring-cloud-autoconfigure - 2.8.0-beta.1 - com.azure.spring azure-spring-cloud-messaging diff --git a/eng/versioning/version_client.txt b/eng/versioning/version_client.txt index 763dd8f08beed..0533a6a0958c5 100644 --- a/eng/versioning/version_client.txt +++ b/eng/versioning/version_client.txt @@ -144,7 +144,6 @@ com.azure.spring:azure-spring-cloud-appconfiguration-config;2.0.0;2.0.1-beta.1 com.azure.spring:azure-spring-cloud-feature-management-web;2.0.0;2.1.0-beta.1 com.azure.spring:azure-spring-cloud-feature-management;2.0.0;2.1.0-beta.1 com.azure.spring:azure-spring-cloud-starter-appconfiguration-config;2.0.0;2.0.1-beta.1 -com.azure.spring:azure-identity-spring;1.7.0;1.8.0-beta.1 com.azure.spring:azure-spring-boot-bom;3.6.0;3.7.0 com.azure.spring:azure-spring-boot-starter-active-directory-b2c;3.7.0;3.8.0-beta.1 com.azure.spring:azure-spring-boot-starter-active-directory;3.7.0;3.8.0-beta.1 @@ -154,9 +153,9 @@ com.azure.spring:azure-spring-boot-starter-keyvault-secrets;3.7.0;3.8.0-beta.1 com.azure.spring:azure-spring-boot-starter-servicebus-jms;3.7.0;3.8.0-beta.1 com.azure.spring:azure-spring-boot-starter-storage;3.7.0;3.8.0-beta.1 com.azure.spring:azure-spring-boot-starter;3.7.0;3.8.0-beta.1 -com.azure.spring:azure-spring-boot;3.7.0;3.8.0-beta.1 com.azure.spring:azure-spring-cloud-autoconfigure;2.7.0;2.8.0-beta.1 com.azure.spring:azure-spring-cloud-context;2.7.0;2.8.0-beta.1 +com.azure.spring:azure-spring-cloud-resourcemanager;2.7.0;2.8.0-beta.1 com.azure.spring:azure-spring-cloud-dependencies;2.6.0;2.7.0 com.azure.spring:azure-spring-cloud-messaging;2.7.0;2.8.0-beta.1 com.azure.spring:azure-spring-cloud-starter-cache;2.7.0;2.8.0-beta.1 @@ -164,7 +163,6 @@ com.azure.spring:azure-spring-cloud-starter-eventhubs-kafka;2.7.0;2.8.0-beta.1 com.azure.spring:azure-spring-cloud-starter-eventhubs;2.7.0;2.8.0-beta.1 com.azure.spring:azure-spring-cloud-starter-servicebus;2.7.0;2.8.0-beta.1 com.azure.spring:azure-spring-cloud-starter-storage-queue;2.7.0;2.8.0-beta.1 -com.azure.spring:azure-spring-cloud-storage;2.7.0;2.8.0-beta.1 com.azure.spring:azure-spring-cloud-stream-binder-eventhubs;2.7.0;2.8.0-beta.1 com.azure.spring:azure-spring-cloud-stream-binder-servicebus-core;2.7.0;2.8.0-beta.1 com.azure.spring:azure-spring-cloud-stream-binder-servicebus-queue;2.7.0;2.8.0-beta.1 diff --git a/sdk/boms/azure-spring-boot-bom/CHANGELOG.md b/sdk/boms/azure-spring-boot-bom/CHANGELOG.md index bf8a56e9ac019..2e00d6c8c1ad5 100644 --- a/sdk/boms/azure-spring-boot-bom/CHANGELOG.md +++ b/sdk/boms/azure-spring-boot-bom/CHANGELOG.md @@ -20,7 +20,7 @@ This release is compatible with Spring Boot 2.5. ### New Features - Upgrade to [spring-boot-dependencies:2.5.2](https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-dependencies/2.5.2/spring-boot-dependencies-2.5.2.pom). - Upgrade to [azure-spring-boot-starter-keyvault-certificates:3.0.1](https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/spring/azure-spring-boot-starter-keyvault-certificates/CHANGELOG.md#301-2021-07-01). -- Upgrade to [azure-spring-boot:3.6.1](https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/spring/azure-spring-boot/CHANGELOG.md#361-2021-07-02). +- Upgrade to [azure-spring-boot:3.6.1](https://github.com/Azure/azure-sdk-for-java/blob/b6a7aba854d35d2a861dbf2786b5e41b9d3538ad/sdk/spring/azure-spring-boot/CHANGELOG.md#361-2021-07-02). - Upgrade to [azure-spring-boot-starter:3.6.1](https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/spring/azure-spring-boot-starter/CHANGELOG.md#361-2021-07-02). - Upgrade to [azure-spring-boot-starter-active-directory:3.6.1](https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/spring/azure-spring-boot-starter-active-directory/CHANGELOG.md#361-2021-07-02). - Upgrade to [azure-spring-boot-starter-active-directory-b2c:3.6.1](https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/spring/azure-spring-boot-starter-active-directory-b2c/CHANGELOG.md#361-2021-07-02). diff --git a/sdk/spring/azure-identity-spring/README.md b/sdk/spring/azure-identity-spring/README.md deleted file mode 100644 index 3f2cf94d19757..0000000000000 --- a/sdk/spring/azure-identity-spring/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# Azure Identity Spring Integration client library for Java - -[Source code][src] - -## Getting started - -### Prerequisites -- [Environment checklist][environment_checklist] - -## Key concepts -## Examples -## Troubleshooting -## Next steps -## Contributing -This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.microsoft.com. - -Please follow [instructions here](https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/spring/CONTRIBUTING.md) to build from source or contribute. - -If you encounter any bug, please file an issue [here](https://github.com/Azure/azure-sdk-for-java/issues). - -To suggest a new feature or changes that could be made, file an issue the same way you would for a bug. - -You can participate community driven [![Gitter](https://badges.gitter.im/Microsoft/spring-on-azure.svg)](https://gitter.im/Microsoft/spring-on-azure) - - -[src]: https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/spring/azure-identity-spring/src -[environment_checklist]: https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/spring/ENVIRONMENT_CHECKLIST.md#ready-to-run-checklist diff --git a/sdk/spring/azure-identity-spring/pom.xml b/sdk/spring/azure-identity-spring/pom.xml deleted file mode 100644 index 196c72c0170ef..0000000000000 --- a/sdk/spring/azure-identity-spring/pom.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - - 4.0.0 - - com.azure - azure-client-sdk-parent - 1.7.0 - ../../parents/azure-client-sdk-parent - - - com.azure.spring - azure-identity-spring - 1.8.0-beta.1 - jar - - Azure Identity Spring Integration Library - Azure Identity Spring Integration Library - https://github.com/Azure/azure-sdk-for-java - - - - org.springframework.boot - spring-boot - 2.5.3 - provided - - - org.springframework - spring-context - 5.3.9 - - - org.springframework - spring-core - 5.3.9 - - - com.azure - azure-identity - 1.3.5 - - - - - org.springframework.boot - spring-boot-starter-test - 2.5.3 - test - - - - - - - org.apache.maven.plugins - maven-enforcer-plugin - 3.0.0-M3 - - - - - org.springframework.boot:spring-boot:[2.5.3] - org.springframework:spring-context:[5.3.9] - org.springframework:spring-core:[5.3.9] - - - - - - - - - diff --git a/sdk/spring/azure-spring-boot-starter-active-directory-b2c/pom.xml b/sdk/spring/azure-spring-boot-starter-active-directory-b2c/pom.xml index ca641aa16f9d3..b87897e270bbb 100644 --- a/sdk/spring/azure-spring-boot-starter-active-directory-b2c/pom.xml +++ b/sdk/spring/azure-spring-boot-starter-active-directory-b2c/pom.xml @@ -19,22 +19,10 @@ Spring Boot Starter for Azure AD B2C and Spring Security Integration - - org.springframework.boot - spring-boot-starter - 2.5.3 - - - - org.springframework.boot - spring-boot-starter-validation - 2.5.3 - - com.azure.spring - azure-spring-boot - 3.8.0-beta.1 + azure-spring-boot-starter + 3.8.0-beta.1 @@ -106,8 +94,6 @@ javax.validation:validation-api:[2.0.1.Final] org.springframework:spring-web:[5.3.9] - org.springframework.boot:spring-boot-starter:[2.5.3] - org.springframework.boot:spring-boot-starter-validation:[2.5.3] org.springframework.security:spring-security-config:[5.5.1] org.springframework.security:spring-security-core:[5.5.1] org.springframework.security:spring-security-oauth2-client:[5.5.1] diff --git a/sdk/spring/azure-spring-boot-starter-active-directory/pom.xml b/sdk/spring/azure-spring-boot-starter-active-directory/pom.xml index 4f011317397b9..03ee803ebaa59 100644 --- a/sdk/spring/azure-spring-boot-starter-active-directory/pom.xml +++ b/sdk/spring/azure-spring-boot-starter-active-directory/pom.xml @@ -21,25 +21,15 @@ - org.springframework.boot - spring-boot-starter - 2.5.3 - - - org.springframework.boot - spring-boot-starter-validation - 2.5.3 + com.azure.spring + azure-spring-boot-starter + 3.8.0-beta.1 org.springframework.boot spring-boot-starter-webflux 2.5.3 - - com.azure.spring - azure-spring-boot - 3.8.0-beta.1 - org.springframework spring-web @@ -75,6 +65,8 @@ jackson-databind 2.12.4 + + io.projectreactor.netty reactor-netty @@ -96,9 +88,7 @@ com.microsoft.azure:msal4j:[1.10.1] com.nimbusds:nimbus-jose-jwt:[9.10] io.projectreactor.netty:reactor-netty:[1.0.9] - org.springframework.boot:spring-boot-starter-validation:[2.5.3] org.springframework.boot:spring-boot-starter-webflux:[2.5.3] - org.springframework.boot:spring-boot-starter:[2.5.3] org.springframework.security:spring-security-config:[5.5.1] org.springframework.security:spring-security-core:[5.5.1] org.springframework.security:spring-security-web:[5.5.1] diff --git a/sdk/spring/azure-spring-boot-starter-cosmos/README.md b/sdk/spring/azure-spring-boot-starter-cosmos/README.md index 50324de37a6c5..eb2e38762f375 100644 --- a/sdk/spring/azure-spring-boot-starter-cosmos/README.md +++ b/sdk/spring/azure-spring-boot-starter-cosmos/README.md @@ -39,21 +39,46 @@ - Supports [spring-boot-starter-data-rest](https://projects.spring.io/spring-data-rest/). - Supports List and nested type in domain class. +### Configuration Options +Azure Cosmos Spring Boot Starter deprecates all legacy properties of which the prefix is `azure.cosmos` and uses `spring.cloud.azure.cosmos` instead. +When a deprecated property is detected while its active property is not found, the active property will be configured into the application environment with the value from the deprecated property. + +If you load configuration properties from Azure Key Vault, the preceding detection and replacement are also applicable for Key Vault property sources. Replaced properties from Key Vault have a higher priority than local ones. +Note that replaced properties will not be refreshed as common properties from Key Vault property source. +#### Active Properties + +|Name|Description| +|:---|:--- +spring.cloud.azure.cosmos.connection-mode|Represents the connection mode to be used by the client in the Azure Cosmos DB database service.| +spring.cloud.azure.cosmos.consistency-level|Cosmos DB consistency level.| +spring.cloud.azure.cosmos.database|Cosmos DB database name.| +spring.cloud.azure.cosmos.key|Cosmos DB key.| +spring.cloud.azure.cosmos.populate-query-metrics|Populate Diagnostics Strings and Query metrics.| +spring.cloud.azure.cosmos.uri|Cosmos DB URI.| + +#### Deprecated Properties +|Obsolete Type|Description|Replacement Type| +|:---|:---|:--- +azure.cosmos.connection-mode|Represents the connection mode to be used by the client in the Azure Cosmos DB database service.|**spring.cloud.azure.cosmos.connection-mode**| +azure.cosmos.consistency-level|Cosmos DB consistency level.|**spring.cloud.azure.cosmos.consistency-level**| +azure.cosmos.database|Cosmos DB database name.|**spring.cloud.azure.cosmos.database** | +azure.cosmos.key|Cosmos DB key.|**spring.cloud.azure.cosmos.key**| +azure.cosmos.populate-query-metrics|Populate Diagnostics Strings and Query metrics.|**spring.cloud.azure.cosmos.populate-query-metrics** | +azure.cosmos.uri|Cosmos DB URI.|**spring.cloud.azure.cosmos.uri** | + ## Examples ### Add the property setting Open `application.properties` file and add below properties with your Cosmos DB credentials. ```properties -azure.cosmos.uri=your-cosmos-uri -azure.cosmos.key=your-cosmos-key -azure.cosmos.database=your-cosmos-databasename -azure.cosmos.populateQueryMetrics=true +spring.cloud.azure.cosmos.uri=your-cosmos-uri +spring.cloud.azure.cosmos.key=your-cosmos-key +spring.cloud.azure.cosmos.database=your-cosmos-databasename +spring.cloud.azure.cosmos.populateQueryMetrics=true secondary-key=put-your-cosmos-secondary-key-here ``` -Property `azure.cosmos.consistency-level` is also supported. - AzureKeyCredential feature provides capability to rotate keys on the fly. You can use `AzureKeyCredential.update()` methods to rotate key. For more information on this, see the [Sample Application][sample_cosmos_switch_key] code. #### (Optional) Add Spring Boot Actuator diff --git a/sdk/spring/azure-spring-boot-starter-cosmos/pom.xml b/sdk/spring/azure-spring-boot-starter-cosmos/pom.xml index 9e232346c6dc3..646e27ba2ef51 100644 --- a/sdk/spring/azure-spring-boot-starter-cosmos/pom.xml +++ b/sdk/spring/azure-spring-boot-starter-cosmos/pom.xml @@ -20,20 +20,10 @@ https://github.com/Azure/azure-sdk-for-java - - org.springframework.boot - spring-boot-starter - 2.5.3 - - - org.springframework.boot - spring-boot-starter-validation - 2.5.3 - com.azure.spring - azure-spring-boot - 3.8.0-beta.1 + azure-spring-boot-starter + 3.8.0-beta.1 com.azure @@ -44,21 +34,6 @@ - - org.apache.maven.plugins - maven-enforcer-plugin - 3.0.0-M3 - - - - - org.springframework.boot:spring-boot-starter:[2.5.3] - org.springframework.boot:spring-boot-starter-validation:[2.5.3] - - - - - - - - org.springframework.boot - spring-boot-starter-validation - 2.5.3 - com.azure.spring - azure-spring-boot - 3.8.0-beta.1 - - - com.azure - azure-identity - 1.3.5 + azure-spring-boot-starter + 3.8.0-beta.1 com.azure @@ -48,21 +33,6 @@ - - org.apache.maven.plugins - maven-enforcer-plugin - 3.0.0-M3 - - - - - org.springframework.boot:spring-boot-starter:[2.5.3] - org.springframework.boot:spring-boot-starter-validation:[2.5.3] - - - - - + azure-spring-boot-starter + 3.8.0-beta.1 - - org.springframework.boot - spring-boot-starter-validation - 2.5.3 - org.springframework @@ -104,7 +99,6 @@ io.netty:netty-transport-native-kqueue:[4.1.66.Final] io.netty:netty-codec-http:[4.1.66.Final] org.springframework:spring-jms:[5.3.9] - org.springframework.boot:spring-boot-starter-validation:[2.5.3] diff --git a/sdk/spring/azure-spring-boot-starter-storage/README.md b/sdk/spring/azure-spring-boot-starter-storage/README.md index a6d01a8008ac8..dbc0ba2bad362 100644 --- a/sdk/spring/azure-spring-boot-starter-storage/README.md +++ b/sdk/spring/azure-spring-boot-starter-storage/README.md @@ -22,21 +22,33 @@ The project provides a Spring Boot Starter `azure-spring-boot-starter-storage` t ## Key concepts The [Azure Storage platform] is Microsoft's cloud storage solution for modern data storage scenarios. Core storage services offer a massively scalable object store for data objects, disk storage for Azure virtual machines (VMs), a file system service for the cloud, a messaging store for reliable messaging, and a NoSQL store. +### Configuration Options +Azure Storage Spring Boot Starter deprecates all legacy properties of which the prefix is `azure.storage` and uses `spring.cloud.azure.storage` instead. +When a deprecated property is detected while its active property is not found, the active property will be configured into the application environment with the value from the deprecated property. + +If you load configuration properties from Azure Key Vault, the preceding detection and replacement are also applicable for Key Vault property sources. Replaced properties from Key Vault have a higher priority than local ones. +Note that replaced properties will not be refreshed as common properties from Key Vault property source. +#### Active Properties + +|Name|Description|Comment| +|:---|:---|:--- +spring.cloud.azure.storage.account-name | The name of the Azure Storage account. | | +spring.cloud.azure.storage.account-key | The access key of the Azure Storage account. | | +spring.cloud.azure.storage.blob-endpoint | The blob endpoint of the Azure Storage account. | Optional when storage blob resource is used. | +spring.cloud.azure.storage.file-endpoint | The file endpoint of the Azure Storage account. | Optional when storage file resource is used | + +#### Deprecated Properties +|Obsolete Type|Description|Replacement Type| +|:---|:---|:--- +azure.storage.account-name | The name of the Azure Storage account. |**spring.cloud.azure.storage.account-name** | +azure.storage.account-key | The access key of the Azure Storage account. |**spring.cloud.azure.storage.account-key** | +azure.storage.blob-endpoint | The blob endpoint of the Azure Storage account. |**spring.cloud.azure.storage.blob-endpoint** | +azure.storage.file-endpoint | The file endpoint of the Azure Storage account. |**spring.cloud.azure.storage.file-endpoint** | + ## Examples Please use this [sample] as a reference for how to use **Azure Spring Boot Storage Starter** in your projects. -#### Auto-configuration for Azure Blob storage - -The `azure-spring-boot-starter-storage` provides the following configuration options in `application.properties`. - -Name | Description | Required ----|---|--- - azure.storage.accountName | The name of the Azure Storage account. | Yes | - azure.storage.accountKey | The access key of the Azure Storage account. | Yes | - azure.storage.blob-endpoint | The blob endpoint URL of the Azure Storage account. | [Optional] Required when storage blob service is used. | - azure.storage.file-endpoint | The file endpoint URL of the Azure Storage account. | [Optional] Required when storage file service is used | - #### Autowire a resource You can use the annotation of `@Value("azure-blob://[your-container-name]/[your-blob-name]")` to autowire a **blob** `Resource`. diff --git a/sdk/spring/azure-spring-boot-starter-storage/pom.xml b/sdk/spring/azure-spring-boot-starter-storage/pom.xml index e251019cd2121..be899ede3d7e7 100644 --- a/sdk/spring/azure-spring-boot-starter-storage/pom.xml +++ b/sdk/spring/azure-spring-boot-starter-storage/pom.xml @@ -22,14 +22,8 @@ com.azure.spring - azure-spring-boot - 3.8.0-beta.1 - - - - org.springframework.boot - spring-boot-starter-validation - 2.5.3 + azure-spring-boot-starter + 3.8.0-beta.1 @@ -48,20 +42,6 @@ - - org.apache.maven.plugins - maven-enforcer-plugin - 3.0.0-M3 - - - - - org.springframework.boot:spring-boot-starter-validation:[2.5.3] - - - - - + azure-spring-cloud-autoconfigure + 2.8.0-beta.1 diff --git a/sdk/spring/azure-spring-boot-test-aad-webapp-and-resource-server-with-obo/src/test/java/com/azure/test/aad/selenium/AADWebAppAndWebApiInOneAppIT.java b/sdk/spring/azure-spring-boot-test-aad-webapp-and-resource-server-with-obo/src/test/java/com/azure/test/aad/selenium/AADWebAppAndWebApiInOneAppIT.java index 5f15720a31be9..9b51c7d61546b 100644 --- a/sdk/spring/azure-spring-boot-test-aad-webapp-and-resource-server-with-obo/src/test/java/com/azure/test/aad/selenium/AADWebAppAndWebApiInOneAppIT.java +++ b/sdk/spring/azure-spring-boot-test-aad-webapp-and-resource-server-with-obo/src/test/java/com/azure/test/aad/selenium/AADWebAppAndWebApiInOneAppIT.java @@ -5,7 +5,6 @@ import com.azure.spring.aad.webapi.AADResourceServerWebSecurityConfigurerAdapter; import com.azure.spring.aad.webapp.AADWebSecurityConfigurerAdapter; import com.azure.spring.test.aad.AADWebApiITHelper; -import com.azure.spring.utils.AzureCloudUrls; import com.azure.test.aad.common.AADSeleniumITHelper; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -65,8 +64,8 @@ public void beforeAll() { properties.put("azure.activedirectory.client-secret", AAD_MULTI_TENANT_CLIENT_SECRET); properties.put("azure.activedirectory.user-group.allowed-groups", "group1"); properties.put("azure.activedirectory.post-logout-redirect-uri", "http://localhost:${server.port}"); - properties.put("azure.activedirectory.base-uri", AzureCloudUrls.getBaseUrl(AZURE_CLOUD_TYPE)); - properties.put("azure.activedirectory.graph-base-uri", AzureCloudUrls.getGraphBaseUrl(AZURE_CLOUD_TYPE)); + properties.put("azure.activedirectory.base-uri", AADSeleniumITHelper.getBaseUrl(AZURE_CLOUD_TYPE)); + properties.put("azure.activedirectory.graph-base-uri", AADSeleniumITHelper.getGraphBaseUrl(AZURE_CLOUD_TYPE)); properties.put("azure.activedirectory.application-type", "web_application_and_resource_server"); properties.put("azure.activedirectory.app-id-uri", "api://" + AAD_MULTI_TENANT_CLIENT_ID); diff --git a/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/spring/utils/test/ApplicationIdTest.java b/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/spring/utils/test/ApplicationIdTest.java index b6b13d5078b29..45fdce1781549 100644 --- a/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/spring/utils/test/ApplicationIdTest.java +++ b/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/spring/utils/test/ApplicationIdTest.java @@ -3,7 +3,7 @@ package com.azure.spring.utils.test; -import com.azure.spring.utils.ApplicationId; +import com.azure.spring.core.ApplicationId; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -16,7 +16,7 @@ public class ApplicationIdTest { so there are some requirements to run this test: 1. This test can not put in azure-spring-boot module. If put in azure-spring-boot module, azure-spring-boot-xxx.jar/META-INF/MANIFEST.MF can not be used. - 2. This test can not put in the same package with ApplicationId: "com.azure.spring.utils". + 2. This test can not put in the same package with ApplicationId: "com.azure.spring.core". If put in that package, then ApplicationId.class.getPackage().getImplementationVersion() will return null. 3. This test can not run in Intellij with default configuration. In Intellij, the default dependency type is "module", not "external library". diff --git a/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/AADITHelper.java b/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/AADITHelper.java index a4d917fd9b720..7a5250700d4b6 100644 --- a/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/AADITHelper.java +++ b/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/AADITHelper.java @@ -2,7 +2,7 @@ // Licensed under the MIT License. package com.azure.test.aad.selenium; -import com.azure.spring.utils.AzureCloudUrls; +import com.azure.test.aad.common.AADSeleniumITHelper; import java.util.HashMap; import java.util.Map; @@ -21,8 +21,8 @@ public static Map createDefaultProperties() { defaultProperties.put("azure.activedirectory.client-secret", AAD_SINGLE_TENANT_CLIENT_SECRET); defaultProperties.put("azure.activedirectory.user-group.allowed-groups", "group1"); defaultProperties.put("azure.activedirectory.post-logout-redirect-uri", "http://localhost:${server.port}"); - defaultProperties.put("azure.activedirectory.base-uri", AzureCloudUrls.getBaseUrl(AZURE_CLOUD_TYPE)); - defaultProperties.put("azure.activedirectory.graph-base-uri", AzureCloudUrls.getGraphBaseUrl(AZURE_CLOUD_TYPE)); + defaultProperties.put("azure.activedirectory.base-uri", AADSeleniumITHelper.getBaseUrl(AZURE_CLOUD_TYPE)); + defaultProperties.put("azure.activedirectory.graph-base-uri", AADSeleniumITHelper.getGraphBaseUrl(AZURE_CLOUD_TYPE)); return defaultProperties; } } diff --git a/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/oauth2client/issuedat/AADOauth2AuthorizedClientCachedIT.java b/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/oauth2client/issuedat/AADOauth2AuthorizedClientCachedIT.java index 4a253773cdb3f..c100ba1b60bc2 100644 --- a/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/oauth2client/issuedat/AADOauth2AuthorizedClientCachedIT.java +++ b/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/oauth2client/issuedat/AADOauth2AuthorizedClientCachedIT.java @@ -3,7 +3,6 @@ package com.azure.test.aad.selenium.oauth2client.issuedat; -import com.azure.spring.utils.AzureCloudUrls; import com.azure.test.aad.common.AADSeleniumITHelper; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Test; @@ -32,11 +31,11 @@ public class AADOauth2AuthorizedClientCachedIT { public void testOauth2AuthorizedClientCached() { Map properties = createDefaultProperties(); - String armClientUrl = AzureCloudUrls.getServiceManagementBaseUrl(AZURE_CLOUD_TYPE); + String armClientUrl = AADSeleniumITHelper.getServiceManagementBaseUrl(AZURE_CLOUD_TYPE); String armClientScope = armClientUrl + "user_impersonation"; properties.put("azure.activedirectory.authorization-clients.arm.scopes", armClientScope); - String graphBaseUrl = AzureCloudUrls.getGraphBaseUrl(AZURE_CLOUD_TYPE); + String graphBaseUrl = AADSeleniumITHelper.getGraphBaseUrl(AZURE_CLOUD_TYPE); properties.put("azure.activedirectory.authorization-clients.graph.scopes", graphBaseUrl + "User.Read, " + graphBaseUrl + "Directory.Read.All"); aadSeleniumITHelper = new AADSeleniumITHelper(DumbApp.class, properties); diff --git a/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/oauth2client/scopes/AADAccessTokenScopesIT.java b/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/oauth2client/scopes/AADAccessTokenScopesIT.java index af1b479fbaac8..41c74308185fa 100644 --- a/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/oauth2client/scopes/AADAccessTokenScopesIT.java +++ b/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/oauth2client/scopes/AADAccessTokenScopesIT.java @@ -3,7 +3,6 @@ package com.azure.test.aad.selenium.oauth2client.scopes; -import com.azure.spring.utils.AzureCloudUrls; import com.azure.test.aad.common.AADSeleniumITHelper; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; @@ -31,10 +30,10 @@ public class AADAccessTokenScopesIT { @Test public void testAccessTokenScopes() { Map properties = createDefaultProperties(); - String armClientUrl = AzureCloudUrls.getServiceManagementBaseUrl(AZURE_CLOUD_TYPE); + String armClientUrl = AADSeleniumITHelper.getServiceManagementBaseUrl(AZURE_CLOUD_TYPE); String armClientScope = armClientUrl + "user_impersonation"; properties.put("azure.activedirectory.authorization-clients.arm.scopes", armClientScope); - String graphBaseUrl = AzureCloudUrls.getGraphBaseUrl(AZURE_CLOUD_TYPE); + String graphBaseUrl = AADSeleniumITHelper.getGraphBaseUrl(AZURE_CLOUD_TYPE); properties.put("azure.activedirectory.authorization-clients.graph.scopes", graphBaseUrl + "User.Read, " + graphBaseUrl + "Directory.Read.All"); diff --git a/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/ondemand/AADOnDemandIT.java b/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/ondemand/AADOnDemandIT.java index 54ca61fe7adb4..dd86f2a788d53 100644 --- a/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/ondemand/AADOnDemandIT.java +++ b/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/ondemand/AADOnDemandIT.java @@ -3,7 +3,6 @@ package com.azure.test.aad.selenium.ondemand; -import com.azure.spring.utils.AzureCloudUrls; import com.azure.test.aad.common.AADSeleniumITHelper; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; @@ -32,7 +31,7 @@ public class AADOnDemandIT { @Test public void onDemandTest() { - String armClientUrl = AzureCloudUrls.getServiceManagementBaseUrl(AZURE_CLOUD_TYPE); + String armClientUrl = AADSeleniumITHelper.getServiceManagementBaseUrl(AZURE_CLOUD_TYPE); String armClientScope = armClientUrl + "user_impersonation"; Map properties = createDefaultProperties(); properties.put("azure.activedirectory.authorization-clients.arm.scopes", armClientScope); diff --git a/sdk/spring/azure-spring-boot-test-application/src/main/resources/application.properties b/sdk/spring/azure-spring-boot-test-application/src/main/resources/application.properties index 1a875edb98cb0..3ca1a4b8724e1 100644 --- a/sdk/spring/azure-spring-boot-test-application/src/main/resources/application.properties +++ b/sdk/spring/azure-spring-boot-test-application/src/main/resources/application.properties @@ -1,10 +1,10 @@ # Specify if Key Vault should be used to retrieve secrets. -azure.keyvault.enabled=true +spring.cloud.azure.keyvault.enabled=true # Specify the URI of your Key Vault (e.g.: https://name.vault.azure.net/). -#azure.keyvault.uri=put-your-key-vault-uri-here +#spring.cloud.azure.keyvault.uri=put-your-key-vault-uri-here # Specify the Service Principal Client ID with access to your Key Vault. -#azure.keyvault.client-id=put-your-azure-client-id-here -#azure.keyvault.client-key=put-your-azure-client-key-here +#spring.cloud.azure.keyvault.credential.client-id=put-your-azure-client-id-here +#spring.cloud.azure.keyvault.credential.client-key=put-your-azure-client-key-here # Specify the Service Principal Client Secret. diff --git a/sdk/spring/azure-spring-boot-test-cosmos/src/test/java/com/azure/test/cosmos/CosmosActuatorIT.java b/sdk/spring/azure-spring-boot-test-cosmos/src/test/java/com/azure/test/cosmos/CosmosActuatorIT.java index e17f80f515327..d1ce4a0fbeb90 100644 --- a/sdk/spring/azure-spring-boot-test-cosmos/src/test/java/com/azure/test/cosmos/CosmosActuatorIT.java +++ b/sdk/spring/azure-spring-boot-test-cosmos/src/test/java/com/azure/test/cosmos/CosmosActuatorIT.java @@ -19,10 +19,10 @@ public class CosmosActuatorIT { public void testCosmosSpringBootActuatorHealth() { try (AppRunner app = new AppRunner(DummyApp.class)) { //set properties - app.property("azure.cosmos.uri", AZURE_COSMOS_ENDPOINT); - app.property("azure.cosmos.key", AZURE_COSMOS_ACCOUNT_KEY); - app.property("azure.cosmos.database", AZURE_COSMOS_DATABASE_NAME); - app.property("azure.cosmos.populateQueryMetrics", String.valueOf(true)); + app.property("spring.cloud.azure.cosmos.uri", AZURE_COSMOS_ENDPOINT); + app.property("spring.cloud.azure.cosmos.key", AZURE_COSMOS_ACCOUNT_KEY); + app.property("spring.cloud.azure.cosmos.database", AZURE_COSMOS_DATABASE_NAME); + app.property("spring.cloud.azure.cosmos.populateQueryMetrics", String.valueOf(true)); app.property("management.endpoint.health.show-details", "always"); app.property("management.health.azure-cosmos.enabled", "true"); diff --git a/sdk/spring/azure-spring-boot-test-cosmos/src/test/java/com/azure/test/cosmos/CosmosIT.java b/sdk/spring/azure-spring-boot-test-cosmos/src/test/java/com/azure/test/cosmos/CosmosIT.java index 1f1eada24a57f..2705f41aa3b03 100644 --- a/sdk/spring/azure-spring-boot-test-cosmos/src/test/java/com/azure/test/cosmos/CosmosIT.java +++ b/sdk/spring/azure-spring-boot-test-cosmos/src/test/java/com/azure/test/cosmos/CosmosIT.java @@ -30,10 +30,10 @@ public class CosmosIT { public void testCosmosStarterIsolating() { try (AppRunner app = new AppRunner(DummyApp.class)) { //set properties - app.property("azure.cosmos.uri", AZURE_COSMOS_ENDPOINT); - app.property("azure.cosmos.key", AZURE_COSMOS_ACCOUNT_KEY); - app.property("azure.cosmos.database", AZURE_COSMOS_DATABASE_NAME); - app.property("azure.cosmos.populateQueryMetrics", String.valueOf(true)); + app.property("spring.cloud.azure.cosmos.uri", AZURE_COSMOS_ENDPOINT); + app.property("spring.cloud.azure.cosmos.key", AZURE_COSMOS_ACCOUNT_KEY); + app.property("spring.cloud.azure.cosmos.database", AZURE_COSMOS_DATABASE_NAME); + app.property("spring.cloud.azure.cosmos.populateQueryMetrics", String.valueOf(true)); //start app app.start(); @@ -46,10 +46,10 @@ public void testCosmosStarterIsolating() { public void testCosmosOperation() { try (AppRunner app = new AppRunner(DummyApp.class)) { //set properties - app.property("azure.cosmos.uri", AZURE_COSMOS_ENDPOINT); - app.property("azure.cosmos.key", AZURE_COSMOS_ACCOUNT_KEY); - app.property("azure.cosmos.database", AZURE_COSMOS_DATABASE_NAME); - app.property("azure.cosmos.populateQueryMetrics", String.valueOf(true)); + app.property("spring.cloud.azure.cosmos.uri", AZURE_COSMOS_ENDPOINT); + app.property("spring.cloud.azure.cosmos.key", AZURE_COSMOS_ACCOUNT_KEY); + app.property("spring.cloud.azure.cosmos.database", AZURE_COSMOS_DATABASE_NAME); + app.property("spring.cloud.azure.cosmos.populateQueryMetrics", String.valueOf(true)); //start app app.start(); diff --git a/sdk/spring/azure-spring-boot-test-keyvault/src/test/java/com/azure/spring/test/keyvault/KeyVaultActuatorIT.java b/sdk/spring/azure-spring-boot-test-keyvault/src/test/java/com/azure/spring/test/keyvault/KeyVaultActuatorIT.java index 7c92abfb6f984..c56e84d4c13e2 100644 --- a/sdk/spring/azure-spring-boot-test-keyvault/src/test/java/com/azure/spring/test/keyvault/KeyVaultActuatorIT.java +++ b/sdk/spring/azure-spring-boot-test-keyvault/src/test/java/com/azure/spring/test/keyvault/KeyVaultActuatorIT.java @@ -28,11 +28,11 @@ public class KeyVaultActuatorIT { public void testSpringBootActuatorHealth() { LOGGER.info("testSpringBootActuatorHealth begin."); try (AppRunner app = new AppRunner(DummyApp.class)) { - app.property("azure.keyvault.enabled", "true"); - app.property("azure.keyvault.uri", AZURE_KEYVAULT_URI); - app.property("azure.keyvault.client-id", SPRING_CLIENT_ID); - app.property("azure.keyvault.client-key", SPRING_CLIENT_SECRET); - app.property("azure.keyvault.tenant-id", SPRING_TENANT_ID); + app.property("spring.cloud.azure.keyvault.enabled", "true"); + app.property("spring.cloud.azure.keyvault.uri", AZURE_KEYVAULT_URI); + app.property("spring.cloud.azure.keyvault.credential.client-id", SPRING_CLIENT_ID); + app.property("spring.cloud.azure.keyvault.credential.client-secret", SPRING_CLIENT_SECRET); + app.property("spring.cloud.azure.keyvault.credential.tenant-id", SPRING_TENANT_ID); app.property("management.endpoint.health.show-details", "always"); app.property("management.endpoints.web.exposure.include", "*"); app.property("management.health.azure-key-vault.enabled", "true"); @@ -53,11 +53,11 @@ public void testSpringBootActuatorHealth() { public void testSpringBootActuatorEnv() { LOGGER.info("testSpringBootActuatorEnv begin."); try (AppRunner app = new AppRunner(DummyApp.class)) { - app.property("azure.keyvault.enabled", "true"); - app.property("azure.keyvault.uri", AZURE_KEYVAULT_URI); - app.property("azure.keyvault.client-id", SPRING_CLIENT_ID); - app.property("azure.keyvault.client-key", SPRING_CLIENT_SECRET); - app.property("azure.keyvault.tenant-id", SPRING_TENANT_ID); + app.property("spring.cloud.azure.keyvault.enabled", "true"); + app.property("spring.cloud.azure.keyvault.uri", AZURE_KEYVAULT_URI); + app.property("spring.cloud.azure.keyvault.credential.client-id", SPRING_CLIENT_ID); + app.property("spring.cloud.azure.keyvault.credential.client-secret", SPRING_CLIENT_SECRET); + app.property("spring.cloud.azure.keyvault.credential.tenant-id", SPRING_TENANT_ID); app.property("management.endpoint.health.show-details", "always"); app.property("management.endpoints.web.exposure.include", "*"); app.property("management.health.azure-key-vault.enabled", "true"); diff --git a/sdk/spring/azure-spring-boot-test-keyvault/src/test/java/com/azure/spring/test/keyvault/KeyVaultSecretValueIT.java b/sdk/spring/azure-spring-boot-test-keyvault/src/test/java/com/azure/spring/test/keyvault/KeyVaultSecretValueIT.java index bcaa3ba2da078..23b3a88e33847 100644 --- a/sdk/spring/azure-spring-boot-test-keyvault/src/test/java/com/azure/spring/test/keyvault/KeyVaultSecretValueIT.java +++ b/sdk/spring/azure-spring-boot-test-keyvault/src/test/java/com/azure/spring/test/keyvault/KeyVaultSecretValueIT.java @@ -75,11 +75,11 @@ private static TokenCredential credentials() { public void keyVaultAsPropertySource() { LOGGER.info("keyVaultAsPropertySource begin."); try (AppRunner app = new AppRunner(DummyApp.class)) { - app.property("azure.keyvault.enabled", "true"); - app.property("azure.keyvault.uri", AZURE_KEYVAULT_URI); - app.property("azure.keyvault.client-id", SPRING_CLIENT_ID); - app.property("azure.keyvault.client-key", SPRING_CLIENT_SECRET); - app.property("azure.keyvault.tenant-id", SPRING_TENANT_ID); + app.property("spring.cloud.azure.keyvault.enabled", "true"); + app.property("spring.cloud.azure.keyvault.uri", AZURE_KEYVAULT_URI); + app.property("spring.cloud.azure.keyvault.credential.client-id", SPRING_CLIENT_ID); + app.property("spring.cloud.azure.keyvault.credential.client-secret", SPRING_CLIENT_SECRET); + app.property("spring.cloud.azure.keyvault.credential.tenant-id", SPRING_TENANT_ID); LOGGER.info("app begin to start."); final ConfigurableApplicationContext dummy = app.start(); @@ -98,12 +98,12 @@ public void keyVaultAsPropertySource() { public void keyVaultAsPropertySourceWithSpecificKeys() { LOGGER.info("keyVaultAsPropertySourceWithSpecificKeys begin."); try (AppRunner app = new AppRunner(DummyApp.class)) { - app.property("azure.keyvault.enabled", "true"); - app.property("azure.keyvault.uri", AZURE_KEYVAULT_URI); - app.property("azure.keyvault.client-id", SPRING_CLIENT_ID); - app.property("azure.keyvault.client-key", SPRING_CLIENT_SECRET); - app.property("azure.keyvault.tenant-id", SPRING_TENANT_ID); - app.property("azure.keyvault.secret-keys", KEY_VAULT_SECRET_NAME); + app.property("spring.cloud.azure.keyvault.enabled", "true"); + app.property("spring.cloud.azure.keyvault.uri", AZURE_KEYVAULT_URI); + app.property("spring.cloud.azure.keyvault.credential.client-id", SPRING_CLIENT_ID); + app.property("spring.cloud.azure.keyvault.credential.client-secret", SPRING_CLIENT_SECRET); + app.property("spring.cloud.azure.keyvault.credential.tenant-id", SPRING_TENANT_ID); + app.property("spring.cloud.azure.keyvault.secret-keys", KEY_VAULT_SECRET_NAME); LOGGER.info("====" + KEY_VAULT_SECRET_NAME); app.start(); assertEquals(KEY_VAULT_SECRET_VALUE, app.getProperty(KEY_VAULT_SECRET_NAME)); diff --git a/sdk/spring/azure-spring-boot-test-keyvault/src/test/java/com/azure/spring/test/keyvault/MultipleKeyVaultsIT.java b/sdk/spring/azure-spring-boot-test-keyvault/src/test/java/com/azure/spring/test/keyvault/MultipleKeyVaultsIT.java index 215d4060e5e5f..d79d5e21179b9 100644 --- a/sdk/spring/azure-spring-boot-test-keyvault/src/test/java/com/azure/spring/test/keyvault/MultipleKeyVaultsIT.java +++ b/sdk/spring/azure-spring-boot-test-keyvault/src/test/java/com/azure/spring/test/keyvault/MultipleKeyVaultsIT.java @@ -37,12 +37,12 @@ private static String getKeyVaultName(String keyVaultUri) { @Test public void testGetValueFromKeyVault1() { try (AppRunner app = new AppRunner(TestApp.class)) { - app.property("azure.keyvault.order", KEY_VAULT_NAME_1); - app.property("azure.keyvault." + KEY_VAULT_NAME_1 + ".enabled", "true"); - app.property("azure.keyvault." + KEY_VAULT_NAME_1 + ".uri", AZURE_KEYVAULT_URI); - app.property("azure.keyvault." + KEY_VAULT_NAME_1 + ".client-id", SPRING_CLIENT_ID); - app.property("azure.keyvault." + KEY_VAULT_NAME_1 + ".client-key", SPRING_CLIENT_SECRET); - app.property("azure.keyvault." + KEY_VAULT_NAME_1 + ".tenant-id", SPRING_TENANT_ID); + app.property("spring.cloud.azure.keyvault.order", KEY_VAULT_NAME_1); + app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_1 + ".enabled", "true"); + app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_1 + ".uri", AZURE_KEYVAULT_URI); + app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_1 + ".credential.client-id", SPRING_CLIENT_ID); + app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_1 + ".credential.client-secret", SPRING_CLIENT_SECRET); + app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_1 + ".credential.tenant-id", SPRING_TENANT_ID); app.start(); assertEquals(KEY_VAULT1_SECRET_VALUE, app.getProperty(KEY_VAULT1_SECRET_NAME)); } @@ -54,12 +54,12 @@ public void testGetValueFromKeyVault1() { @Test public void testGetValueFromKeyVault2() { try (AppRunner app = new AppRunner(TestApp.class)) { - app.property("azure.keyvault.order", KEY_VAULT_NAME_2); - app.property("azure.keyvault." + KEY_VAULT_NAME_2 + ".enabled", "true"); - app.property("azure.keyvault." + KEY_VAULT_NAME_2 + ".uri", AZURE_KEYVAULT2_URI); - app.property("azure.keyvault." + KEY_VAULT_NAME_2 + ".client-id", SPRING_CLIENT_ID); - app.property("azure.keyvault." + KEY_VAULT_NAME_2 + ".client-key", SPRING_CLIENT_SECRET); - app.property("azure.keyvault." + KEY_VAULT_NAME_2 + ".tenant-id", SPRING_TENANT_ID); + app.property("spring.cloud.azure.keyvault.order", KEY_VAULT_NAME_2); + app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_2 + ".enabled", "true"); + app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_2 + ".uri", AZURE_KEYVAULT2_URI); + app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_2 + ".credential.client-id", SPRING_CLIENT_ID); + app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_2 + ".credential.client-secret", SPRING_CLIENT_SECRET); + app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_2 + ".credential.tenant-id", SPRING_TENANT_ID); app.start(); assertEquals(KEY_VAULT2_SECRET_VALUE, app.getProperty(KEY_VAULT2_SECRET_NAME)); } @@ -72,17 +72,17 @@ public void testGetValueFromKeyVault2() { @Test public void testGetValueForDuplicateKey() { try (AppRunner app = new AppRunner(TestApp.class)) { - app.property("azure.keyvault.order", String.join(",", KEY_VAULT_NAME_1, KEY_VAULT_NAME_2)); - app.property("azure.keyvault." + KEY_VAULT_NAME_1 + ".enabled", "true"); - app.property("azure.keyvault." + KEY_VAULT_NAME_1 + ".uri", AZURE_KEYVAULT_URI); - app.property("azure.keyvault." + KEY_VAULT_NAME_1 + ".client-id", SPRING_CLIENT_ID); - app.property("azure.keyvault." + KEY_VAULT_NAME_1 + ".client-key", SPRING_CLIENT_SECRET); - app.property("azure.keyvault." + KEY_VAULT_NAME_1 + ".tenant-id", SPRING_TENANT_ID); - app.property("azure.keyvault." + KEY_VAULT_NAME_2 + ".enabled", "true"); - app.property("azure.keyvault." + KEY_VAULT_NAME_2 + ".uri", AZURE_KEYVAULT2_URI); - app.property("azure.keyvault." + KEY_VAULT_NAME_2 + ".client-id", SPRING_CLIENT_ID); - app.property("azure.keyvault." + KEY_VAULT_NAME_2 + ".client-key", SPRING_CLIENT_SECRET); - app.property("azure.keyvault." + KEY_VAULT_NAME_2 + ".tenant-id", SPRING_TENANT_ID); + app.property("spring.cloud.azure.keyvault.order", String.join(",", KEY_VAULT_NAME_1, KEY_VAULT_NAME_2)); + app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_1 + ".enabled", "true"); + app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_1 + ".uri", AZURE_KEYVAULT_URI); + app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_1 + ".credential.client-id", SPRING_CLIENT_ID); + app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_1 + ".credential.client-secret", SPRING_CLIENT_SECRET); + app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_1 + ".credential.tenant-id", SPRING_TENANT_ID); + app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_2 + ".enabled", "true"); + app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_2 + ".uri", AZURE_KEYVAULT2_URI); + app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_2 + ".credential.client-id", SPRING_CLIENT_ID); + app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_2 + ".credential.client-secret", SPRING_CLIENT_SECRET); + app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_2 + ".credential.tenant-id", SPRING_TENANT_ID); app.start(); assertEquals(KEY_VAULT1_COMMON_SECRET_VALUE, app.getProperty(KEY_VAULT_COMMON_SECRET_NAME)); } @@ -94,17 +94,17 @@ public void testGetValueForDuplicateKey() { @Test public void testGetValueFromSingleVault() { try (AppRunner app = new AppRunner(TestApp.class)) { - app.property("azure.keyvault.order", String.join(",", KEY_VAULT_NAME_1, KEY_VAULT_NAME_2)); - app.property("azure.keyvault." + KEY_VAULT_NAME_1 + ".enabled", "true"); - app.property("azure.keyvault." + KEY_VAULT_NAME_1 + ".uri", AZURE_KEYVAULT_URI); - app.property("azure.keyvault." + KEY_VAULT_NAME_1 + ".client-id", SPRING_CLIENT_ID); - app.property("azure.keyvault." + KEY_VAULT_NAME_1 + ".client-key", SPRING_CLIENT_SECRET); - app.property("azure.keyvault." + KEY_VAULT_NAME_1 + ".tenant-id", SPRING_TENANT_ID); - app.property("azure.keyvault." + KEY_VAULT_NAME_2 + ".enabled", "true"); - app.property("azure.keyvault." + KEY_VAULT_NAME_2 + ".uri", AZURE_KEYVAULT2_URI); - app.property("azure.keyvault." + KEY_VAULT_NAME_2 + ".client-id", SPRING_CLIENT_ID); - app.property("azure.keyvault." + KEY_VAULT_NAME_2 + ".client-key", SPRING_CLIENT_SECRET); - app.property("azure.keyvault." + KEY_VAULT_NAME_2 + ".tenant-id", SPRING_TENANT_ID); + app.property("spring.cloud.azure.keyvault.order", String.join(",", KEY_VAULT_NAME_1, KEY_VAULT_NAME_2)); + app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_1 + ".enabled", "true"); + app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_1 + ".uri", AZURE_KEYVAULT_URI); + app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_1 + ".credential.client-id", SPRING_CLIENT_ID); + app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_1 + ".credential.client-secret", SPRING_CLIENT_SECRET); + app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_1 + ".credential.tenant-id", SPRING_TENANT_ID); + app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_2 + ".enabled", "true"); + app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_2 + ".uri", AZURE_KEYVAULT2_URI); + app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_2 + ".credential.client-id", SPRING_CLIENT_ID); + app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_2 + ".credential.client-secret", SPRING_CLIENT_SECRET); + app.property("spring.cloud.azure.keyvault." + KEY_VAULT_NAME_2 + ".credential.tenant-id", SPRING_TENANT_ID); app.start(); assertEquals(KEY_VAULT1_SECRET_VALUE, app.getProperty(KEY_VAULT1_SECRET_NAME)); assertEquals(KEY_VAULT2_SECRET_VALUE, app.getProperty(KEY_VAULT2_SECRET_NAME)); diff --git a/sdk/spring/azure-spring-boot-test-keyvault/test-resources.json b/sdk/spring/azure-spring-boot-test-keyvault/test-resources.json index fbd9757de7da9..31c4daaf381a7 100644 --- a/sdk/spring/azure-spring-boot-test-keyvault/test-resources.json +++ b/sdk/spring/azure-spring-boot-test-keyvault/test-resources.json @@ -86,7 +86,7 @@ "siteConfig": { "appSettings": [ { - "name": "AZURE_KEYVAULT_URI", + "name": "SPRING_CLOUD_AZURE_KEYVAULT_URI", "value": "[variables('azureKeyVaultUri')]" } ], diff --git a/sdk/spring/azure-spring-boot-test-selenium-common/src/main/java/com/azure/test/aad/common/AADSeleniumITHelper.java b/sdk/spring/azure-spring-boot-test-selenium-common/src/main/java/com/azure/test/aad/common/AADSeleniumITHelper.java index 3f00f37ffb577..a6a3fd9bd15e5 100644 --- a/sdk/spring/azure-spring-boot-test-selenium-common/src/main/java/com/azure/test/aad/common/AADSeleniumITHelper.java +++ b/sdk/spring/azure-spring-boot-test-selenium-common/src/main/java/com/azure/test/aad/common/AADSeleniumITHelper.java @@ -2,7 +2,6 @@ // Licensed under the MIT License. package com.azure.test.aad.common; -import com.azure.spring.utils.AzureCloudUrls; import org.openqa.selenium.By; import org.openqa.selenium.Keys; import org.openqa.selenium.support.ui.ExpectedConditions; @@ -86,7 +85,7 @@ public String logoutAndGetLogoutUsername() { public String httpGetWithIncrementalConsent(String endpoint) { driver.get((app.root() + endpoint)); - String oauth2AuthorizationUrlFraction = String.format(AzureCloudUrls.getBaseUrl(AZURE_CLOUD_TYPE) + String oauth2AuthorizationUrlFraction = String.format(getBaseUrl(AZURE_CLOUD_TYPE) + "%s/oauth2/v2.0/" + "authorize?", AAD_TENANT_ID_1); wait.until(ExpectedConditions.urlContains(oauth2AuthorizationUrlFraction)); @@ -98,4 +97,19 @@ public String httpGetWithIncrementalConsent(String endpoint) { public String getUsername() { return username; } + + public static String getBaseUrl(String cloudType) { + return cloudType.equals("Global") ? "https://login.microsoftonline.com/" + : "https://login.partner.microsoftonline.cn/"; + } + + public static String getGraphBaseUrl(String cloudType) { + return cloudType.equals("Global") ? "https://graph.microsoft.com/" + : "https://microsoftgraph.chinacloudapi.cn/"; + } + + public static String getServiceManagementBaseUrl(String cloudType) { + return cloudType.equals("Global") ? "https://management.azure.com/" + : "https://management.chinacloudapi.cn/"; + } } diff --git a/sdk/spring/azure-spring-boot-test-storage/src/test/java/com/microsoft/azure/test/storage/StorageActuatorIT.java b/sdk/spring/azure-spring-boot-test-storage/src/test/java/com/microsoft/azure/test/storage/StorageActuatorIT.java index 9fcc304c1aff3..7e566aac9f47b 100644 --- a/sdk/spring/azure-spring-boot-test-storage/src/test/java/com/microsoft/azure/test/storage/StorageActuatorIT.java +++ b/sdk/spring/azure-spring-boot-test-storage/src/test/java/com/microsoft/azure/test/storage/StorageActuatorIT.java @@ -22,9 +22,9 @@ public class StorageActuatorIT { public void testBlobStorageActuatorHealth() { try (AppRunner app = new AppRunner(DummyApp.class)) { //set properties - app.property("azure.storage.account-name", AZURE_STORAGE_ACCOUNT_NAME); - app.property("azure.storage.account-key", AZURE_STORAGE_ACCOUNT_KEY); - app.property("azure.storage.blob-endpoint", AZURE_STORAGE_BLOB_ENDPOINT); + app.property("spring.cloud.azure.storage.account-name", AZURE_STORAGE_ACCOUNT_NAME); + app.property("spring.cloud.azure.storage.account-key", AZURE_STORAGE_ACCOUNT_KEY); + app.property("spring.cloud.azure.storage.blob-endpoint", AZURE_STORAGE_BLOB_ENDPOINT); app.property("blob", AZURE_STORAGE_BLOB); app.property("management.endpoint.health.show-details", "always"); app.property("management.endpoints.web.exposure.include", "*"); @@ -49,9 +49,9 @@ public void testBlobStorageActuatorHealth() { public void testFileStorageActuatorHealth() { try (AppRunner app = new AppRunner(DummyApp.class)) { //set properties - app.property("azure.storage.account-name", AZURE_STORAGE_ACCOUNT_NAME); - app.property("azure.storage.account-key", AZURE_STORAGE_ACCOUNT_KEY); - app.property("azure.storage.file-endpoint", AZURE_STORAGE_FILE_ENDPOINT); + app.property("spring.cloud.azure.storage.account-name", AZURE_STORAGE_ACCOUNT_NAME); + app.property("spring.cloud.azure.storage.account-key", AZURE_STORAGE_ACCOUNT_KEY); + app.property("spring.cloud.azure.storage.file-endpoint", AZURE_STORAGE_FILE_ENDPOINT); app.property("file", AZURE_STORAGE_FILE); app.property("management.endpoint.health.show-details", "always"); //start app diff --git a/sdk/spring/azure-spring-boot-test-storage/src/test/resources/application.properties b/sdk/spring/azure-spring-boot-test-storage/src/test/resources/application.properties index 70a9c8b979054..5e29083279fab 100644 --- a/sdk/spring/azure-spring-boot-test-storage/src/test/resources/application.properties +++ b/sdk/spring/azure-spring-boot-test-storage/src/test/resources/application.properties @@ -1,6 +1,6 @@ -azure.storage.account-name=${AZURE_STORAGE_ACCOUNT_NAME} -azure.storage.account-key=${AZURE_STORAGE_ACCOUNT_KEY} -azure.storage.blob-endpoint=${AZURE_STORAGE_BLOB_ENDPOINT} -azure.storage.file-endpoint=${AZURE_STORAGE_FILE_ENDPOINT} +spring.cloud.azure.storage.account-name=${AZURE_STORAGE_ACCOUNT_NAME} +spring.cloud.azure.storage.account-key=${AZURE_STORAGE_ACCOUNT_KEY} +spring.cloud.azure.storage.blob-endpoint=${AZURE_STORAGE_BLOB_ENDPOINT} +spring.cloud.azure.storage.file-endpoint=${AZURE_STORAGE_FILE_ENDPOINT} blob=${AZURE_STORAGE_BLOB} file=${AZURE_STORAGE_FILE} diff --git a/sdk/spring/azure-spring-boot/pom.xml b/sdk/spring/azure-spring-boot/pom.xml deleted file mode 100644 index 9b16d7870c68c..0000000000000 --- a/sdk/spring/azure-spring-boot/pom.xml +++ /dev/null @@ -1,399 +0,0 @@ - - - 4.0.0 - - - com.azure - azure-client-sdk-parent - 1.7.0 - ../../parents/azure-client-sdk-parent - - - com.azure.spring - azure-spring-boot - 3.8.0-beta.1 - jar - - Azure Spring Boot AutoConfigure - Azure Spring Boot AutoConfigure - https://github.com/Azure/azure-sdk-for-java - - - 0.22 - - - - - org.springframework.boot - spring-boot-autoconfigure - 2.5.3 - - - - org.slf4j - slf4j-api - 1.7.32 - - - - org.springframework - spring-web - 5.3.9 - - - - org.springframework.boot - spring-boot-configuration-processor - 2.5.3 - true - - - - javax.validation - validation-api - 2.0.1.Final - - - - javax.annotation - javax.annotation-api - 1.3.2 - - - - - org.springframework.security - spring-security-core - 5.5.1 - true - - - org.springframework.security - spring-security-web - 5.5.1 - true - - - org.springframework.security - spring-security-oauth2-client - 5.5.1 - true - - - org.springframework.security - spring-security-oauth2-resource-server - 5.5.1 - true - - - org.springframework.security - spring-security-oauth2-jose - 5.5.1 - true - - - org.springframework.security - spring-security-config - 5.5.1 - true - - - com.nimbusds - nimbus-jose-jwt - 9.10 - true - - - javax.servlet - javax.servlet-api - 4.0.1 - true - - - - - com.azure - azure-spring-data-cosmos - 3.9.0 - true - - - - org.springframework.boot - spring-boot-actuator-autoconfigure - 2.5.3 - true - - - - - org.springframework - spring-jms - 5.3.9 - true - - - com.microsoft.azure - azure-servicebus-jms - 0.0.7 - true - - - org.apache.qpid - qpid-jms-client - 0.53.0 - true - - - - com.microsoft.azure - msal4j - 1.10.1 - true - - - - com.azure - azure-identity - 1.3.5 - true - - - - com.azure - azure-security-keyvault-secrets - 4.3.2 - true - - - - - com.azure - azure-storage-blob - 12.13.0 - true - - - - com.azure - azure-storage-file-share - 12.10.0 - true - - - - - org.springframework.boot - spring-boot-autoconfigure-processor - 2.5.3 - true - - - - org.hibernate.validator - hibernate-validator - 6.2.0.Final - true - - - - com.fasterxml.jackson.core - jackson-databind - 2.12.4 - - - - - com.google.code.findbugs - jsr305 - 3.0.2 - provided - - - - - org.springframework.boot - spring-boot-starter-test - 2.5.3 - test - - - com.vaadin.external.google - android-json - - - - - org.springframework.boot - spring-boot-starter-web - 2.5.3 - test - - - org.mockito - mockito-core - 3.9.0 - test - - - com.github.tomakehurst - wiremock-standalone - 2.24.1 - test - - - pl.pragmatists - JUnitParams - 1.1.1 - test - - - com.github.spotbugs - spotbugs-annotations - 4.2.0 - true - - - org.springframework - spring-core - 5.3.9 - - - org.springframework - spring-webflux - 5.3.9 - true - - - org.springframework - spring-context - 5.3.9 - true - - - - - - - org.apache.maven.plugins - maven-enforcer-plugin - 3.0.0-M3 - - - - - com.microsoft.azure:azure-servicebus-jms:[0.0.7] - com.github.spotbugs:spotbugs-annotations:[4.2.0] - com.fasterxml.jackson.core:jackson-databind:[2.12.4] - com.microsoft.azure:msal4j:[1.10.1] - com.nimbusds:nimbus-jose-jwt:[9.10] - javax.servlet:javax.servlet-api:[4.0.1] - javax.annotation:javax.annotation-api:[1.3.2] - javax.validation:validation-api:[2.0.1.Final] - org.slf4j:slf4j-api:[1.7.32] - org.hibernate.validator:hibernate-validator:[6.2.0.Final] - org.springframework:spring-core:[5.3.9] - org.springframework:spring-context:[5.3.9] - org.springframework:spring-web:[5.3.9] - org.springframework:spring-jms:[5.3.9] - org.springframework:spring-webflux:[5.3.9] - org.springframework.boot:spring-boot-actuator-autoconfigure:[2.5.3] - org.springframework.boot:spring-boot-autoconfigure-processor:[2.5.3] - org.springframework.boot:spring-boot-autoconfigure:[2.5.3] - org.springframework.boot:spring-boot-configuration-processor:[2.5.3] - org.springframework.boot:spring-boot-starter-test:[2.5.3] - org.springframework.boot:spring-boot-starter-web:[2.5.3] - org.springframework.boot:spring-boot-starter-webflux:[2.5.3] - org.springframework.security:spring-security-config:[5.5.1] - org.springframework.security:spring-security-core:[5.5.1] - org.springframework.security:spring-security-oauth2-client:[5.5.1] - org.springframework.security:spring-security-oauth2-resource-server:[5.5.1] - org.springframework.security:spring-security-oauth2-jose:[5.5.1] - org.springframework.security:spring-security-web:[5.5.1] - org.apache.qpid:qpid-jms-client:[0.53.0] - - - - - - - org.apache.maven.plugins - maven-jar-plugin - 3.1.2 - - - - true - - - - - - - - - - - annotation-process-for-java-8 - - [1.8,9) - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.8.1 - - - annotation-process-for-java-8 - - compile - - - - -proc:only - - - - - - - - - - annotation-process-for-java-11 - - [11,) - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.8.1 - - - annotation-process-for-java-11 - - compile - - - - -proc:only - - 11 - - - - - - - - - - diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/AzureCloudUrls.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/AzureCloudUrls.java deleted file mode 100644 index 351fc91c9083f..0000000000000 --- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/AzureCloudUrls.java +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.spring.utils; - -/** - * Util class for Azure urls - */ -public class AzureCloudUrls { - public static String getBaseUrl(String cloudType) { - return cloudType.equals("Global") ? "https://login.microsoftonline.com/" - : "https://login.partner.microsoftonline.cn/"; - } - - public static String getGraphBaseUrl(String cloudType) { - return cloudType.equals("Global") ? "https://graph.microsoft.com/" - : "https://microsoftgraph.chinacloudapi.cn/"; - } - - public static String getServiceManagementBaseUrl(String cloudType) { - return cloudType.equals("Global") ? "https://management.azure.com/" - : "https://management.chinacloudapi.cn/"; - } -} diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/Constants.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/Constants.java deleted file mode 100644 index 5691c49d2d7b9..0000000000000 --- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/Constants.java +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.spring.utils; - -/** - * Util class for Constants - */ -public class Constants { - - public static final String AZURE_KEYVAULT_PROPERTYSOURCE_NAME = "azurekv"; - - public static final long DEFAULT_REFRESH_INTERVAL_MS = 1800000L; - -} diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/PropertyLoader.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/PropertyLoader.java deleted file mode 100644 index 124ebf87cc71d..0000000000000 --- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/PropertyLoader.java +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.spring.utils; - -import java.io.IOException; -import java.io.InputStream; -import java.util.Properties; - -/** - * Util class to load property files. - */ -public class PropertyLoader { - private static final String PROJECT_PROPERTY_FILE = "/META-INF/project.properties"; - - /** - * To load a property value from the file. - * @param file The source file to load properties from. - * @param property The property name. - * @return The property value. - */ - private static String getProperty(String file, String property) { - try (InputStream inputStream = PropertyLoader.class.getResourceAsStream(file)) { - if (inputStream != null) { - final Properties properties = new Properties(); - properties.load(inputStream); - - return properties.getProperty(property); - } - } catch (IOException e) { - // Omitted - } - - return "unknown"; - } - - public static String getProjectVersion() { - return getProperty(PROJECT_PROPERTY_FILE, "project.version"); - } -} diff --git a/sdk/spring/azure-spring-boot/src/main/resources/META-INF/spring.factories b/sdk/spring/azure-spring-boot/src/main/resources/META-INF/spring.factories deleted file mode 100644 index d198b29b762e4..0000000000000 --- a/sdk/spring/azure-spring-boot/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1,15 +0,0 @@ -org.springframework.boot.env.EnvironmentPostProcessor=com.azure.spring.cloudfoundry.environment.VcapProcessor -org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -com.azure.spring.autoconfigure.aad.AADAutoConfiguration,\ -com.azure.spring.autoconfigure.aad.AADAuthenticationFilterAutoConfiguration,\ -com.azure.spring.autoconfigure.b2c.AADB2CAutoConfiguration,\ -com.azure.spring.autoconfigure.b2c.AADB2CResourceServerAutoConfiguration,\ -com.azure.spring.autoconfigure.cosmos.CosmosAutoConfiguration,\ -com.azure.spring.autoconfigure.cosmos.CosmosHealthConfiguration,\ -com.azure.spring.autoconfigure.cosmos.CosmosReactiveRepositoriesAutoConfiguration,\ -com.azure.spring.autoconfigure.cosmos.CosmosRepositoriesAutoConfiguration,\ -com.azure.spring.autoconfigure.jms.NonPremiumServiceBusJMSAutoConfiguration,\ -com.azure.spring.autoconfigure.jms.PremiumServiceBusJMSAutoConfiguration,\ -com.azure.spring.autoconfigure.storage.StorageAutoConfiguration,\ -com.azure.spring.autoconfigure.storage.StorageHealthConfiguration,\ -com.azure.spring.keyvault.KeyVaultHealthConfiguration diff --git a/sdk/spring/azure-spring-boot/src/test/resources/logback-test.xml b/sdk/spring/azure-spring-boot/src/test/resources/logback-test.xml deleted file mode 100644 index c0330fdf75b86..0000000000000 --- a/sdk/spring/azure-spring-boot/src/test/resources/logback-test.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - true - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n - - - - - - - - diff --git a/sdk/spring/azure-spring-boot/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/sdk/spring/azure-spring-boot/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker deleted file mode 100644 index 1f0955d450f0d..0000000000000 --- a/sdk/spring/azure-spring-boot/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker +++ /dev/null @@ -1 +0,0 @@ -mock-maker-inline diff --git a/sdk/spring/azure-spring-boot/CHANGELOG.md b/sdk/spring/azure-spring-cloud-autoconfigure/CHANGELOG-SPRINGBOOT.md similarity index 99% rename from sdk/spring/azure-spring-boot/CHANGELOG.md rename to sdk/spring/azure-spring-cloud-autoconfigure/CHANGELOG-SPRINGBOOT.md index d8bf009ccada7..0d639bc284779 100644 --- a/sdk/spring/azure-spring-boot/CHANGELOG.md +++ b/sdk/spring/azure-spring-cloud-autoconfigure/CHANGELOG-SPRINGBOOT.md @@ -34,6 +34,7 @@ This release is compatible with Spring Boot 2.5.0 - 2.5.3. - Support new value `on_behalf_of` for OBO authorization grant type, originally we only support `on-behalf-of`. + ## 3.6.1 (2021-07-02) ### New Features - Upgrade to [spring-boot-dependencies:2.5.2](https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-dependencies/2.5.2/spring-boot-dependencies-2.5.2.pom). diff --git a/sdk/spring/azure-spring-boot/README.md b/sdk/spring/azure-spring-cloud-autoconfigure/README-SPRINGBOOT.md similarity index 97% rename from sdk/spring/azure-spring-boot/README.md rename to sdk/spring/azure-spring-cloud-autoconfigure/README-SPRINGBOOT.md index 378eda2ea4efe..774e0aa2aea78 100644 --- a/sdk/spring/azure-spring-boot/README.md +++ b/sdk/spring/azure-spring-cloud-autoconfigure/README-SPRINGBOOT.md @@ -1,7 +1,7 @@ # Azure Spring Boot client library for Java This repo is for Spring Boot Starters of Azure services. It helps Spring Boot developers to adopt Azure services. -[Source code][src] | [Package (Maven)][package] | [API reference documentation][refdocs] | [Product documentation][docs] | [Samples][sample] +[Package (Maven)][package] | [API reference documentation][refdocs] | [Product documentation][docs] | [Samples][sample] ## Getting started @@ -181,7 +181,6 @@ To suggest a new feature or changes that could be made, file an issue the same w You can participate community driven [![Gitter](https://badges.gitter.im/Microsoft/spring-on-azure.svg)](https://gitter.im/Microsoft/spring-on-azure) -[src]: https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/spring/azure-spring-boot/src [docs]: https://docs.microsoft.com/azure/developer/java/spring-framework/spring-boot-starters-for-azure [refdocs]: https://azure.github.io/azure-sdk-for-java/springboot.html#azure-spring-boot [package]: https://mvnrepository.com/artifact/com.azure.spring/azure-spring-boot diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/pom.xml b/sdk/spring/azure-spring-cloud-autoconfigure/pom.xml index 09653ee9a1d86..78d603a8c6065 100644 --- a/sdk/spring/azure-spring-cloud-autoconfigure/pom.xml +++ b/sdk/spring/azure-spring-cloud-autoconfigure/pom.xml @@ -24,15 +24,16 @@ - org.springframework.boot - spring-boot-autoconfigure - 2.5.3 + com.azure.spring + azure-spring-cloud-context + 2.8.0-beta.1 - org.springframework - spring-web - 5.3.9 + com.azure.spring + azure-spring-cloud-resourcemanager + 2.8.0-beta.1 + true @@ -43,11 +44,19 @@ true + + com.zaxxer HikariCP 4.0.3 test + + + slf4j-api + org.slf4j + + @@ -114,30 +123,141 @@ true + + + org.springframework.security + spring-security-core + 5.5.1 + true + + + org.springframework.security + spring-security-web + 5.5.1 + true + + + org.springframework.security + spring-security-oauth2-client + 5.5.1 + true + + + org.springframework.security + spring-security-oauth2-resource-server + 5.5.1 + true + + + org.springframework.security + spring-security-oauth2-jose + 5.5.1 + true + + + org.springframework.security + spring-security-config + 5.5.1 + true + + + com.nimbusds + nimbus-jose-jwt + 9.10 + true + + + javax.servlet + javax.servlet-api + 4.0.1 + true + + + + + com.azure + azure-spring-data-cosmos + 3.9.0 + true + + + + org.springframework - spring-context-support - 5.3.9 + spring-jms + 5.3.9 + true + + + com.microsoft.azure + azure-servicebus-jms + 0.0.7 + true + + + org.apache.qpid + qpid-jms-client + 0.53.0 true + + + com.microsoft.azure + msal4j + 1.10.1 + true + + + + com.azure + azure-identity + 1.3.5 + true + + + + com.azure + azure-security-keyvault-secrets + 4.3.2 + true + + + com.azure.spring - azure-spring-cloud-context - 2.8.0-beta.1 + azure-spring-integration-storage-queue + 2.8.0-beta.1 true + + - org.hibernate.validator - hibernate-validator - 6.2.0.Final + org.springframework.boot + spring-boot-autoconfigure + 2.5.3 + + + + org.springframework + spring-web + 5.3.9 - com.fasterxml.jackson.core - jackson-core - 2.12.4 + org.springframework + spring-context-support + 5.3.9 + true + + + + org.springframework.boot + spring-boot-actuator-autoconfigure + 2.5.3 + true @@ -147,6 +267,29 @@ true + + org.springframework + spring-webflux + 5.3.9 + true + + + + org.hibernate.validator + hibernate-validator + 6.2.0.Final + + + + + com.google.code.findbugs + jsr305 + 3.0.2 + provided + + org.springframework.boot @@ -154,12 +297,35 @@ 2.5.3 test - - - com.azure.spring - azure-spring-cloud-storage - 2.8.0-beta.1 + com.github.tomakehurst + wiremock-standalone + 2.24.1 + test + + + pl.pragmatists + JUnitParams + 1.1.1 + test + + + com.azure + azure-security-keyvault-jca + 2.0.0-beta.1 + test + + + slf4j-nop + org.slf4j + + + + + + org.apache.httpcomponents + httpclient + 4.5.13 test @@ -175,19 +341,34 @@ - com.fasterxml.jackson.core:jackson-core:[2.12.4] + com.microsoft.azure:azure-servicebus-jms:[0.0.7] + com.microsoft.azure:msal4j:[1.10.1] com.microsoft.sqlserver:mssql-jdbc:[9.2.1.jre8] + com.nimbusds:nimbus-jose-jwt:[9.10] + javax.servlet:javax.servlet-api:[4.0.1] mysql:mysql-connector-java:[8.0.26] + org.apache.qpid:qpid-jms-client:[0.53.0] org.hibernate.validator:hibernate-validator:[6.2.0.Final] org.postgresql:postgresql:[42.2.23] + org.springframework.boot:spring-boot-actuator-autoconfigure:[2.5.3] + org.springframework.boot:spring-boot-autoconfigure-processor:[2.5.3] org.springframework.boot:spring-boot-autoconfigure:[2.5.3] org.springframework.boot:spring-boot-configuration-processor:[2.5.3] + org.springframework.boot:spring-boot-starter-test:[2.5.3] org.springframework.data:spring-data-mongodb:[3.2.3] org.springframework.data:spring-data-redis:[2.5.3] org.springframework.kafka:spring-kafka:[2.7.4] + org.springframework.security:spring-security-config:[5.5.1] + org.springframework.security:spring-security-core:[5.5.1] + org.springframework.security:spring-security-oauth2-client:[5.5.1] + org.springframework.security:spring-security-oauth2-jose:[5.5.1] + org.springframework.security:spring-security-oauth2-resource-server:[5.5.1] + org.springframework.security:spring-security-web:[5.5.1] org.springframework:spring-context-support:[5.3.9] org.springframework:spring-jdbc:[5.3.9] + org.springframework:spring-jms:[5.3.9] org.springframework:spring-web:[5.3.9] + org.springframework:spring-webflux:[5.3.9] @@ -195,15 +376,6 @@ - - - - src/main/resources - - META-INF/spring.factories - - - diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/AADApplicationType.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/AADApplicationType.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/AADApplicationType.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/AADApplicationType.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/AADAuthorizationGrantType.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/AADAuthorizationGrantType.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/AADAuthorizationGrantType.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/AADAuthorizationGrantType.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/AADAuthorizationServerEndpoints.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/AADAuthorizationServerEndpoints.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/AADAuthorizationServerEndpoints.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/AADAuthorizationServerEndpoints.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/AADClientRegistrationRepository.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/AADClientRegistrationRepository.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/AADClientRegistrationRepository.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/AADClientRegistrationRepository.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/AADIssuerJWSKeySelector.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/AADIssuerJWSKeySelector.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/AADIssuerJWSKeySelector.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/AADIssuerJWSKeySelector.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/AADJwtDecoderProviderConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/AADJwtDecoderProviderConfiguration.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/AADJwtDecoderProviderConfiguration.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/AADJwtDecoderProviderConfiguration.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/AADJwtGrantedAuthoritiesConverter.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/AADJwtGrantedAuthoritiesConverter.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/AADJwtGrantedAuthoritiesConverter.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/AADJwtGrantedAuthoritiesConverter.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/AADOAuth2AuthenticatedPrincipal.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/AADOAuth2AuthenticatedPrincipal.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/AADOAuth2AuthenticatedPrincipal.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/AADOAuth2AuthenticatedPrincipal.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/AADOAuth2ClientConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/AADOAuth2ClientConfiguration.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/AADOAuth2ClientConfiguration.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/AADOAuth2ClientConfiguration.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/AADTrustedIssuerRepository.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/AADTrustedIssuerRepository.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/AADTrustedIssuerRepository.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/AADTrustedIssuerRepository.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter.java similarity index 98% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter.java index eef5417cdfa61..6684970419007 100644 --- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter.java @@ -3,7 +3,7 @@ package com.azure.spring.aad; -import com.azure.spring.utils.ApplicationId; +import com.azure.spring.core.ApplicationId; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.RequestEntity; diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/JacksonHttpSessionOAuth2AuthorizedClientRepository.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/JacksonHttpSessionOAuth2AuthorizedClientRepository.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/JacksonHttpSessionOAuth2AuthorizedClientRepository.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/JacksonHttpSessionOAuth2AuthorizedClientRepository.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/implementation/constants/AADTokenClaim.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/implementation/constants/AADTokenClaim.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/implementation/constants/AADTokenClaim.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/implementation/constants/AADTokenClaim.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/implementation/constants/AuthorityPrefix.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/implementation/constants/AuthorityPrefix.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/implementation/constants/AuthorityPrefix.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/implementation/constants/AuthorityPrefix.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/implementation/jackson/AADClientRegistrationDeserializer.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/implementation/jackson/AADClientRegistrationDeserializer.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/implementation/jackson/AADClientRegistrationDeserializer.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/implementation/jackson/AADClientRegistrationDeserializer.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/implementation/jackson/AADClientRegistrationMixin.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/implementation/jackson/AADClientRegistrationMixin.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/implementation/jackson/AADClientRegistrationMixin.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/implementation/jackson/AADClientRegistrationMixin.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/implementation/jackson/AADOAuth2ClientJackson2Module.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/implementation/jackson/AADOAuth2ClientJackson2Module.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/implementation/jackson/AADOAuth2ClientJackson2Module.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/implementation/jackson/AADOAuth2ClientJackson2Module.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/implementation/jackson/JsonNodeUtils.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/implementation/jackson/JsonNodeUtils.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/implementation/jackson/JsonNodeUtils.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/implementation/jackson/JsonNodeUtils.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/implementation/jackson/SerializerUtils.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/implementation/jackson/SerializerUtils.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/implementation/jackson/SerializerUtils.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/implementation/jackson/SerializerUtils.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/implementation/jackson/StdConverters.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/implementation/jackson/StdConverters.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/implementation/jackson/StdConverters.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/implementation/jackson/StdConverters.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/package-info.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/package-info.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/package-info.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/package-info.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapi/AADJwtBearerTokenAuthenticationConverter.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapi/AADJwtBearerTokenAuthenticationConverter.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapi/AADJwtBearerTokenAuthenticationConverter.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapi/AADJwtBearerTokenAuthenticationConverter.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapi/AADOBOOAuth2AuthorizedClientProvider.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapi/AADOBOOAuth2AuthorizedClientProvider.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapi/AADOBOOAuth2AuthorizedClientProvider.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapi/AADOBOOAuth2AuthorizedClientProvider.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapi/AADResourceServerConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapi/AADResourceServerConfiguration.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapi/AADResourceServerConfiguration.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapi/AADResourceServerConfiguration.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapi/AADResourceServerProperties.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapi/AADResourceServerProperties.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapi/AADResourceServerProperties.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapi/AADResourceServerProperties.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapi/AADResourceServerWebSecurityConfigurerAdapter.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapi/AADResourceServerWebSecurityConfigurerAdapter.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapi/AADResourceServerWebSecurityConfigurerAdapter.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapi/AADResourceServerWebSecurityConfigurerAdapter.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapi/package-info.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapi/package-info.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapi/package-info.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapi/package-info.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapi/validator/AADJwtAudienceValidator.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapi/validator/AADJwtAudienceValidator.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapi/validator/AADJwtAudienceValidator.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapi/validator/AADJwtAudienceValidator.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapi/validator/AADJwtClaimValidator.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapi/validator/AADJwtClaimValidator.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapi/validator/AADJwtClaimValidator.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapi/validator/AADJwtClaimValidator.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapi/validator/AADJwtIssuerValidator.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapi/validator/AADJwtIssuerValidator.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapi/validator/AADJwtIssuerValidator.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapi/validator/AADJwtIssuerValidator.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapi/validator/package-info.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapi/validator/package-info.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapi/validator/package-info.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapi/validator/package-info.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapp/AADAzureDelegatedOAuth2AuthorizedClientProvider.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapp/AADAzureDelegatedOAuth2AuthorizedClientProvider.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapp/AADAzureDelegatedOAuth2AuthorizedClientProvider.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapp/AADAzureDelegatedOAuth2AuthorizedClientProvider.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapp/AADHandleConditionalAccessFilter.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapp/AADHandleConditionalAccessFilter.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapp/AADHandleConditionalAccessFilter.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapp/AADHandleConditionalAccessFilter.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapp/AADOAuth2AuthorizationCodeGrantRequestEntityConverter.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapp/AADOAuth2AuthorizationCodeGrantRequestEntityConverter.java similarity index 97% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapp/AADOAuth2AuthorizationCodeGrantRequestEntityConverter.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapp/AADOAuth2AuthorizationCodeGrantRequestEntityConverter.java index b0339d1fde788..662f112d303a3 100644 --- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapp/AADOAuth2AuthorizationCodeGrantRequestEntityConverter.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapp/AADOAuth2AuthorizationCodeGrantRequestEntityConverter.java @@ -4,7 +4,7 @@ package com.azure.spring.aad.webapp; import com.azure.spring.aad.AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter; -import com.azure.spring.utils.ApplicationId; +import com.azure.spring.core.ApplicationId; import org.springframework.security.oauth2.client.endpoint.AbstractOAuth2AuthorizationGrantRequest; import org.springframework.security.oauth2.client.endpoint.OAuth2AuthorizationCodeGrantRequest; import org.springframework.security.oauth2.client.registration.ClientRegistration; diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapp/AADOAuth2AuthorizationRequestResolver.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapp/AADOAuth2AuthorizationRequestResolver.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapp/AADOAuth2AuthorizationRequestResolver.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapp/AADOAuth2AuthorizationRequestResolver.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapp/AADOAuth2UserService.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapp/AADOAuth2UserService.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapp/AADOAuth2UserService.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapp/AADOAuth2UserService.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapp/AADWebApplicationConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapp/AADWebApplicationConfiguration.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapp/AADWebApplicationConfiguration.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapp/AADWebApplicationConfiguration.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapp/AADWebSecurityConfigurerAdapter.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapp/AADWebSecurityConfigurerAdapter.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapp/AADWebSecurityConfigurerAdapter.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapp/AADWebSecurityConfigurerAdapter.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapp/AuthorizationClientProperties.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapp/AuthorizationClientProperties.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapp/AuthorizationClientProperties.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapp/AuthorizationClientProperties.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapp/AzureClientRegistration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapp/AzureClientRegistration.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapp/AzureClientRegistration.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapp/AzureClientRegistration.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapp/GraphClient.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapp/GraphClient.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapp/GraphClient.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapp/GraphClient.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapp/GroupInformation.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapp/GroupInformation.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapp/GroupInformation.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapp/GroupInformation.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapp/package-info.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapp/package-info.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/webapp/package-info.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/aad/webapp/package-info.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AADAppRoleStatelessAuthenticationFilter.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/aad/AADAppRoleStatelessAuthenticationFilter.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AADAppRoleStatelessAuthenticationFilter.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/aad/AADAppRoleStatelessAuthenticationFilter.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilter.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilter.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilter.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilter.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilterAutoConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilterAutoConfiguration.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilterAutoConfiguration.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilterAutoConfiguration.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AADAuthenticationProperties.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/aad/AADAuthenticationProperties.java similarity index 99% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AADAuthenticationProperties.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/aad/AADAuthenticationProperties.java index 573bf4505fce4..dc0a1beec757a 100644 --- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AADAuthenticationProperties.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/aad/AADAuthenticationProperties.java @@ -37,13 +37,14 @@ * Configuration properties for Azure Active Directory Authentication. */ @Validated -@ConfigurationProperties("azure.activedirectory") +@ConfigurationProperties(AADAuthenticationProperties.PREFIX) public class AADAuthenticationProperties implements InitializingBean { private static final Logger LOGGER = LoggerFactory.getLogger(AADAuthenticationProperties.class); private static final long DEFAULT_JWK_SET_CACHE_LIFESPAN = TimeUnit.MINUTES.toMillis(5); private static final long DEFAULT_JWK_SET_CACHE_REFRESH_TIME = DEFAULT_JWK_SET_CACHE_LIFESPAN; + public static final String PREFIX = "azure.activedirectory"; /** * Default UserGroup configuration. diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AADAutoConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/aad/AADAutoConfiguration.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AADAutoConfiguration.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/aad/AADAutoConfiguration.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AzureADGraphClient.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/aad/AzureADGraphClient.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AzureADGraphClient.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/aad/AzureADGraphClient.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/Constants.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/aad/Constants.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/Constants.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/aad/Constants.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/JacksonObjectMapperFactory.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/aad/JacksonObjectMapperFactory.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/JacksonObjectMapperFactory.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/aad/JacksonObjectMapperFactory.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/Membership.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/aad/Membership.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/Membership.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/aad/Membership.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/Memberships.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/aad/Memberships.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/Memberships.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/aad/Memberships.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/UserPrincipal.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/aad/UserPrincipal.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/UserPrincipal.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/aad/UserPrincipal.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/UserPrincipalManager.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/aad/UserPrincipalManager.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/UserPrincipalManager.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/aad/UserPrincipalManager.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/package-info.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/aad/package-info.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/package-info.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/aad/package-info.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CAuthorizationRequestResolver.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CAuthorizationRequestResolver.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CAuthorizationRequestResolver.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CAuthorizationRequestResolver.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CAutoConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CAutoConfiguration.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CAutoConfiguration.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CAutoConfiguration.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CClientRegistrationRepository.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CClientRegistrationRepository.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CClientRegistrationRepository.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CClientRegistrationRepository.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CConditions.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CConditions.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CConditions.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CConditions.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CConfigurationException.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CConfigurationException.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CConfigurationException.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CConfigurationException.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CJwtBearerTokenAuthenticationConverter.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CJwtBearerTokenAuthenticationConverter.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CJwtBearerTokenAuthenticationConverter.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CJwtBearerTokenAuthenticationConverter.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CLogoutSuccessHandler.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CLogoutSuccessHandler.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CLogoutSuccessHandler.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CLogoutSuccessHandler.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2COAuth2AuthorizationCodeGrantRequestEntityConverter.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2COAuth2AuthorizationCodeGrantRequestEntityConverter.java similarity index 92% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2COAuth2AuthorizationCodeGrantRequestEntityConverter.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2COAuth2AuthorizationCodeGrantRequestEntityConverter.java index 06a47e203495b..5ce4d58b5b149 100644 --- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2COAuth2AuthorizationCodeGrantRequestEntityConverter.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2COAuth2AuthorizationCodeGrantRequestEntityConverter.java @@ -4,7 +4,7 @@ package com.azure.spring.autoconfigure.b2c; import com.azure.spring.aad.AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter; -import com.azure.spring.utils.ApplicationId; +import com.azure.spring.core.ApplicationId; /** * Used to set azure service header tag when use "auth-code" to get "access_token". diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2COAuth2ClientConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2COAuth2ClientConfiguration.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2COAuth2ClientConfiguration.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2COAuth2ClientConfiguration.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2COidcLoginConfigurer.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2COidcLoginConfigurer.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2COidcLoginConfigurer.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2COidcLoginConfigurer.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CProperties.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CProperties.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CProperties.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CProperties.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CResourceServerAutoConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CResourceServerAutoConfiguration.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CResourceServerAutoConfiguration.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CResourceServerAutoConfiguration.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CTrustedIssuerRepository.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CTrustedIssuerRepository.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CTrustedIssuerRepository.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CTrustedIssuerRepository.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CURL.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CURL.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CURL.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/AADB2CURL.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AuthorizationClientProperties.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/AuthorizationClientProperties.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/AuthorizationClientProperties.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/AuthorizationClientProperties.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/package-info.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/package-info.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/b2c/package-info.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/b2c/package-info.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/condition/aad/ClientRegistrationCondition.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/condition/aad/ClientRegistrationCondition.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/condition/aad/ClientRegistrationCondition.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/condition/aad/ClientRegistrationCondition.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/condition/aad/ResourceServerCondition.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/condition/aad/ResourceServerCondition.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/condition/aad/ResourceServerCondition.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/condition/aad/ResourceServerCondition.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/condition/aad/WebApplicationCondition.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/condition/aad/WebApplicationCondition.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/condition/aad/WebApplicationCondition.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/condition/aad/WebApplicationCondition.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/condition/aad/package-info.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/condition/aad/package-info.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/condition/aad/package-info.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/condition/aad/package-info.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosAutoConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosAutoConfiguration.java similarity index 61% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosAutoConfiguration.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosAutoConfiguration.java index f403bd8607f09..4797b1dce4980 100644 --- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosAutoConfiguration.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosAutoConfiguration.java @@ -7,15 +7,19 @@ import com.azure.cosmos.ConnectionMode; import com.azure.cosmos.CosmosAsyncClient; import com.azure.cosmos.CosmosClientBuilder; +import com.azure.spring.autoconfigure.unity.AzureProperties; import com.azure.spring.data.cosmos.config.AbstractCosmosConfiguration; import com.azure.spring.data.cosmos.config.CosmosConfig; import com.azure.spring.data.cosmos.core.CosmosTemplate; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnResource; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import static com.azure.spring.autoconfigure.unity.AzureProperties.AZURE_PROPERTY_BEAN_NAME; + /** * Auto Configure Cosmos properties and connection policy. */ @@ -24,29 +28,33 @@ @ConditionalOnResource(resources = "classpath:cosmos.enable.config") @EnableConfigurationProperties(CosmosProperties.class) public class CosmosAutoConfiguration extends AbstractCosmosConfiguration { - private final CosmosProperties properties; + private final CosmosProperties cosmosProperties; + private final AzureProperties azureProperties; + - public CosmosAutoConfiguration(CosmosProperties properties) { - this.properties = properties; + public CosmosAutoConfiguration(CosmosProperties cosmosProperties, + @Qualifier(AZURE_PROPERTY_BEAN_NAME) AzureProperties azureProperties) { + this.cosmosProperties = cosmosProperties; + this.azureProperties = azureProperties; } @Override protected String getDatabaseName() { - return properties.getDatabase(); + return cosmosProperties.getDatabase(); } @Bean public AzureKeyCredential azureKeyCredential() { - return new AzureKeyCredential(properties.getKey()); + return new AzureKeyCredential(cosmosProperties.getKey()); } @Bean public CosmosClientBuilder cosmosClientBuilder(AzureKeyCredential azureKeyCredential) { CosmosClientBuilder cosmosClientBuilder = new CosmosClientBuilder(); cosmosClientBuilder.credential(azureKeyCredential) - .consistencyLevel(properties.getConsistencyLevel()) - .endpoint(properties.getUri()); - if (ConnectionMode.GATEWAY == properties.getConnectionMode()) { + .consistencyLevel(cosmosProperties.getConsistencyLevel()) + .endpoint(cosmosProperties.getUri()); + if (ConnectionMode.GATEWAY == cosmosProperties.getConnectionMode()) { cosmosClientBuilder.gatewayMode(); } return cosmosClientBuilder; @@ -55,8 +63,8 @@ public CosmosClientBuilder cosmosClientBuilder(AzureKeyCredential azureKeyCreden @Override public CosmosConfig cosmosConfig() { return CosmosConfig.builder() - .enableQueryMetrics(properties.isPopulateQueryMetrics()) - .responseDiagnosticsProcessor(properties.getResponseDiagnosticsProcessor()) + .enableQueryMetrics(cosmosProperties.isPopulateQueryMetrics()) + .responseDiagnosticsProcessor(cosmosProperties.getResponseDiagnosticsProcessor()) .build(); } } diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosHealthConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosHealthConfiguration.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosHealthConfiguration.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosHealthConfiguration.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosHealthIndicator.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosHealthIndicator.java similarity index 94% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosHealthIndicator.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosHealthIndicator.java index 5bde488b7acfc..0f03d7976726e 100644 --- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosHealthIndicator.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosHealthIndicator.java @@ -21,10 +21,10 @@ public class CosmosHealthIndicator extends AbstractHealthIndicator { private static final Logger LOGGER = LoggerFactory.getLogger(CosmosHealthIndicator.class); - @Value("${azure.cosmos.database}") + @Value("${spring.cloud.azure.cosmos.database}") private String dbName; - @Value("${azure.cosmos.uri}") + @Value("${spring.cloud.azure.cosmos.uri}") private String uri; private final CosmosAsyncClient cosmosAsyncClient; diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosProperties.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosProperties.java similarity index 93% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosProperties.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosProperties.java index a523ffe41d53e..b1d916e29e0f2 100644 --- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosProperties.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosProperties.java @@ -5,6 +5,7 @@ import com.azure.cosmos.ConnectionMode; import com.azure.cosmos.ConsistencyLevel; +import com.azure.spring.autoconfigure.unity.AzureProperties; import com.azure.spring.data.cosmos.core.ResponseDiagnosticsProcessor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -18,10 +19,12 @@ * Configuration properties for Cosmos database, consistency, telemetry, connection, query metrics and diagnostics. */ @Validated -@ConfigurationProperties("azure.cosmos") -public class CosmosProperties { +@ConfigurationProperties(CosmosProperties.PREFIX) +public class CosmosProperties extends AzureProperties { private static final Logger LOGGER = LoggerFactory.getLogger(CosmosProperties.class); + public static final String PREFIX = "spring.cloud.azure.cosmos"; + /** * Document DB URI. */ diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosReactiveRepositoriesAutoConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosReactiveRepositoriesAutoConfiguration.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosReactiveRepositoriesAutoConfiguration.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosReactiveRepositoriesAutoConfiguration.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosReactiveRepositoriesAutoConfigureRegistrar.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosReactiveRepositoriesAutoConfigureRegistrar.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosReactiveRepositoriesAutoConfigureRegistrar.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosReactiveRepositoriesAutoConfigureRegistrar.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosRepositoriesAutoConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosRepositoriesAutoConfiguration.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosRepositoriesAutoConfiguration.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosRepositoriesAutoConfiguration.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosRepositoriesAutoConfigureRegistrar.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosRepositoriesAutoConfigureRegistrar.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosRepositoriesAutoConfigureRegistrar.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/cosmos/CosmosRepositoriesAutoConfigureRegistrar.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/package-info.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/cosmos/package-info.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/cosmos/package-info.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/cosmos/package-info.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/jms/AzureServiceBusJMSProperties.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/jms/AzureServiceBusJMSProperties.java similarity index 88% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/jms/AzureServiceBusJMSProperties.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/jms/AzureServiceBusJMSProperties.java index fb16f55a4be18..aca6594ffe3cb 100644 --- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/jms/AzureServiceBusJMSProperties.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/jms/AzureServiceBusJMSProperties.java @@ -3,7 +3,7 @@ package com.azure.spring.autoconfigure.jms; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import com.azure.spring.autoconfigure.unity.AzureProperties; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.util.StringUtils; import org.springframework.validation.annotation.Validated; @@ -14,8 +14,10 @@ * {@link ConfigurationProperties} for configuring Azure Service Bus JMS. */ @Validated -@ConfigurationProperties("spring.jms.servicebus") -public class AzureServiceBusJMSProperties { +@ConfigurationProperties(AzureServiceBusJMSProperties.PREFIX) +public class AzureServiceBusJMSProperties extends AzureProperties { + + public static final String PREFIX = "spring.jms.servicebus"; private String connectionString; @@ -65,7 +67,6 @@ public void setIdleTimeout(int idleTimeout) { * * @throws IllegalArgumentException If connectionString is empty. */ - @SuppressFBWarnings @PostConstruct public void validate() { if (!StringUtils.hasText(connectionString)) { diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/jms/ConnectionStringResolver.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/jms/ConnectionStringResolver.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/jms/ConnectionStringResolver.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/jms/ConnectionStringResolver.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/jms/NonPremiumServiceBusJMSAutoConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/jms/NonPremiumServiceBusJMSAutoConfiguration.java similarity index 90% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/jms/NonPremiumServiceBusJMSAutoConfiguration.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/jms/NonPremiumServiceBusJMSAutoConfiguration.java index 669970a51227c..149963c7a614e 100644 --- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/jms/NonPremiumServiceBusJMSAutoConfiguration.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/jms/NonPremiumServiceBusJMSAutoConfiguration.java @@ -3,7 +3,9 @@ package com.azure.spring.autoconfigure.jms; +import com.azure.spring.autoconfigure.unity.AzureProperties; import org.apache.qpid.jms.JmsConnectionFactory; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; @@ -17,6 +19,8 @@ import javax.jms.ConnectionFactory; +import static com.azure.spring.autoconfigure.unity.AzureProperties.AZURE_PROPERTY_BEAN_NAME; + /** * Automatic configuration class of ServiceBusJMS for Standard and Basic Service Bus */ @@ -32,7 +36,8 @@ public class NonPremiumServiceBusJMSAutoConfiguration { @Bean @ConditionalOnMissingBean - public ConnectionFactory jmsConnectionFactory(AzureServiceBusJMSProperties serviceBusJMSProperties) { + public ConnectionFactory jmsConnectionFactory(AzureServiceBusJMSProperties serviceBusJMSProperties, + @Qualifier(AZURE_PROPERTY_BEAN_NAME)AzureProperties azureProperties) { final String connectionString = serviceBusJMSProperties.getConnectionString(); final String clientId = serviceBusJMSProperties.getTopicClientId(); final int idleTimeout = serviceBusJMSProperties.getIdleTimeout(); diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/jms/PremiumServiceBusJMSAutoConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/jms/PremiumServiceBusJMSAutoConfiguration.java similarity index 85% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/jms/PremiumServiceBusJMSAutoConfiguration.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/jms/PremiumServiceBusJMSAutoConfiguration.java index 7afe1471d849c..8f83e3de8f3f1 100644 --- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/jms/PremiumServiceBusJMSAutoConfiguration.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/jms/PremiumServiceBusJMSAutoConfiguration.java @@ -3,8 +3,10 @@ package com.azure.spring.autoconfigure.jms; +import com.azure.spring.autoconfigure.unity.AzureProperties; import com.microsoft.azure.servicebus.jms.ServiceBusJmsConnectionFactory; import com.microsoft.azure.servicebus.jms.ServiceBusJmsConnectionFactorySettings; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; @@ -18,7 +20,9 @@ import javax.jms.ConnectionFactory; -import static com.azure.spring.utils.ApplicationId.AZURE_SPRING_SERVICE_BUS; +import static com.azure.spring.autoconfigure.unity.AzureProperties.AZURE_PROPERTY_BEAN_NAME; +import static com.azure.spring.core.ApplicationId.AZURE_SPRING_SERVICE_BUS; +import static com.azure.spring.core.ApplicationId.VERSION; /** * Automatic configuration class of ServiceBusJMS for Premium Service Bus @@ -33,7 +37,8 @@ public class PremiumServiceBusJMSAutoConfiguration { @Bean @ConditionalOnMissingBean - public ConnectionFactory jmsConnectionFactory(AzureServiceBusJMSProperties serviceBusJMSProperties) { + public ConnectionFactory jmsConnectionFactory(AzureServiceBusJMSProperties serviceBusJMSProperties, + @Qualifier(AZURE_PROPERTY_BEAN_NAME) AzureProperties azureProperties) { final String connectionString = serviceBusJMSProperties.getConnectionString(); final String clientId = serviceBusJMSProperties.getTopicClientId(); final int idleTimeout = serviceBusJMSProperties.getIdleTimeout(); @@ -44,7 +49,7 @@ public ConnectionFactory jmsConnectionFactory(AzureServiceBusJMSProperties servi final SpringServiceBusJmsConnectionFactory springServiceBusJmsConnectionFactory = new SpringServiceBusJmsConnectionFactory(connectionString, settings); springServiceBusJmsConnectionFactory.setClientId(clientId); - springServiceBusJmsConnectionFactory.setCustomUserAgent(AZURE_SPRING_SERVICE_BUS); + springServiceBusJmsConnectionFactory.setCustomUserAgent(AZURE_SPRING_SERVICE_BUS + VERSION); return springServiceBusJmsConnectionFactory; } diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/jms/ServiceBusKey.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/jms/ServiceBusKey.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/jms/ServiceBusKey.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/jms/ServiceBusKey.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/jms/SpringServiceBusJmsConnectionFactory.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/jms/SpringServiceBusJmsConnectionFactory.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/jms/SpringServiceBusJmsConnectionFactory.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/jms/SpringServiceBusJmsConnectionFactory.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/jms/package-info.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/jms/package-info.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/jms/package-info.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/jms/package-info.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/StorageAutoConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/StorageAutoConfiguration.java similarity index 78% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/StorageAutoConfiguration.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/StorageAutoConfiguration.java index f91d9e391c3c3..e2f2b7e115fe7 100644 --- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/StorageAutoConfiguration.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/StorageAutoConfiguration.java @@ -5,10 +5,11 @@ import com.azure.core.http.policy.HttpLogOptions; import com.azure.spring.autoconfigure.storage.resource.AzureStorageProtocolResolver; -import com.azure.spring.utils.ApplicationId; +import com.azure.spring.autoconfigure.unity.AzureProperties; import com.azure.storage.blob.BlobServiceClientBuilder; import com.azure.storage.common.StorageSharedKeyCredential; import com.azure.storage.file.share.ShareServiceClientBuilder; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -18,6 +19,11 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; +import static com.azure.spring.autoconfigure.unity.AzureProperties.AZURE_PROPERTY_BEAN_NAME; +import static com.azure.spring.core.ApplicationId.AZURE_SPRING_STORAGE_BLOB; +import static com.azure.spring.core.ApplicationId.AZURE_SPRING_STORAGE_FILES; +import static com.azure.spring.core.ApplicationId.VERSION; + /** * An auto-configuration for Azure Storage Account * @@ -32,27 +38,29 @@ public class StorageAutoConfiguration { @Bean @ConditionalOnMissingBean @ConditionalOnProperty("azure.storage.blob-endpoint") - public BlobServiceClientBuilder blobServiceClientBuilder(StorageProperties storageProperties) { + public BlobServiceClientBuilder blobServiceClientBuilder(StorageProperties storageProperties, @Qualifier( + AZURE_PROPERTY_BEAN_NAME) AzureProperties azureProperties) { final String accountName = storageProperties.getAccountName(); final String accountKey = storageProperties.getAccountKey(); return new BlobServiceClientBuilder() .endpoint(storageProperties.getBlobEndpoint()) .credential(new StorageSharedKeyCredential(accountName, accountKey)) - .httpLogOptions(new HttpLogOptions().setApplicationId(ApplicationId.AZURE_SPRING_STORAGE_BLOB)); + .httpLogOptions(new HttpLogOptions().setApplicationId(AZURE_SPRING_STORAGE_BLOB + VERSION)); } @Bean @ConditionalOnMissingBean @ConditionalOnProperty("azure.storage.file-endpoint") - public ShareServiceClientBuilder shareServiceClientBuilder(StorageProperties storageProperties) { + public ShareServiceClientBuilder shareServiceClientBuilder(StorageProperties storageProperties, @Qualifier( + AZURE_PROPERTY_BEAN_NAME) AzureProperties azureProperties) { final String accountName = storageProperties.getAccountName(); final String accountKey = storageProperties.getAccountKey(); return new ShareServiceClientBuilder() .endpoint(storageProperties.getFileEndpoint()) .credential(new StorageSharedKeyCredential(accountName, accountKey)) - .httpLogOptions(new HttpLogOptions().setApplicationId(ApplicationId.AZURE_SPRING_STORAGE_FILES)); + .httpLogOptions(new HttpLogOptions().setApplicationId(AZURE_SPRING_STORAGE_FILES + VERSION)); } @Configuration diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/StorageHealthConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/StorageHealthConfiguration.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/StorageHealthConfiguration.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/StorageHealthConfiguration.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/StorageProperties.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/StorageProperties.java similarity index 85% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/StorageProperties.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/StorageProperties.java index 227beef3798be..76b95cc9ea9f0 100644 --- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/StorageProperties.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/StorageProperties.java @@ -3,6 +3,7 @@ package com.azure.spring.autoconfigure.storage; +import com.azure.spring.autoconfigure.unity.AzureProperties; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.validation.annotation.Validated; @@ -13,8 +14,10 @@ * Storage properties. */ @Validated -@ConfigurationProperties("azure.storage") -public class StorageProperties { +@ConfigurationProperties(StorageProperties.PREFIX) +public class StorageProperties extends AzureProperties { + + public static final String PREFIX = "spring.cloud.azure.storage"; @NotEmpty @Pattern(regexp = "^[a-z0-9]{3,24}$", diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/actuator/BlobStorageHealthIndicator.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/actuator/BlobStorageHealthIndicator.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/actuator/BlobStorageHealthIndicator.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/actuator/BlobStorageHealthIndicator.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/actuator/Constants.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/actuator/Constants.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/actuator/Constants.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/actuator/Constants.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/actuator/FileStorageHealthIndicator.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/actuator/FileStorageHealthIndicator.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/actuator/FileStorageHealthIndicator.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/actuator/FileStorageHealthIndicator.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/actuator/package-info.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/actuator/package-info.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/actuator/package-info.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/actuator/package-info.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/package-info.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/package-info.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/package-info.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/package-info.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/resource/AzureStorageProtocolResolver.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/resource/AzureStorageProtocolResolver.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/resource/AzureStorageProtocolResolver.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/resource/AzureStorageProtocolResolver.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/resource/AzureStorageResource.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/resource/AzureStorageResource.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/resource/AzureStorageResource.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/resource/AzureStorageResource.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/resource/AzureStorageResourcePatternResolver.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/resource/AzureStorageResourcePatternResolver.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/resource/AzureStorageResourcePatternResolver.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/resource/AzureStorageResourcePatternResolver.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/resource/AzureStorageUtils.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/resource/AzureStorageUtils.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/resource/AzureStorageUtils.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/resource/AzureStorageUtils.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/resource/BlobStorageResource.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/resource/BlobStorageResource.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/resource/BlobStorageResource.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/resource/BlobStorageResource.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/resource/FileStorageResource.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/resource/FileStorageResource.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/resource/FileStorageResource.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/resource/FileStorageResource.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/resource/StorageRuntimeException.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/resource/StorageRuntimeException.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/resource/StorageRuntimeException.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/resource/StorageRuntimeException.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/resource/StorageType.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/resource/StorageType.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/resource/StorageType.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/resource/StorageType.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/resource/package-info.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/resource/package-info.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/storage/resource/package-info.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/storage/resource/package-info.java diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/unity/AbstractLegacyPropertyEnvironmentPostProcessor.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/unity/AbstractLegacyPropertyEnvironmentPostProcessor.java new file mode 100644 index 0000000000000..7c8748508e768 --- /dev/null +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/unity/AbstractLegacyPropertyEnvironmentPostProcessor.java @@ -0,0 +1,63 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.spring.autoconfigure.unity; + +import com.azure.spring.keyvault.KeyVaultEnvironmentPostProcessor; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.env.EnvironmentPostProcessor; +import org.springframework.core.Ordered; +import org.springframework.core.env.ConfigurableEnvironment; + +import java.util.Properties; + +import static com.azure.spring.utils.PropertyLoader.loadPropertiesFromClassPath; + +/** + * Abstract class to convert legacy properties to the current when only legacy properties are configured, + * need to be executed before and after {@link KeyVaultEnvironmentPostProcessor} + * if {@link KeyVaultEnvironmentPostProcessor} is enabled. + */ +public abstract class AbstractLegacyPropertyEnvironmentPostProcessor implements EnvironmentPostProcessor, Ordered { + + private static Properties springPropertyMap; + static { + // Load the map of each service's legacy properties and associated current properties from classpath. + springPropertyMap = loadPropertiesFromClassPath("legacy-property-mapping.properties"); + } + + @Override + public abstract int getOrder(); + + @Override + public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { + Properties legacyToCurrentMap = buildLegacyToCurrentPropertyMap(environment); + Properties convertedProperties = convertLegacyToCurrent(environment, legacyToCurrentMap); + setConvertedPropertyToEnvironment(environment, convertedProperties); + } + + protected Properties buildLegacyToCurrentPropertyMap(ConfigurableEnvironment environment) { + Properties legacyToCurrentMap = new Properties(); + legacyToCurrentMap.putAll(springPropertyMap); + return legacyToCurrentMap; + } + + /** + * Convert legacy properties to the current and create new {@link Properties} to store mapped current properties + * if only legacy properties are configured. + * + * @param environment The application environment to load property from. + * @param legacyToCurrentMap A {@link Properties} contains a map of all legacy properties and associated current ones. + * @return A {@link Properties} to store mapped current properties + */ + protected abstract Properties convertLegacyToCurrent(ConfigurableEnvironment environment, Properties legacyToCurrentMap); + + /** + * Add the mapped current properties to application environment, + * of which the precedence varies in different processors. + * + * @param environment The application environment to load property from. + * @param properties The converted current properties to be configured. + */ + protected abstract void setConvertedPropertyToEnvironment(ConfigurableEnvironment environment, Properties properties); +} diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/unity/AzureProperties.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/unity/AzureProperties.java new file mode 100644 index 0000000000000..65731c0a33f73 --- /dev/null +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/unity/AzureProperties.java @@ -0,0 +1,34 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.spring.autoconfigure.unity; + +/** + * Unified properties for Azure SDK clients. + */ +public class AzureProperties { + + public static final String AZURE_PROPERTY_BEAN_NAME = "azureProperties"; + + public static final String PREFIX = "spring.cloud.azure"; + + private CredentialProperties credential; + + private EnvironmentProperties environment; + + public CredentialProperties getCredential() { + return credential; + } + + public void setCredential(CredentialProperties credential) { + this.credential = credential; + } + + public EnvironmentProperties getEnvironment() { + return environment; + } + + public void setEnvironment(EnvironmentProperties environment) { + this.environment = environment; + } +} diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/unity/AzurePropertyAutoConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/unity/AzurePropertyAutoConfiguration.java new file mode 100644 index 0000000000000..321639a3078be --- /dev/null +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/unity/AzurePropertyAutoConfiguration.java @@ -0,0 +1,43 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.spring.autoconfigure.unity; + +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.boot.context.properties.bind.Binder; +import org.springframework.context.EnvironmentAware; +import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; +import org.springframework.core.env.Environment; +import org.springframework.core.type.AnnotationMetadata; + +/** + * Automatic configuration class of {@link AzureProperties} for unified configuration of Azure Spring libraries. + */ +@Import(AzurePropertyAutoConfiguration.Registrar.class) +public class AzurePropertyAutoConfiguration { + + public static final String AZURE_PROPERTY_BEAN_NAME = "azureProperties"; + + static class Registrar implements EnvironmentAware, ImportBeanDefinitionRegistrar { + private Environment environment; + + @Override + public void setEnvironment(Environment environment) { + this.environment = environment; + } + + @Override + public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, + BeanDefinitionRegistry registry) { + if (!registry.containsBeanDefinition(AZURE_PROPERTY_BEAN_NAME)) { + registry.registerBeanDefinition(AZURE_PROPERTY_BEAN_NAME, + BeanDefinitionBuilder.genericBeanDefinition(AzureProperties.class, + () -> Binder.get(this.environment).bindOrCreate(AzureProperties.PREFIX, + AzureProperties.class)).getBeanDefinition()); + } + } + + } +} diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/unity/CredentialProperties.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/unity/CredentialProperties.java new file mode 100644 index 0000000000000..471beace548c1 --- /dev/null +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/unity/CredentialProperties.java @@ -0,0 +1,76 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.spring.autoconfigure.unity; + + +/** + * Azure properties used for getting token credential. + */ +public class CredentialProperties { + + /** + * Client id to use when performing service principal authentication with Azure. + */ + private String clientId; + + /** + * Client secret to use when performing service principal authentication with Azure. + */ + private String clientSecret; + + /** + * Path of a PEM certificate file to use when performing service principal authentication with Azure. + */ + private String clientCertificatePath; + + /** + * Password of the certificate file. + */ + private String clientCertificatePassword; + + /** + * Tenant id for the Azure resources. + */ + private String tenantId; + + public String getClientId() { + return clientId; + } + + public void setClientId(String clientId) { + this.clientId = clientId; + } + + public String getClientSecret() { + return clientSecret; + } + + public void setClientSecret(String clientSecret) { + this.clientSecret = clientSecret; + } + + public String getClientCertificatePath() { + return clientCertificatePath; + } + + public void setClientCertificatePath(String clientCertificatePath) { + this.clientCertificatePath = clientCertificatePath; + } + + public String getClientCertificatePassword() { + return clientCertificatePassword; + } + + public void setClientCertificatePassword(String clientCertificatePassword) { + this.clientCertificatePassword = clientCertificatePassword; + } + + public String getTenantId() { + return tenantId; + } + + public void setTenantId(String tenantId) { + this.tenantId = tenantId; + } +} diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/unity/EnvironmentProperties.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/unity/EnvironmentProperties.java new file mode 100644 index 0000000000000..606b51f2d38bd --- /dev/null +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/unity/EnvironmentProperties.java @@ -0,0 +1,41 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +package com.azure.spring.autoconfigure.unity; + +/** + * Environment properties for endpoints in different Azure Clouds. + */ +public class EnvironmentProperties { + + private String cloud; + + private String authorityHost; + + private String graphBaseUri; + + public String getCloud() { + return cloud; + } + + public void setCloud(String cloud) { + this.cloud = cloud; + } + + public String getAuthorityHost() { + return authorityHost; + } + + public void setAuthorityHost(String authorityHost) { + this.authorityHost = authorityHost; + } + + public String getGraphBaseUri() { + return graphBaseUri; + } + + public void setGraphBaseUri(String graphBaseUri) { + this.graphBaseUri = graphBaseUri; + } + + //TODO: transfer cloud to AzureEnvironment +} diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/unity/PreLegacyPropertyEnvironmentPostProcessor.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/unity/PreLegacyPropertyEnvironmentPostProcessor.java new file mode 100644 index 0000000000000..e33cd1412607e --- /dev/null +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/unity/PreLegacyPropertyEnvironmentPostProcessor.java @@ -0,0 +1,151 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +package com.azure.spring.autoconfigure.unity; + +import com.azure.spring.keyvault.KeyVaultEnvironmentPostProcessor; +import com.azure.spring.keyvault.KeyVaultProperties; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor; +import org.springframework.boot.context.properties.bind.BindResult; +import org.springframework.boot.context.properties.bind.Bindable; +import org.springframework.boot.context.properties.bind.Binder; +import org.springframework.core.env.ConfigurableEnvironment; +import org.springframework.core.env.PropertiesPropertySource; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Properties; + +import static com.azure.spring.utils.PropertyLoader.loadPropertiesFromClassPath; + +/** + * Convert legacy properties to the current and set into environment before {@link KeyVaultEnvironmentPostProcessor}. + */ +public class PreLegacyPropertyEnvironmentPostProcessor extends AbstractLegacyPropertyEnvironmentPostProcessor { + + public static final int DEFAULT_ORDER = ConfigDataEnvironmentPostProcessor.ORDER + 1; + private static final Logger LOGGER = LoggerFactory.getLogger(PreLegacyPropertyEnvironmentPostProcessor.class); + private static final String KEYVAULT_LEGACY_PREFIX = "azure.keyvault"; + public static final String DELIMITER = "."; + + @Override + public int getOrder() { + return DEFAULT_ORDER; + } + + @Override + protected Properties buildLegacyToCurrentPropertyMap(ConfigurableEnvironment environment) { + Properties legacyToCurrentMap = super.buildLegacyToCurrentPropertyMap(environment); + String[] keyVaultNames = getMultipleKeyVaultNames(environment); + if (keyVaultNames != null) { + // Load the mapping relationship of Key Vault legacy properties and associated current properties from + // classpath, this is used for handling multiple key vault cases. + Properties keyVaultPropertySuffixMap = loadPropertiesFromClassPath("legacy-keyvault-property-suffix-mapping.properties"); + addMultipleKVPropertyToMap(keyVaultNames, keyVaultPropertySuffixMap, legacyToCurrentMap); + } + return legacyToCurrentMap; + } + + /** + * Load all possible Key Vault names from property "spring.cloud.azure.keyvault.order" if existed. Otherwise load + * from legacy property "azure.keyvault.order". + * + * @param environment The application environment to load property from. + * @return A string with all Key Vaults names concatenated by commas, or null if no Key Vault names specified. + */ + private String[] getMultipleKeyVaultNames(ConfigurableEnvironment environment) { + String[] kvNames = null; + List kvOrderPropertyNames = Arrays.asList(KeyVaultProperties.PREFIX + ".order", + KEYVAULT_LEGACY_PREFIX + ".order"); + for (String kvOrderPropertyName : kvOrderPropertyNames) { + String kvNamesString = Binder.get(environment) + .bind(kvOrderPropertyName, Bindable.of(String.class)) + .orElse(null); + if (StringUtils.hasText(kvNamesString)) { + kvNames = Arrays.stream(kvNamesString.split(",")) + .map(String::trim) + .toArray(size -> new String[size]); + break; + } + } + + return kvNames; + } + + /** + * Build a legacy Key Vault property map of multiple key vault use case. When multiple Key Vaults are used, Key + * Vault property names are not fixed and varies across user definition. + * + * @param keyVaultNames A string array contains all Key Vaults names. + * @param keyVaultPropertySuffixMap A {@link Properties} contains a map of Key Vault property suffixes from legacy + * to current. + * @param legacyToCurrentMap A {@link Properties} contains a map of all legacy properties and associated current ones. + */ + protected void addMultipleKVPropertyToMap(String[] keyVaultNames, Properties keyVaultPropertySuffixMap, + Properties legacyToCurrentMap) { + Arrays.stream(keyVaultNames).forEach(keyVault -> { + for (Map.Entry mapping : keyVaultPropertySuffixMap.entrySet()) { + String legacy = buildPropertyName(KEYVAULT_LEGACY_PREFIX, keyVault, (String) mapping.getKey()); + String current = buildPropertyName(KeyVaultProperties.PREFIX, keyVault, (String) mapping.getValue()); + legacyToCurrentMap.put(legacy, current); + } + }); + } + + private String buildPropertyName(String propertyPrefix, String propertyInfix, String propertySuffix) { + return String.join(DELIMITER, propertyPrefix, propertyInfix, propertySuffix); + } + + /** + * When only legacy properties are detected from all property sources, convert legacy properties to the current, + * and create a new {@link Properties} to store all of the converted current properties. + * + * @param environment The application environment to load property from. + * @param legacyToCurrentMap A {@link Properties} contains a map of all legacy properties and associated current properties. + * @return A {@link Properties} to store mapped current properties + */ + @Override + protected Properties convertLegacyToCurrent(ConfigurableEnvironment environment, Properties legacyToCurrentMap) { + Properties properties = new Properties(); + for (Map.Entry entry : legacyToCurrentMap.entrySet()) { + String legacyPropertyName = (String) entry.getKey(); + BindResult legacyPropertyValue = Binder.get(environment) + .bind(legacyPropertyName, Bindable.of(Object.class)); + if (!legacyPropertyValue.isBound()) { + continue; + } + String currentPropertyName = (String) entry.getValue(); + BindResult currentPropertyValue = Binder.get(environment) + .bind(currentPropertyName, Bindable.of(Object.class)); + if (!currentPropertyValue.isBound()) { + properties.put(currentPropertyName, legacyPropertyValue.get()); + LOGGER.warn(toLogString(legacyPropertyName, currentPropertyName)); + } + } + return properties; + } + + /** + * Add the mapped current properties to application environment, of which the precedence does not count. + * + * @param environment The application environment to load property from. + * @param properties The converted current properties to be configured. + */ + @Override + protected void setConvertedPropertyToEnvironment(ConfigurableEnvironment environment, Properties properties) { + // This post-processor is called multiple times but sets the properties only once. + if (!CollectionUtils.isEmpty(properties)) { + PropertiesPropertySource convertedPropertySource = + new PropertiesPropertySource(PreLegacyPropertyEnvironmentPostProcessor.class.getName(), properties); + environment.getPropertySources().addLast(convertedPropertySource); + } + } + + public static String toLogString(String legacyPropertyName, String currentPropertyName) { + return String.format("Deprecated property %s detected! Use %s instead!", legacyPropertyName, currentPropertyName); + } +} diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util/package-info.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/unity/package-info.java similarity index 50% rename from sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util/package-info.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/unity/package-info.java index c2b23b4ad5538..9e0fcef114317 100644 --- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util/package-info.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/autoconfigure/unity/package-info.java @@ -2,6 +2,6 @@ // Licensed under the MIT License. /** - * Package com.azure.spring.cloud.context.core.util; + * Package com.azure.spring.autoconfigure.unity; */ -package com.azure.spring.cloud.context.core.util; +package com.azure.spring.autoconfigure.unity; diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/cache/AzureRedisAutoConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/cache/AzureRedisAutoConfiguration.java index 3b3eaf2624caf..94105673ced64 100644 --- a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/cache/AzureRedisAutoConfiguration.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/cache/AzureRedisAutoConfiguration.java @@ -5,10 +5,11 @@ import com.azure.resourcemanager.AzureResourceManager; import com.azure.resourcemanager.redis.models.RedisCache; -import com.azure.spring.cloud.autoconfigure.context.AzureContextAutoConfiguration; -import com.azure.spring.cloud.context.core.config.AzureProperties; +import com.azure.spring.cloud.autoconfigure.context.AzureResourceManagerAutoConfiguration; +import com.azure.spring.cloud.context.core.api.AzureResourceMetadata; import com.azure.spring.cloud.context.core.impl.RedisCacheManager; import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -27,17 +28,19 @@ * @author Warren Zhu */ @Configuration -@AutoConfigureAfter(AzureContextAutoConfiguration.class) +@AutoConfigureAfter(AzureResourceManagerAutoConfiguration.class) @ConditionalOnProperty(value = "spring.cloud.azure.redis.enabled", matchIfMissing = true) -@ConditionalOnClass(RedisOperations.class) +@ConditionalOnClass({RedisOperations.class, RedisCacheManager.class}) @EnableConfigurationProperties(AzureRedisProperties.class) public class AzureRedisAutoConfiguration { - @ConditionalOnMissingBean + @Bean + @ConditionalOnMissingBean + @ConditionalOnBean({ AzureResourceManager.class, AzureResourceMetadata.class }) public RedisCacheManager redisCacheManager(AzureResourceManager azureResourceManager, - AzureProperties azureProperties) { - return new RedisCacheManager(azureResourceManager, azureProperties); + AzureResourceMetadata azureResourceMetadata) { + return new RedisCacheManager(azureResourceManager, azureResourceMetadata); } @ConditionalOnMissingBean diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/cloudfoundry/AzureCloudFoundryEnvironmentPostProcessor.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/cloudfoundry/AzureCloudFoundryEnvironmentPostProcessor.java index 9f9c6f4399b20..a6603378c3423 100644 --- a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/cloudfoundry/AzureCloudFoundryEnvironmentPostProcessor.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/cloudfoundry/AzureCloudFoundryEnvironmentPostProcessor.java @@ -15,12 +15,12 @@ import org.springframework.core.env.PropertiesPropertySource; import org.springframework.util.StringUtils; +import java.util.Arrays; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; -import java.util.HashSet; -import java.util.Arrays; /** diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/config/AzureProperties.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/context/AzureContextProperties.java similarity index 80% rename from sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/config/AzureProperties.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/context/AzureContextProperties.java index e716ebbb53509..b154d429dca93 100644 --- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/config/AzureProperties.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/context/AzureContextProperties.java @@ -1,24 +1,22 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -package com.azure.spring.cloud.context.core.config; +package com.azure.spring.cloud.autoconfigure.context; -import com.azure.core.util.CoreUtils; -import com.azure.spring.cloud.context.core.api.CredentialSupplier; -import com.azure.spring.cloud.context.core.enums.AzureEnvironments; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.util.Assert; +import org.springframework.util.StringUtils; import org.springframework.validation.annotation.Validated; import javax.annotation.PostConstruct; /** - * Azure related properties. + * Azure Context related properties for resource management. */ @Validated -@ConfigurationProperties(AzureProperties.PREFIX) -public class AzureProperties implements CredentialSupplier { +@ConfigurationProperties(AzureContextProperties.PREFIX) +public class AzureContextProperties { public static final String PREFIX = "spring.cloud.azure"; @@ -30,7 +28,7 @@ public class AzureProperties implements CredentialSupplier { private String resourceGroup; - private AzureEnvironments environment = AzureEnvironments.Azure; + private String environment = "Azure"; private String region; @@ -47,7 +45,7 @@ private void validate() { "When auto create resources is enabled, spring.cloud.azure.region must be provided"); } - if (msiEnabled && CoreUtils.isNullOrEmpty(subscriptionId)) { + if (msiEnabled && !StringUtils.hasText(subscriptionId)) { Assert.hasText(this.subscriptionId, "When msi is enabled, " + "spring.cloud.azure.subscription-id must be provided"); } @@ -85,11 +83,11 @@ public void setResourceGroup(String resourceGroup) { this.resourceGroup = resourceGroup; } - public AzureEnvironments getEnvironment() { + public String getEnvironment() { return environment; } - public void setEnvironment(AzureEnvironments environment) { + public void setEnvironment(String environment) { this.environment = environment; } diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/context/AzureResourceManagerAutoConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/context/AzureResourceManagerAutoConfiguration.java new file mode 100644 index 0000000000000..3a8460bd81ae6 --- /dev/null +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/context/AzureResourceManagerAutoConfiguration.java @@ -0,0 +1,128 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.spring.cloud.autoconfigure.context; + +import com.azure.core.credential.TokenCredential; +import com.azure.core.management.AzureEnvironment; +import com.azure.core.management.profile.AzureProfile; +import com.azure.resourcemanager.AzureResourceManager; +import com.azure.spring.cloud.context.core.api.AzureResourceMetadata; +import com.azure.spring.identity.DefaultSpringCredentialBuilder; +import com.azure.spring.cloud.context.core.impl.AzureManager; +import com.azure.spring.cloud.context.core.impl.ResourceGroupManager; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; +import org.springframework.util.StringUtils; + +import java.util.Locale; + +/** + * + * + * @author Warren Zhu + */ +@Configuration +@EnableConfigurationProperties(AzureContextProperties.class) +@ConditionalOnClass(AzureManager.class) +@ConditionalOnProperty(prefix = "spring.cloud.azure", value = { "resource-group" }) +public class AzureResourceManagerAutoConfiguration { + + + @Bean + @ConditionalOnMissingBean + public AzureEnvironment azureEnvironment(AzureContextProperties azureContextProperties) { + return parseAzureEnvironment(azureContextProperties.getEnvironment()); + } + + @Bean + @ConditionalOnMissingBean + public AzureProfile azureProfile(AzureContextProperties azureContextProperties, AzureEnvironment azureEnvironment) { + return new AzureProfile(azureContextProperties.getTenantId(), + azureContextProperties.getSubscriptionId(), + azureEnvironment); + } + + /** + * Create an {@link AzureResourceManager} bean. + * + * @param credential The credential to connect to Azure. + * @param profile The azure profile. + * @return An AzureResourceManager object. + */ + @Bean + @ConditionalOnMissingBean + public AzureResourceManager azureResourceManager(TokenCredential credential, AzureProfile profile) { + // TODO (xiada) Do we need to pass our User-Agent to with the management sdk? + return AzureResourceManager.configure() + .authenticate(credential, profile) + .withDefaultSubscription(); + } + + @Bean + @ConditionalOnMissingBean + public AzureResourceMetadata azureResourceMetadata(AzureContextProperties azureContextProperties) { + AzureResourceMetadata azureResourceMetadata = new AzureResourceMetadata(); + azureResourceMetadata.setAutoCreateResources(azureContextProperties.isAutoCreateResources()); + azureResourceMetadata.setRegion(azureContextProperties.getRegion()); + azureResourceMetadata.setResourceGroup(azureContextProperties.getResourceGroup()); + + return azureResourceMetadata; + } + + @Bean + @ConditionalOnMissingBean + @ConditionalOnBean(AzureResourceManager.class) + public ResourceGroupManager resourceGroupManager(AzureResourceManager azureResourceManager, + AzureResourceMetadata azureResourceMetadata) { + ResourceGroupManager resourceGroupManager = new ResourceGroupManager(azureResourceManager, azureResourceMetadata); + if (azureResourceMetadata.isAutoCreateResources() + && !resourceGroupManager.exists(azureResourceMetadata.getResourceGroup())) { + resourceGroupManager.create(azureResourceMetadata.getResourceGroup()); + } + return resourceGroupManager; + } + + + private AzureEnvironment parseAzureEnvironment(String environment) { + AzureEnvironment azureEnvironment = AzureEnvironment.AZURE; + + if (!StringUtils.hasText(environment)) { + return azureEnvironment; + } + + switch (environment.toUpperCase(Locale.ROOT)) { + case "AZURE_CHINA": + azureEnvironment = AzureEnvironment.AZURE_CHINA; + break; + case "AZURE_US_GOVERNMENT": + azureEnvironment = AzureEnvironment.AZURE_US_GOVERNMENT; + break; + case "AZURE_GERMANY": + azureEnvironment = AzureEnvironment.AZURE_GERMANY; + break; + default: + azureEnvironment = AzureEnvironment.AZURE; + break; + } + + return azureEnvironment; + } + + // TODO (xiada) shouldn't be here + @Bean + @ConditionalOnMissingBean + public TokenCredential credential(Environment environment) { + return new DefaultSpringCredentialBuilder().environment(environment) + .alternativePrefix(AzureContextProperties.PREFIX) + .build(); + } + + +} diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/autoconfigure/context/package-info.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/context/package-info.java similarity index 100% rename from sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/autoconfigure/context/package-info.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/context/package-info.java diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubAutoConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubAutoConfiguration.java index fe13afd179fb5..7aa5123c7cf2e 100644 --- a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubAutoConfiguration.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubAutoConfiguration.java @@ -6,16 +6,14 @@ import com.azure.core.management.AzureEnvironment; import com.azure.messaging.eventhubs.EventHubConsumerAsyncClient; import com.azure.resourcemanager.AzureResourceManager; -import com.azure.spring.cloud.autoconfigure.context.AzureContextAutoConfiguration; -import com.azure.spring.cloud.context.core.api.EnvironmentProvider; -import com.azure.spring.cloud.context.core.config.AzureProperties; +import com.azure.spring.cloud.autoconfigure.context.AzureResourceManagerAutoConfiguration; +import com.azure.spring.cloud.context.core.api.AzureResourceMetadata; import com.azure.spring.cloud.context.core.impl.EventHubNamespaceManager; import com.azure.spring.cloud.context.core.impl.StorageAccountManager; import com.azure.spring.cloud.context.core.storage.StorageConnectionStringProvider; import com.azure.spring.integration.eventhub.api.EventHubClientFactory; import com.azure.spring.integration.eventhub.api.EventHubOperation; import com.azure.spring.integration.eventhub.factory.DefaultEventHubClientFactory; -import com.azure.spring.integration.eventhub.factory.EventHubConnectionStringProvider; import com.azure.spring.integration.eventhub.impl.EventHubTemplate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -36,7 +34,7 @@ * @author Warren Zhu */ @Configuration -@AutoConfigureAfter(AzureContextAutoConfiguration.class) +@AutoConfigureAfter(AzureResourceManagerAutoConfiguration.class) @ConditionalOnClass(EventHubConsumerAsyncClient.class) @ConditionalOnProperty(value = "spring.cloud.azure.eventhub.enabled", matchIfMissing = true) @EnableConfigurationProperties(AzureEventHubProperties.class) @@ -46,18 +44,18 @@ public class AzureEventHubAutoConfiguration { @Bean @ConditionalOnMissingBean - @ConditionalOnBean(AzureResourceManager.class) + @ConditionalOnBean({ AzureResourceManager.class, AzureResourceMetadata.class }) public EventHubNamespaceManager eventHubNamespaceManager(AzureResourceManager azureResourceManager, - AzureProperties azureProperties) { - return new EventHubNamespaceManager(azureResourceManager, azureProperties); + AzureResourceMetadata azureResourceMetadata) { + return new EventHubNamespaceManager(azureResourceManager, azureResourceMetadata); } @Bean @ConditionalOnMissingBean - @ConditionalOnBean(AzureResourceManager.class) + @ConditionalOnBean({ AzureResourceManager.class, AzureResourceMetadata.class }) public StorageAccountManager storageAccountManager(AzureResourceManager azureResourceManager, - AzureProperties azureProperties) { - return new StorageAccountManager(azureResourceManager, azureProperties); + AzureResourceMetadata azureResourceMetadata) { + return new StorageAccountManager(azureResourceManager, azureResourceMetadata); } /** @@ -93,7 +91,7 @@ public EventHubConnectionStringProvider eventHubConnectionStringProvider( @Bean @ConditionalOnMissingBean public EventHubClientFactory eventhubClientFactory( - @Autowired(required = false) EnvironmentProvider environmentProvider, + @Autowired(required = false) AzureEnvironment azureEnvironment, @Autowired(required = false) StorageAccountManager storageAccountManager, EventHubConnectionStringProvider eventHubConnectionStringProvider, AzureEventHubProperties properties @@ -105,8 +103,7 @@ public EventHubClientFactory eventhubClientFactory( final String eventHubConnectionString = eventHubConnectionStringProvider.getConnectionString(); final String storageConnectionString = getStorageConnectionString(properties, - storageAccountManager, - environmentProvider == null ? null : environmentProvider.getEnvironment()); + storageAccountManager, azureEnvironment); return new DefaultEventHubClientFactory(eventHubConnectionString, storageConnectionString, properties.getCheckpointContainer()); diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubKafkaAutoConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubKafkaAutoConfiguration.java index 94d8859f57ebd..33bf5742d9e05 100644 --- a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubKafkaAutoConfiguration.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubKafkaAutoConfiguration.java @@ -8,10 +8,9 @@ import com.azure.resourcemanager.eventhubs.models.EventHubAuthorizationKey; import com.azure.resourcemanager.eventhubs.models.EventHubNamespace; import com.azure.resourcemanager.eventhubs.models.EventHubNamespaceAuthorizationRule; -import com.azure.spring.cloud.autoconfigure.context.AzureContextAutoConfiguration; -import com.azure.spring.cloud.context.core.config.AzureProperties; +import com.azure.spring.cloud.autoconfigure.context.AzureResourceManagerAutoConfiguration; +import com.azure.spring.cloud.context.core.api.AzureResourceMetadata; import com.azure.spring.cloud.context.core.impl.EventHubNamespaceManager; -import com.azure.spring.integration.eventhub.factory.EventHubConnectionStringProvider; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; @@ -33,7 +32,7 @@ * @author Warren Zhu */ @Configuration -@AutoConfigureAfter(AzureContextAutoConfiguration.class) +@AutoConfigureAfter(AzureResourceManagerAutoConfiguration.class) @ConditionalOnClass(KafkaTemplate.class) @ConditionalOnProperty(prefix = "spring.cloud.azure.eventhub", value = "namespace") @EnableConfigurationProperties(AzureEventHubProperties.class) @@ -69,10 +68,10 @@ public KafkaProperties kafkaProperties(EventHubNamespaceManager eventHubNamespac @Bean @ConditionalOnMissingBean - @ConditionalOnBean(AzureResourceManager.class) + @ConditionalOnBean({ AzureResourceManager.class, AzureResourceMetadata.class }) public EventHubNamespaceManager eventHubNamespaceManager(AzureResourceManager azureResourceManager, - AzureProperties azureProperties) { - return new EventHubNamespaceManager(azureResourceManager, azureProperties); + AzureResourceMetadata azureResourceMetadata) { + return new EventHubNamespaceManager(azureResourceManager, azureResourceMetadata); } diff --git a/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/factory/EventHubConnectionStringProvider.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/eventhub/EventHubConnectionStringProvider.java similarity index 96% rename from sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/factory/EventHubConnectionStringProvider.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/eventhub/EventHubConnectionStringProvider.java index db09d163a6a15..d299a81194e37 100644 --- a/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/factory/EventHubConnectionStringProvider.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/eventhub/EventHubConnectionStringProvider.java @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -package com.azure.spring.integration.eventhub.factory; +package com.azure.spring.cloud.autoconfigure.eventhub; import com.azure.resourcemanager.eventhubs.models.AuthorizationRule; import com.azure.resourcemanager.eventhubs.models.EventHubAuthorizationKey; diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusAutoConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusAutoConfiguration.java index 4b203cebc4ee1..951a3d245bec7 100644 --- a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusAutoConfiguration.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusAutoConfiguration.java @@ -5,10 +5,9 @@ import com.azure.messaging.servicebus.ServiceBusReceivedMessage; import com.azure.resourcemanager.AzureResourceManager; -import com.azure.spring.cloud.autoconfigure.context.AzureContextAutoConfiguration; -import com.azure.spring.cloud.context.core.config.AzureProperties; +import com.azure.spring.cloud.autoconfigure.context.AzureResourceManagerAutoConfiguration; +import com.azure.spring.cloud.context.core.api.AzureResourceMetadata; import com.azure.spring.cloud.context.core.impl.ServiceBusNamespaceManager; -import com.azure.spring.integration.servicebus.factory.ServiceBusConnectionStringProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -28,7 +27,7 @@ * @author Warren Zhu */ @Configuration -@AutoConfigureAfter(AzureContextAutoConfiguration.class) +@AutoConfigureAfter(AzureResourceManagerAutoConfiguration.class) @ConditionalOnClass(ServiceBusReceivedMessage.class) @ConditionalOnProperty(value = "spring.cloud.azure.servicebus.enabled", matchIfMissing = true) @EnableConfigurationProperties(AzureServiceBusProperties.class) @@ -38,10 +37,10 @@ public class AzureServiceBusAutoConfiguration { @Bean @ConditionalOnMissingBean - @ConditionalOnBean({ AzureResourceManager.class, AzureProperties.class }) + @ConditionalOnBean({ AzureResourceManager.class, AzureResourceMetadata.class }) public ServiceBusNamespaceManager serviceBusNamespaceManager(AzureResourceManager azureResourceManager, - AzureProperties azureProperties) { - return new ServiceBusNamespaceManager(azureResourceManager, azureProperties); + AzureResourceMetadata azureResourceMetadata) { + return new ServiceBusNamespaceManager(azureResourceManager, azureResourceMetadata); } /** diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusQueueAutoConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusQueueAutoConfiguration.java index d7ee1307c6cb1..7fb320e64036b 100644 --- a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusQueueAutoConfiguration.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusQueueAutoConfiguration.java @@ -4,12 +4,14 @@ package com.azure.spring.cloud.autoconfigure.servicebus; import com.azure.messaging.servicebus.ServiceBusProcessorClient; -import com.azure.spring.cloud.context.core.config.AzureProperties; +import com.azure.resourcemanager.servicebus.models.ServiceBusNamespace; +import com.azure.spring.cloud.context.core.api.AzureResourceMetadata; import com.azure.spring.cloud.context.core.impl.ServiceBusNamespaceManager; import com.azure.spring.cloud.context.core.impl.ServiceBusQueueManager; +import com.azure.spring.core.util.Tuple; import com.azure.spring.integration.servicebus.converter.ServiceBusMessageConverter; import com.azure.spring.integration.servicebus.factory.DefaultServiceBusQueueClientFactory; -import com.azure.spring.integration.servicebus.factory.ServiceBusConnectionStringProvider; +import com.azure.spring.integration.servicebus.factory.ServiceBusProvisioner; import com.azure.spring.integration.servicebus.factory.ServiceBusQueueClientFactory; import com.azure.spring.integration.servicebus.queue.ServiceBusQueueOperation; import com.azure.spring.integration.servicebus.queue.ServiceBusQueueTemplate; @@ -40,9 +42,9 @@ public class AzureServiceBusQueueAutoConfiguration { @Bean @ConditionalOnMissingBean - @ConditionalOnBean(ServiceBusNamespaceManager.class) - public ServiceBusQueueManager serviceBusQueueManager(AzureProperties azureProperties) { - return new ServiceBusQueueManager(azureProperties); + @ConditionalOnBean({ ServiceBusNamespaceManager.class, AzureResourceMetadata.class }) + public ServiceBusQueueManager serviceBusQueueManager(AzureResourceMetadata azureResourceMetadata) { + return new ServiceBusQueueManager(azureResourceMetadata); } @Bean @@ -64,13 +66,45 @@ public ServiceBusQueueClientFactory queueClientFactory( DefaultServiceBusQueueClientFactory clientFactory = new DefaultServiceBusQueueClientFactory(connectionString, properties.getTransportType()); clientFactory.setRetryOptions(properties.getRetryOptions()); - clientFactory.setNamespace(properties.getNamespace()); - clientFactory.setServiceBusNamespaceManager(namespaceManager); - clientFactory.setServiceBusQueueManager(queueManager); + clientFactory.setServiceBusProvisioner(new ServiceBusQueueProvisioner(namespaceManager, queueManager) { + }); return clientFactory; } + static class ServiceBusQueueProvisioner implements ServiceBusProvisioner { + + private final ServiceBusNamespaceManager namespaceManager; + private final ServiceBusQueueManager queueManager; + + ServiceBusQueueProvisioner(ServiceBusNamespaceManager namespaceManager, + ServiceBusQueueManager queueManager) { + this.namespaceManager = namespaceManager; + this.queueManager = queueManager; + } + + @Override + public void provisionNamespace(String namespace) { + this.namespaceManager.create(namespace); + } + + @Override + public void provisionQueue(String namespace, String queue) { + final ServiceBusNamespace serviceBusNamespace = namespaceManager.get(namespace); + this.queueManager.create(Tuple.of(serviceBusNamespace, queue)); + } + + @Override + public void provisionTopic(String namespace, String topic) { + throw new UnsupportedOperationException("Can't provision topic in a queue client"); + } + + @Override + public void provisionSubscription(String namespace, String topic, String subscription) { + throw new UnsupportedOperationException("Can't provision subscription in a queue client"); + } + } + @Bean @ConditionalOnMissingBean public ServiceBusMessageConverter messageConverter() { diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusTopicAutoConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusTopicAutoConfiguration.java index 29acae439e212..2bd75feb41626 100644 --- a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusTopicAutoConfiguration.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusTopicAutoConfiguration.java @@ -4,13 +4,16 @@ package com.azure.spring.cloud.autoconfigure.servicebus; import com.azure.messaging.servicebus.ServiceBusProcessorClient; -import com.azure.spring.cloud.context.core.config.AzureProperties; +import com.azure.resourcemanager.servicebus.models.ServiceBusNamespace; +import com.azure.resourcemanager.servicebus.models.Topic; +import com.azure.spring.cloud.context.core.api.AzureResourceMetadata; import com.azure.spring.cloud.context.core.impl.ServiceBusNamespaceManager; import com.azure.spring.cloud.context.core.impl.ServiceBusTopicManager; import com.azure.spring.cloud.context.core.impl.ServiceBusTopicSubscriptionManager; +import com.azure.spring.core.util.Tuple; import com.azure.spring.integration.servicebus.converter.ServiceBusMessageConverter; import com.azure.spring.integration.servicebus.factory.DefaultServiceBusTopicClientFactory; -import com.azure.spring.integration.servicebus.factory.ServiceBusConnectionStringProvider; +import com.azure.spring.integration.servicebus.factory.ServiceBusProvisioner; import com.azure.spring.integration.servicebus.factory.ServiceBusTopicClientFactory; import com.azure.spring.integration.servicebus.topic.ServiceBusTopicOperation; import com.azure.spring.integration.servicebus.topic.ServiceBusTopicTemplate; @@ -41,16 +44,16 @@ public class AzureServiceBusTopicAutoConfiguration { @Bean @ConditionalOnMissingBean - @ConditionalOnBean(ServiceBusNamespaceManager.class) - public ServiceBusTopicManager serviceBusTopicManager(AzureProperties azureProperties) { - return new ServiceBusTopicManager(azureProperties); + @ConditionalOnBean({ ServiceBusNamespaceManager.class, AzureResourceMetadata.class }) + public ServiceBusTopicManager serviceBusTopicManager(AzureResourceMetadata azureResourceMetadata) { + return new ServiceBusTopicManager(azureResourceMetadata); } @Bean @ConditionalOnMissingBean - @ConditionalOnBean(ServiceBusTopicManager.class) - public ServiceBusTopicSubscriptionManager serviceBusTopicSubscriptionManager(AzureProperties azureProperties) { - return new ServiceBusTopicSubscriptionManager(azureProperties); + @ConditionalOnBean({ ServiceBusTopicManager.class, AzureResourceMetadata.class }) + public ServiceBusTopicSubscriptionManager serviceBusTopicSubscriptionManager(AzureResourceMetadata azureResourceMetadata) { + return new ServiceBusTopicSubscriptionManager(azureResourceMetadata); } @Bean @@ -74,13 +77,49 @@ public ServiceBusTopicClientFactory topicClientFactory( DefaultServiceBusTopicClientFactory clientFactory = new DefaultServiceBusTopicClientFactory(connectionString, properties.getTransportType()); clientFactory.setRetryOptions(properties.getRetryOptions()); clientFactory.setNamespace(properties.getNamespace()); - clientFactory.setServiceBusNamespaceManager(namespaceManager); - clientFactory.setServiceBusTopicManager(topicManager); - clientFactory.setServiceBusTopicSubscriptionManager(topicSubscriptionManager); + clientFactory.setServiceBusProvisioner(new ServiceBusTopicProvisioner(namespaceManager, topicManager, topicSubscriptionManager)); return clientFactory; } + static class ServiceBusTopicProvisioner implements ServiceBusProvisioner { + + private final ServiceBusNamespaceManager namespaceManager; + private final ServiceBusTopicManager topicManager; + private final ServiceBusTopicSubscriptionManager subscriptionManager; + + ServiceBusTopicProvisioner(ServiceBusNamespaceManager namespaceManager, + ServiceBusTopicManager topicManager, + ServiceBusTopicSubscriptionManager subscriptionManager) { + this.namespaceManager = namespaceManager; + this.topicManager = topicManager; + this.subscriptionManager = subscriptionManager; + } + + @Override + public void provisionNamespace(String namespace) { + this.namespaceManager.create(namespace); + } + + @Override + public void provisionQueue(String namespace, String queue) { + throw new UnsupportedOperationException("Can't provision queue in a topic client"); + } + + @Override + public void provisionTopic(String namespace, String topic) { + final ServiceBusNamespace serviceBusNamespace = namespaceManager.get(namespace); + this.topicManager.create(Tuple.of(serviceBusNamespace, topic)); + } + + @Override + public void provisionSubscription(String namespace, String topic, String subscription) { + final ServiceBusNamespace serviceBusNamespace = namespaceManager.get(namespace); + final Topic serviceBusTopic = topicManager.get(Tuple.of(serviceBusNamespace, topic)); + this.subscriptionManager.create(Tuple.of(serviceBusTopic, subscription)); + } + } + @Bean @ConditionalOnMissingBean public ServiceBusMessageConverter messageConverter() { diff --git a/sdk/spring/azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/factory/ServiceBusConnectionStringProvider.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/servicebus/ServiceBusConnectionStringProvider.java similarity index 97% rename from sdk/spring/azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/factory/ServiceBusConnectionStringProvider.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/servicebus/ServiceBusConnectionStringProvider.java index fc532a0fd0d5a..24adc7da0afb0 100644 --- a/sdk/spring/azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/factory/ServiceBusConnectionStringProvider.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/servicebus/ServiceBusConnectionStringProvider.java @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -package com.azure.spring.integration.servicebus.factory; +package com.azure.spring.cloud.autoconfigure.servicebus; //import com.azure.messaging.servicebus.ConnectionStringBuilder; import com.azure.resourcemanager.servicebus.models.AuthorizationKeys; diff --git a/sdk/spring/azure-spring-cloud-storage/src/main/java/com/azure/spring/cloud/autoconfigure/storage/AzureStorageProperties.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/storage/AzureStorageProperties.java similarity index 99% rename from sdk/spring/azure-spring-cloud-storage/src/main/java/com/azure/spring/cloud/autoconfigure/storage/AzureStorageProperties.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/storage/AzureStorageProperties.java index 1bfa8d45a01ad..c049a94ff5cb8 100644 --- a/sdk/spring/azure-spring-cloud-storage/src/main/java/com/azure/spring/cloud/autoconfigure/storage/AzureStorageProperties.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/storage/AzureStorageProperties.java @@ -22,7 +22,7 @@ public class AzureStorageProperties { private String account; private String accessKey; - + private String resourceGroup; public String getAccount() { @@ -44,7 +44,7 @@ public void setAccessKey(String accessKey) { public String getResourceGroup() { return resourceGroup; } - + public void setResourceGroup(String resourceGroup) { this.resourceGroup = resourceGroup; } diff --git a/sdk/spring/azure-spring-cloud-storage/src/main/java/com/azure/spring/cloud/autoconfigure/storage/AzureStorageQueueAutoConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/storage/AzureStorageQueueAutoConfiguration.java similarity index 84% rename from sdk/spring/azure-spring-cloud-storage/src/main/java/com/azure/spring/cloud/autoconfigure/storage/AzureStorageQueueAutoConfiguration.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/storage/AzureStorageQueueAutoConfiguration.java index 1035d8e987033..0d55aa91024ea 100644 --- a/sdk/spring/azure-spring-cloud-storage/src/main/java/com/azure/spring/cloud/autoconfigure/storage/AzureStorageQueueAutoConfiguration.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/storage/AzureStorageQueueAutoConfiguration.java @@ -5,10 +5,7 @@ import com.azure.core.management.AzureEnvironment; import com.azure.resourcemanager.storage.models.StorageAccount; -import com.azure.spring.cloud.autoconfigure.context.AzureContextAutoConfiguration; -import com.azure.spring.cloud.autoconfigure.context.AzureEnvironmentAutoConfiguration; -import com.azure.spring.cloud.context.core.api.EnvironmentProvider; -import com.azure.spring.cloud.context.core.impl.DefaultEnvironmentProvider; +import com.azure.spring.cloud.autoconfigure.context.AzureResourceManagerAutoConfiguration; import com.azure.spring.cloud.context.core.impl.StorageAccountManager; import com.azure.spring.cloud.context.core.storage.StorageConnectionStringProvider; import com.azure.spring.integration.storage.queue.StorageQueueOperation; @@ -32,7 +29,7 @@ * Auto-configuration class for Azure Storage Queue. */ @Configuration -@AutoConfigureAfter({ AzureContextAutoConfiguration.class, AzureEnvironmentAutoConfiguration.class }) +@AutoConfigureAfter({ AzureResourceManagerAutoConfiguration.class}) @ConditionalOnClass({ QueueServiceClient.class, StorageQueueClientFactory.class }) @ConditionalOnProperty(name = "spring.cloud.azure.storage.account") @EnableConfigurationProperties(AzureStorageProperties.class) @@ -42,14 +39,13 @@ public class AzureStorageQueueAutoConfiguration { @ConditionalOnMissingBean({ StorageQueueClientFactory.class, StorageAccountManager.class }) StorageQueueClientFactory storageQueueClientFactory( AzureStorageProperties storageProperties, - @Autowired(required = false) EnvironmentProvider environmentProvider) { + @Autowired(required = false) AzureEnvironment azureEnvironment1) { final String accountName = storageProperties.getAccount(); final String accessKey = storageProperties.getAccessKey(); - final AzureEnvironment azureEnvironment = Optional.ofNullable(environmentProvider) - .orElse(new DefaultEnvironmentProvider()) - .getEnvironment(); + final AzureEnvironment azureEnvironment = Optional.ofNullable(azureEnvironment1) + .orElse(AzureEnvironment.AZURE); final String connectionString = new StorageConnectionStringProvider(accountName, accessKey, azureEnvironment) diff --git a/sdk/spring/azure-spring-cloud-storage/src/main/java/com/azure/spring/cloud/autoconfigure/storage/package-info.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/storage/package-info.java similarity index 100% rename from sdk/spring/azure-spring-cloud-storage/src/main/java/com/azure/spring/cloud/autoconfigure/storage/package-info.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/storage/package-info.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/cloudfoundry/environment/Constants.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloudfoundry/environment/Constants.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/cloudfoundry/environment/Constants.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloudfoundry/environment/Constants.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/cloudfoundry/environment/VcapPojo.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloudfoundry/environment/VcapPojo.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/cloudfoundry/environment/VcapPojo.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloudfoundry/environment/VcapPojo.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/cloudfoundry/environment/VcapProcessor.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloudfoundry/environment/VcapProcessor.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/cloudfoundry/environment/VcapProcessor.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloudfoundry/environment/VcapProcessor.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/cloudfoundry/environment/VcapResult.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloudfoundry/environment/VcapResult.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/cloudfoundry/environment/VcapResult.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloudfoundry/environment/VcapResult.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/cloudfoundry/environment/VcapServiceConfig.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloudfoundry/environment/VcapServiceConfig.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/cloudfoundry/environment/VcapServiceConfig.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloudfoundry/environment/VcapServiceConfig.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/cloudfoundry/environment/VcapServiceType.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloudfoundry/environment/VcapServiceType.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/cloudfoundry/environment/VcapServiceType.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloudfoundry/environment/VcapServiceType.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/cloudfoundry/environment/package-info.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloudfoundry/environment/package-info.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/cloudfoundry/environment/package-info.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/cloudfoundry/environment/package-info.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessor.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessor.java similarity index 94% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessor.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessor.java index d25ac9a0a5055..3ff99b1b1ce89 100644 --- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessor.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessor.java @@ -3,8 +3,8 @@ package com.azure.spring.keyvault; +import com.azure.spring.autoconfigure.unity.PreLegacyPropertyEnvironmentPostProcessor; import org.springframework.boot.SpringApplication; -import org.springframework.boot.context.config.ConfigFileApplicationListener; import org.springframework.boot.env.EnvironmentPostProcessor; import org.springframework.core.Ordered; import org.springframework.core.env.ConfigurableEnvironment; @@ -14,7 +14,7 @@ * Leverage {@link EnvironmentPostProcessor} to add Key Vault secrets as a property source. */ public class KeyVaultEnvironmentPostProcessor implements EnvironmentPostProcessor, Ordered { - public static final int DEFAULT_ORDER = ConfigFileApplicationListener.DEFAULT_ORDER + 1; + public static final int DEFAULT_ORDER = PreLegacyPropertyEnvironmentPostProcessor.DEFAULT_ORDER + 1; private int order = DEFAULT_ORDER; /** diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessorHelper.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessorHelper.java similarity index 82% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessorHelper.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessorHelper.java index c8ff4435bb441..6e545b783b6f4 100644 --- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessorHelper.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessorHelper.java @@ -5,13 +5,14 @@ import com.azure.core.credential.TokenCredential; import com.azure.core.http.policy.HttpLogOptions; +import com.azure.identity.AzureAuthorityHosts; import com.azure.identity.ClientCertificateCredentialBuilder; import com.azure.identity.ClientSecretCredentialBuilder; import com.azure.identity.ManagedIdentityCredentialBuilder; -import com.azure.identity.implementation.IdentityClientOptions; import com.azure.security.keyvault.secrets.SecretClient; import com.azure.security.keyvault.secrets.SecretClientBuilder; import com.azure.security.keyvault.secrets.SecretServiceVersion; +import com.azure.spring.autoconfigure.unity.AzureProperties; import com.azure.spring.keyvault.KeyVaultProperties.Property; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -27,9 +28,9 @@ import java.util.List; import java.util.Optional; -import static com.azure.spring.utils.ApplicationId.AZURE_SPRING_KEY_VAULT; -import static com.azure.spring.utils.Constants.AZURE_KEYVAULT_PROPERTYSOURCE_NAME; -import static com.azure.spring.utils.Constants.DEFAULT_REFRESH_INTERVAL_MS; +import static com.azure.spring.core.ApplicationId.AZURE_SPRING_KEY_VAULT; +import static com.azure.spring.core.ApplicationId.VERSION; +import static com.azure.spring.keyvault.KeyVaultProperties.DELIMITER; import static org.springframework.core.env.StandardEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME; /** @@ -38,8 +39,9 @@ */ class KeyVaultEnvironmentPostProcessorHelper { + public static final String AZURE_KEYVAULT_PROPERTYSOURCE_NAME = "azurekv"; + public static final long DEFAULT_REFRESH_INTERVAL_MS = 1800000L; private static final Logger LOGGER = LoggerFactory.getLogger(KeyVaultEnvironmentPostProcessorHelper.class); - private static final String DEFAULT_AUTHORITY_HOST = new IdentityClientOptions().getAuthorityHost(); private final ConfigurableEnvironment environment; KeyVaultEnvironmentPostProcessorHelper(final ConfigurableEnvironment environment) { @@ -82,7 +84,7 @@ public void addKeyVaultPropertySource(String normalizedName) { .vaultUrl(vaultUri) .credential(tokenCredential) .serviceVersion(secretServiceVersion) - .httpLogOptions(new HttpLogOptions().setApplicationId(AZURE_SPRING_KEY_VAULT)) + .httpLogOptions(new HttpLogOptions().setApplicationId(AZURE_SPRING_KEY_VAULT + VERSION)) .buildClient(); try { final MutablePropertySources sources = this.environment.getPropertySources(); @@ -132,16 +134,18 @@ public TokenCredential getCredentials() { public TokenCredential getCredentials(String normalizedName) { //use service principle to authenticate final String clientId = getPropertyValue(normalizedName, Property.CLIENT_ID); - final String clientKey = getPropertyValue(normalizedName, Property.CLIENT_KEY); + final String clientSecret = Optional.ofNullable(getPropertyValue(normalizedName, Property.CLIENT_SECRET)) + .orElse(getPropertyValue(normalizedName, Property.CLIENT_KEY)); final String tenantId = getPropertyValue(normalizedName, Property.TENANT_ID); final String certificatePath = getPropertyValue(normalizedName, Property.CERTIFICATE_PATH); final String certificatePassword = getPropertyValue(normalizedName, Property.CERTIFICATE_PASSWORD); - final String authorityHost = getPropertyValue(normalizedName, Property.AUTHORITY_HOST, DEFAULT_AUTHORITY_HOST); - if (clientId != null && tenantId != null && clientKey != null) { + final String authorityHost = Optional.ofNullable(getPropertyValue(normalizedName, Property.AUTHORITY_HOST)) + .orElse(AzureAuthorityHosts.AZURE_PUBLIC_CLOUD); + if (clientId != null && tenantId != null && clientSecret != null) { LOGGER.debug("Will use custom credentials"); return new ClientSecretCredentialBuilder() .clientId(clientId) - .clientSecret(clientKey) + .clientSecret(clientSecret) .tenantId(tenantId) .authorityHost(authorityHost) .build(); @@ -174,13 +178,17 @@ public TokenCredential getCredentials(String normalizedName) { return new ManagedIdentityCredentialBuilder().build(); } - private String getPropertyValue(final String normalizedName, final Property property) { - return getPropertyValue(normalizedName, property, null); - } + String getPropertyValue(final String normalizedName, final Property property) { + List propertyNames = Arrays.asList(KeyVaultProperties.getPropertyName(normalizedName, property), + AzureProperties.PREFIX + DELIMITER + property.getName()); - private String getPropertyValue(final String normalizedName, final Property property, String defaultValue) { - return Optional.of(KeyVaultProperties.getPropertyName(normalizedName, property)) - .map(environment::getProperty) - .orElse(defaultValue); + String propertyValue = null; + for (String key : propertyNames) { + propertyValue = environment.getProperty(key); + if (null != propertyValue) { + break; + } + } + return propertyValue; } } diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultHealthConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/keyvault/KeyVaultHealthConfiguration.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultHealthConfiguration.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/keyvault/KeyVaultHealthConfiguration.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultHealthIndicator.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/keyvault/KeyVaultHealthIndicator.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultHealthIndicator.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/keyvault/KeyVaultHealthIndicator.java diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultOperation.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/keyvault/KeyVaultOperation.java similarity index 98% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultOperation.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/keyvault/KeyVaultOperation.java index d716f6d64f73d..71fbf93b57717 100644 --- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultOperation.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/keyvault/KeyVaultOperation.java @@ -10,7 +10,6 @@ import com.azure.security.keyvault.secrets.SecretClient; import com.azure.security.keyvault.secrets.models.KeyVaultSecret; import com.azure.security.keyvault.secrets.models.SecretProperties; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.lang.NonNull; @@ -30,7 +29,6 @@ /** * KeyVaultOperation wraps the operations to access Key Vault. */ -@SuppressFBWarnings("ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD") public class KeyVaultOperation { private static final Logger LOG = LoggerFactory.getLogger(KeyVaultOperation.class); diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultProperties.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/keyvault/KeyVaultProperties.java similarity index 69% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultProperties.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/keyvault/KeyVaultProperties.java index 9d396e278770b..133a6511d01fc 100644 --- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultProperties.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/keyvault/KeyVaultProperties.java @@ -3,62 +3,26 @@ package com.azure.spring.keyvault; -import com.azure.spring.utils.Constants; +import com.azure.spring.autoconfigure.unity.AzureProperties; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.DeprecatedConfigurationProperty; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; -import org.springframework.boot.context.properties.DeprecatedConfigurationProperty; /** * KeyVaultProperties */ @ConfigurationProperties(value = KeyVaultProperties.PREFIX) -public class KeyVaultProperties { - - public static final String PREFIX = "azure.keyvault"; - public static final String DELIMITER = "."; - - public String getClientId() { - return clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getClientKey() { - return clientKey; - } +public class KeyVaultProperties extends AzureProperties { - public void setClientKey(String clientKey) { - this.clientKey = clientKey; - } + private static final Logger LOGGER = LoggerFactory.getLogger(KeyVaultProperties.class); - public String getTenantId() { - return tenantId; - } - - public void setTenantId(String tenantId) { - this.tenantId = tenantId; - } - - public String getCertificatePath() { - return certificatePath; - } - - public void setCertificatePath(String certificatePath) { - this.certificatePath = certificatePath; - } - - public String getCertificatePassword() { - return certificatePassword; - } - - public void setCertificatePassword(String certificatePassword) { - this.certificatePassword = certificatePassword; - } + public static final String PREFIX = "spring.cloud.azure.keyvault"; + public static final String DELIMITER = "."; public Boolean getEnabled() { return enabled; @@ -121,40 +85,38 @@ public void setAllowTelemetry(String allowTelemetry) { private Boolean enabled; private List secretKeys; - private Long refreshInterval = Constants.DEFAULT_REFRESH_INTERVAL_MS; + private Long refreshInterval = KeyVaultEnvironmentPostProcessorHelper.DEFAULT_REFRESH_INTERVAL_MS; private String allowTelemetry; /** * Defines the constant for the property that enables/disables case sensitive keys. */ private String caseSensitiveKeys; - private String certificatePassword; - private String certificatePath; - private String clientId; - private String clientKey; + /** * The constant used to define the order of the key vaults you are * delivering (comma delimited, e.g 'my-vault, my-vault-2'). */ private String order; - private String tenantId; + private String uri; /** * enum Property */ public enum Property { - CASE_SENSITIVE_KEYS("case-sensitive-keys"), - CERTIFICATE_PASSWORD("certificate-password"), - AUTHORITY_HOST("authority-host"), + AUTHORITY_HOST("environment.authority-host"), + CLIENT_ID("credential.client-id"), + CLIENT_SECRET("credential.client-secret"), + CERTIFICATE_PATH("credential.client-certificate-path"), + CERTIFICATE_PASSWORD("credential.client-certificate-password"), + TENANT_ID("credential.tenant-id"), SECRET_SERVICE_VERSION("secret-service-version"), - CERTIFICATE_PATH("certificate-path"), - CLIENT_ID("client-id"), + CASE_SENSITIVE_KEYS("case-sensitive-keys"), CLIENT_KEY("client-key"), ENABLED("enabled"), ORDER("order"), REFRESH_INTERVAL("refresh-interval"), SECRET_KEYS("secret-keys"), - TENANT_ID("tenant-id"), URI("uri"); private final String name; diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultPropertySource.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/keyvault/KeyVaultPropertySource.java similarity index 90% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultPropertySource.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/keyvault/KeyVaultPropertySource.java index 4d59acdb3d7ed..a90fd5344d061 100644 --- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/KeyVaultPropertySource.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/keyvault/KeyVaultPropertySource.java @@ -5,7 +5,7 @@ import org.springframework.core.env.EnumerablePropertySource; -import static com.azure.spring.utils.Constants.AZURE_KEYVAULT_PROPERTYSOURCE_NAME; +import static com.azure.spring.keyvault.KeyVaultEnvironmentPostProcessorHelper.AZURE_KEYVAULT_PROPERTYSOURCE_NAME; /** * A key vault implementation of {@link EnumerablePropertySource} to enumerate all property pairs in Key Vault. diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/keyvault/PostLegacyPropertyEnvironmentPostProcessor.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/keyvault/PostLegacyPropertyEnvironmentPostProcessor.java new file mode 100644 index 0000000000000..8980d96adb01d --- /dev/null +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/keyvault/PostLegacyPropertyEnvironmentPostProcessor.java @@ -0,0 +1,110 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.spring.keyvault; + +import com.azure.spring.autoconfigure.unity.AbstractLegacyPropertyEnvironmentPostProcessor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.env.ConfigurableEnvironment; +import org.springframework.core.env.MutablePropertySources; +import org.springframework.core.env.PropertiesPropertySource; +import org.springframework.util.CollectionUtils; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.stream.Collectors; + +import static org.springframework.core.env.StandardEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME; + +/** + * Convert legacy properties in Key Vault property sources to the current and set into environment after + * {@link KeyVaultEnvironmentPostProcessor}. + * + * Due to that properties in Key Vault has higher precedence than those in local, thus when comparing whether legacy + * properties in Key Vault should be converted, they only need to be compared those in Key Vault. + * + * The converted current properties should have higher precedence than those in local, so the precedence is set + * to be lower only than system properties, which is refered to the behavior of Key Vault property sources. + */ +public class PostLegacyPropertyEnvironmentPostProcessor extends AbstractLegacyPropertyEnvironmentPostProcessor { + + public static final int DEFAULT_ORDER = KeyVaultEnvironmentPostProcessor.DEFAULT_ORDER + 1; + private static final Logger LOGGER = LoggerFactory.getLogger(PostLegacyPropertyEnvironmentPostProcessor.class); + + @Override + public int getOrder() { + return DEFAULT_ORDER; + } + + /** + * When only legacy properties are detected from each key vault property source, convert legacy properties to + * the current, and create a new {@link Properties} to store the converted current properties of each key vault + * property source. + * + * @param environment The application environment to load property from. + * @param legacyToCurrentMap A {@link Properties} contains a map of all legacy properties and associated current properties. + * @return A {@link Properties} to store mapped current properties + */ + @Override + protected Properties convertLegacyToCurrent(ConfigurableEnvironment environment, Properties legacyToCurrentMap) { + Properties convertedProperties = new Properties(); + List kvSourceList = environment.getPropertySources() + .stream() + .filter(KeyVaultPropertySource.class::isInstance) + .map(KeyVaultPropertySource.class::cast) + .collect(Collectors.toList()); + // Reverse traversal to keep the Key Vault property source of higher precedence could override the lower ones. + Collections.reverse(kvSourceList); + kvSourceList.forEach(source -> convertLegacyToCurrentInKvSource(source, legacyToCurrentMap, convertedProperties)); + return convertedProperties; + } + + private void convertLegacyToCurrentInKvSource(KeyVaultPropertySource kvName, Properties legacyToCurrentMap, + Properties convertedProperties) { + for (Map.Entry entry : legacyToCurrentMap.entrySet()) { + String legacyPropertyName = (String) entry.getKey(); + Object legacyPropertyValue = kvName.getProperty(legacyPropertyName); + if (legacyPropertyValue == null) { + continue; + } + String currentPropertyName = (String) entry.getValue(); + Object currentPropertyValue = kvName.getProperty(currentPropertyName); + if (currentPropertyValue == null) { + convertedProperties.put(currentPropertyName, legacyPropertyValue); + LOGGER.warn(toLogString(legacyPropertyName, currentPropertyName, kvName.getName())); + } + } + } + /** + * Add the mapped current properties to application environment, of which the precedence should be higher than that + * of all of local Key Vault property sources to keep properties in multiple Key Vault sources in order. + * + * @param environment The application environment to load property from. + * @param properties The converted current properties to be configured. + */ + @Override + protected void setConvertedPropertyToEnvironment(ConfigurableEnvironment environment, Properties properties) { + // This post-processor is called multiple times but sets the properties only once. + if (!CollectionUtils.isEmpty(properties)) { + PropertiesPropertySource convertedPropertySource = + new PropertiesPropertySource(PostLegacyPropertyEnvironmentPostProcessor.class.getName(), properties); + final MutablePropertySources sources = environment.getPropertySources(); + if (sources.contains(SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME)) { + sources.addAfter( + SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME, + convertedPropertySource + ); + } else { + sources.addFirst(convertedPropertySource); + } + } + } + + public static String toLogString(String legacyPropertyName, String currentPropertyName, String propertySource) { + return String.format("Deprecated property %s detected in Key Vault property source %s! Use %s instead!", + legacyPropertyName, propertySource, currentPropertyName); + } +} diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/package-info.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/keyvault/package-info.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/keyvault/package-info.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/keyvault/package-info.java diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/utils/PropertyLoader.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/utils/PropertyLoader.java new file mode 100644 index 0000000000000..e9187b7d40cf9 --- /dev/null +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/utils/PropertyLoader.java @@ -0,0 +1,31 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.spring.utils; + +import org.springframework.core.io.support.PropertiesLoaderUtils; + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.util.Properties; + +/** + * Util class to load property files. + */ +public class PropertyLoader { + + /** + * To load a {@link Properties} Object from the properties file under classpath + * + * @param file The source file to load properties from. + * @throws UncheckedIOException If an I/O error occurs. + * @return The {@link Properties} Object. + */ + public static Properties loadPropertiesFromClassPath(String file) { + try { + return PropertiesLoaderUtils.loadAllProperties(file); + } catch (IOException exception) { + throw new UncheckedIOException("Fail to load " + file, exception); + } + } +} diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/package-info.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/utils/package-info.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/package-info.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/java/com/azure/spring/utils/package-info.java diff --git a/sdk/spring/azure-spring-boot/src/main/resources/META-INF/project.properties b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/resources/META-INF/project.properties similarity index 100% rename from sdk/spring/azure-spring-boot/src/main/resources/META-INF/project.properties rename to sdk/spring/azure-spring-cloud-autoconfigure/src/main/resources/META-INF/project.properties diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/resources/META-INF/spring.factories b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/resources/META-INF/spring.factories index 4fe966fbe5bf5..3bcab56ff0384 100644 --- a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/resources/META-INF/spring.factories +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/resources/META-INF/spring.factories @@ -1,10 +1,38 @@ +#org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +#com.azure.spring.cloud.autoconfigure.cache.AzureRedisAutoConfiguration,\ +#com.azure.spring.cloud.autoconfigure.eventhub.AzureEventHubKafkaAutoConfiguration,\ +#com.azure.spring.cloud.autoconfigure.eventhub.AzureEventHubAutoConfiguration,\ +#com.azure.spring.cloud.autoconfigure.servicebus.AzureServiceBusAutoConfiguration,\ +#com.azure.spring.cloud.autoconfigure.servicebus.AzureServiceBusQueueAutoConfiguration,\ +#com.azure.spring.cloud.autoconfigure.servicebus.AzureServiceBusTopicAutoConfiguration +# +#org.springframework.boot.env.EnvironmentPostProcessor=\ +#com.azure.spring.cloud.autoconfigure.cloudfoundry.AzureCloudFoundryEnvironmentPostProcessor + +org.springframework.boot.env.EnvironmentPostProcessor=com.azure.spring.cloudfoundry.environment.VcapProcessor,\ +com.azure.spring.cloud.autoconfigure.cloudfoundry.AzureCloudFoundryEnvironmentPostProcessor,\ +com.azure.spring.autoconfigure.unity.PreLegacyPropertyEnvironmentPostProcessor + org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +com.azure.spring.autoconfigure.aad.AADAutoConfiguration,\ +com.azure.spring.autoconfigure.aad.AADAuthenticationFilterAutoConfiguration,\ +com.azure.spring.autoconfigure.b2c.AADB2CAutoConfiguration,\ +com.azure.spring.autoconfigure.b2c.AADB2CResourceServerAutoConfiguration,\ +com.azure.spring.autoconfigure.cosmos.CosmosAutoConfiguration,\ +com.azure.spring.autoconfigure.cosmos.CosmosHealthConfiguration,\ +com.azure.spring.autoconfigure.cosmos.CosmosReactiveRepositoriesAutoConfiguration,\ +com.azure.spring.autoconfigure.cosmos.CosmosRepositoriesAutoConfiguration,\ +com.azure.spring.autoconfigure.jms.NonPremiumServiceBusJMSAutoConfiguration,\ +com.azure.spring.autoconfigure.jms.PremiumServiceBusJMSAutoConfiguration,\ +com.azure.spring.autoconfigure.storage.StorageAutoConfiguration,\ +com.azure.spring.autoconfigure.storage.StorageHealthConfiguration,\ +com.azure.spring.keyvault.KeyVaultHealthConfiguration,\ +com.azure.spring.autoconfigure.unity.AzurePropertyAutoConfiguration,\ +com.azure.spring.cloud.autoconfigure.context.AzureResourceManagerAutoConfiguration,\ com.azure.spring.cloud.autoconfigure.cache.AzureRedisAutoConfiguration,\ com.azure.spring.cloud.autoconfigure.eventhub.AzureEventHubKafkaAutoConfiguration,\ com.azure.spring.cloud.autoconfigure.eventhub.AzureEventHubAutoConfiguration,\ com.azure.spring.cloud.autoconfigure.servicebus.AzureServiceBusAutoConfiguration,\ com.azure.spring.cloud.autoconfigure.servicebus.AzureServiceBusQueueAutoConfiguration,\ -com.azure.spring.cloud.autoconfigure.servicebus.AzureServiceBusTopicAutoConfiguration - -org.springframework.boot.env.EnvironmentPostProcessor=\ -com.azure.spring.cloud.autoconfigure.cloudfoundry.AzureCloudFoundryEnvironmentPostProcessor +com.azure.spring.cloud.autoconfigure.servicebus.AzureServiceBusTopicAutoConfiguration,\ +com.azure.spring.cloud.autoconfigure.storage.AzureStorageQueueAutoConfiguration diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/resources/legacy-keyvault-property-suffix-mapping.properties b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/resources/legacy-keyvault-property-suffix-mapping.properties new file mode 100644 index 0000000000000..ed758023f5584 --- /dev/null +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/resources/legacy-keyvault-property-suffix-mapping.properties @@ -0,0 +1,12 @@ +authority-host=environment.authority-host +client-id=credential.client-id +client-key=credential.client-secret +certificate-path=credential.client-certificate-path +certificate-password=credential.client-certificate-password +tenant-id=credential.tenant-id +secret-service-version=secret-service-version +case-sensitive-keys=case-sensitive-keys +enabled=enabled +refresh-interval=refresh-interval +secret-keys=secret-keys +uri=uri diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/main/resources/legacy-property-mapping.properties b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/resources/legacy-property-mapping.properties new file mode 100644 index 0000000000000..b8b60fdfa5ad0 --- /dev/null +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/main/resources/legacy-property-mapping.properties @@ -0,0 +1,24 @@ +azure.cosmos.uri=spring.cloud.azure.cosmos.uri +azure.cosmos.key=spring.cloud.azure.cosmos.key +azure.cosmos.consistency-level=spring.cloud.azure.cosmos.consistency-level +azure.cosmos.database=spring.cloud.azure.cosmos.database +azure.cosmos.populate-query-metrics=spring.cloud.azure.cosmos.populate-query-metrics +azure.cosmos.allow-telemetry=spring.cloud.azure.cosmos.allow-telemetry +azure.cosmos.connection-mode=spring.cloud.azure.cosmos.connection-mode +azure.cosmos.response-diagnostics-processor=spring.cloud.azure.cosmos.response-diagnostics-processor +azure.storage.account-name=spring.cloud.azure.storage.account-name +azure.storage.account-key=spring.cloud.azure.storage.account-key +azure.storage.blob-endpoint=spring.cloud.azure.storage.blob-endpoint +azure.storage.file-endpoint=spring.cloud.azure.storage.file-endpoint +azure.keyvault.client-id=spring.cloud.azure.keyvault.credential.client-id +azure.keyvault.client-key=spring.cloud.azure.keyvault.credential.client-secret +azure.keyvault.tenant-id=spring.cloud.azure.keyvault.credential.tenant-id +azure.keyvault.certificate-path=spring.cloud.azure.keyvault.credential.client-certificate-path +azure.keyvault.certificate-password=spring.cloud.azure.keyvault.credential.client-certificate-password +azure.keyvault.order=spring.cloud.azure.keyvault.order +azure.keyvault.uri=spring.cloud.azure.keyvault.uri +azure.keyvault.enabled=spring.cloud.azure.keyvault.enabled +azure.keyvault.secret-keys=spring.cloud.azure.keyvault.secret-keys +azure.keyvault.refresh-interval=spring.cloud.azure.keyvault.refresh-interval +azure.keyvault.allow-telemetry=spring.cloud.azure.keyvault.allow-telemetry +azure.keyvault.case-sensitive-keys=spring.cloud.azure.keyvault.case-sensitive-keys diff --git a/sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/aad/AADWebApplicationAndResourceServerConfig.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/aad/AADWebApplicationAndResourceServerConfig.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/aad/AADWebApplicationAndResourceServerConfig.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/aad/AADWebApplicationAndResourceServerConfig.java diff --git a/sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/aad/JsonMapper.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/aad/JsonMapper.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/aad/JsonMapper.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/aad/JsonMapper.java diff --git a/sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/aad/webapi/AADOAuth2ResourceServerSecurityConfig.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/aad/webapi/AADOAuth2ResourceServerSecurityConfig.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/aad/webapi/AADOAuth2ResourceServerSecurityConfig.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/aad/webapi/AADOAuth2ResourceServerSecurityConfig.java diff --git a/sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/aad/webapi/HomeController.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/aad/webapi/HomeController.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/aad/webapi/HomeController.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/aad/webapi/HomeController.java diff --git a/sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/aad/webapi/SampleController.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/aad/webapi/SampleController.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/aad/webapi/SampleController.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/aad/webapi/SampleController.java diff --git a/sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/aad/webapp/AADOAuth2LoginSecurityConfig.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/aad/webapp/AADOAuth2LoginSecurityConfig.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/aad/webapp/AADOAuth2LoginSecurityConfig.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/aad/webapp/AADOAuth2LoginSecurityConfig.java diff --git a/sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/aad/webapp/AuthorityController.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/aad/webapp/AuthorityController.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/aad/webapp/AuthorityController.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/aad/webapp/AuthorityController.java diff --git a/sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/aad/webapp/ClientController.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/aad/webapp/ClientController.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/aad/webapp/ClientController.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/aad/webapp/ClientController.java diff --git a/sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/aad/webapp/OnDemandClientController.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/aad/webapp/OnDemandClientController.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/aad/webapp/OnDemandClientController.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/aad/webapp/OnDemandClientController.java diff --git a/sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/aad/webapp/RoleController.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/aad/webapp/RoleController.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/aad/webapp/RoleController.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/aad/webapp/RoleController.java diff --git a/sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/aad/webapp/WebApiController.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/aad/webapp/WebApiController.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/aad/webapp/WebApiController.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/aad/webapp/WebApiController.java diff --git a/sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/autoconfigure/b2c/ResourceServerConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/autoconfigure/b2c/ResourceServerConfiguration.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/autoconfigure/b2c/ResourceServerConfiguration.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/autoconfigure/b2c/ResourceServerConfiguration.java diff --git a/sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/autoconfigure/b2c/ResourceServerController.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/autoconfigure/b2c/ResourceServerController.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/autoconfigure/b2c/ResourceServerController.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/autoconfigure/b2c/ResourceServerController.java diff --git a/sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/autoconfigure/b2c/WebappAccessResourceConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/autoconfigure/b2c/WebappAccessResourceConfiguration.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/autoconfigure/b2c/WebappAccessResourceConfiguration.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/autoconfigure/b2c/WebappAccessResourceConfiguration.java diff --git a/sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/autoconfigure/b2c/WebappAccessResourceController.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/autoconfigure/b2c/WebappAccessResourceController.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/autoconfigure/b2c/WebappAccessResourceController.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/autoconfigure/b2c/WebappAccessResourceController.java diff --git a/sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/cosmos/CosmosSampleApplication.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/cosmos/CosmosSampleApplication.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/cosmos/CosmosSampleApplication.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/cosmos/CosmosSampleApplication.java diff --git a/sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/cosmos/User.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/cosmos/User.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/cosmos/User.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/cosmos/User.java diff --git a/sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/cosmos/UserRepository.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/cosmos/UserRepository.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/cosmos/UserRepository.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/cosmos/UserRepository.java diff --git a/sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/jms/CustomMessageConverter.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/jms/CustomMessageConverter.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/jms/CustomMessageConverter.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/jms/CustomMessageConverter.java diff --git a/sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/jms/QueueReceiveController.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/jms/QueueReceiveController.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/jms/QueueReceiveController.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/jms/QueueReceiveController.java diff --git a/sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/jms/SendController.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/jms/SendController.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/jms/SendController.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/jms/SendController.java diff --git a/sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/jms/TopicReceiveController.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/jms/TopicReceiveController.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/jms/TopicReceiveController.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/jms/TopicReceiveController.java diff --git a/sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/jms/User.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/jms/User.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/jms/User.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/jms/User.java diff --git a/sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/keyvault/KeyVaultSample.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/keyvault/KeyVaultSample.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/samples/java/com/azure/spring/keyvault/KeyVaultSample.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/samples/java/com/azure/spring/keyvault/KeyVaultSample.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/aad/AADApplicationTypeTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/aad/AADApplicationTypeTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/aad/AADApplicationTypeTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/aad/AADApplicationTypeTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/aad/AADClientRegistrationRepositoryTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/aad/AADClientRegistrationRepositoryTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/aad/AADClientRegistrationRepositoryTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/aad/AADClientRegistrationRepositoryTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/aad/AADOAuth2ClientConfigurationTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/aad/AADOAuth2ClientConfigurationTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/aad/AADOAuth2ClientConfigurationTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/aad/AADOAuth2ClientConfigurationTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/aad/implementation/jackson/SerializerUtilsTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/aad/implementation/jackson/SerializerUtilsTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/aad/implementation/jackson/SerializerUtilsTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/aad/implementation/jackson/SerializerUtilsTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/aad/webapi/AADJwtBearerTokenAuthenticationConverterTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/aad/webapi/AADJwtBearerTokenAuthenticationConverterTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/aad/webapi/AADJwtBearerTokenAuthenticationConverterTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/aad/webapi/AADJwtBearerTokenAuthenticationConverterTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/aad/webapi/AADResourceServerConfigurationTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/aad/webapi/AADResourceServerConfigurationTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/aad/webapi/AADResourceServerConfigurationTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/aad/webapi/AADResourceServerConfigurationTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/aad/webapi/AADResourceServerPropertiesTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/aad/webapi/AADResourceServerPropertiesTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/aad/webapi/AADResourceServerPropertiesTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/aad/webapi/AADResourceServerPropertiesTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/aad/webapi/validator/AADJwtAudienceValidatorTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/aad/webapi/validator/AADJwtAudienceValidatorTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/aad/webapi/validator/AADJwtAudienceValidatorTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/aad/webapi/validator/AADJwtAudienceValidatorTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/aad/webapi/validator/AADJwtIssuerValidatorTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/aad/webapi/validator/AADJwtIssuerValidatorTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/aad/webapi/validator/AADJwtIssuerValidatorTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/aad/webapi/validator/AADJwtIssuerValidatorTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/aad/webapp/AADAccessTokenGroupRolesExtractionTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/aad/webapp/AADAccessTokenGroupRolesExtractionTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/aad/webapp/AADAccessTokenGroupRolesExtractionTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/aad/webapp/AADAccessTokenGroupRolesExtractionTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/aad/webapp/AADAzureDelegatedOAuth2AuthorizedClientProviderTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/aad/webapp/AADAzureDelegatedOAuth2AuthorizedClientProviderTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/aad/webapp/AADAzureDelegatedOAuth2AuthorizedClientProviderTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/aad/webapp/AADAzureDelegatedOAuth2AuthorizedClientProviderTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/aad/webapp/AADIdTokenRolesExtractionTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/aad/webapp/AADIdTokenRolesExtractionTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/aad/webapp/AADIdTokenRolesExtractionTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/aad/webapp/AADIdTokenRolesExtractionTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/aad/webapp/AADOAuth2AuthorizationCodeGrantRequestEntityConverterTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/aad/webapp/AADOAuth2AuthorizationCodeGrantRequestEntityConverterTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/aad/webapp/AADOAuth2AuthorizationCodeGrantRequestEntityConverterTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/aad/webapp/AADOAuth2AuthorizationCodeGrantRequestEntityConverterTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/aad/webapp/WebApplicationContextRunnerUtils.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/aad/webapp/WebApplicationContextRunnerUtils.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/aad/webapp/WebApplicationContextRunnerUtils.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/aad/webapp/WebApplicationContextRunnerUtils.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/AADAppRoleAuthenticationFilterTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/aad/AADAppRoleAuthenticationFilterTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/AADAppRoleAuthenticationFilterTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/aad/AADAppRoleAuthenticationFilterTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilterPropertiesTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilterPropertiesTest.java similarity index 68% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilterPropertiesTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilterPropertiesTest.java index e412429d2d8ea..7b89407b2f230 100644 --- a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilterPropertiesTest.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilterPropertiesTest.java @@ -3,6 +3,8 @@ package com.azure.spring.autoconfigure.aad; +import com.azure.identity.AzureAuthorityHosts; +import com.azure.spring.autoconfigure.unity.AzureProperties; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; @@ -42,6 +44,51 @@ public void canSetProperties() { } } + @Test + @Disabled + public void loadPropertiesFromCredentialProperties() { + + AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); + addInlinedPropertiesToEnvironment( + context, + AzureProperties.PREFIX + ".tenant-id=azure-tenant-id", + AzureProperties.PREFIX + ".client-id=azure-client-id", + AzureProperties.PREFIX + ".authority-host=azure-authority-host", + AzureProperties.PREFIX + ".environment=AzureGermany", + AAD_PROPERTY_PREFIX + "client-id=" + TestConstants.CLIENT_ID, + AAD_PROPERTY_PREFIX + "client-secret=" + TestConstants.CLIENT_SECRET + ); + context.register(Config.class); + context.refresh(); + + final AADAuthenticationProperties properties = context.getBean(AADAuthenticationProperties.class); + + assertThat(properties.getTenantId()).isEqualTo("azure-tenant-id"); + assertThat(properties.getClientId()).isEqualTo(TestConstants.CLIENT_ID); + assertThat(properties.getClientSecret()).isEqualTo(TestConstants.CLIENT_SECRET); + assertThat(properties.getBaseUri()).isEqualTo("azure-authority-host/"); + + } + + @Test + @Disabled + public void testGetBaseUriFromEnvironment() { + AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); + addInlinedPropertiesToEnvironment( + context, + AzureProperties.PREFIX + ".environment=AzureGermany", + AAD_PROPERTY_PREFIX + "tenant-id=azure-tenant-id", + AAD_PROPERTY_PREFIX + "client-id=" + TestConstants.CLIENT_ID, + AAD_PROPERTY_PREFIX + "client-secret=" + TestConstants.CLIENT_SECRET + ); + context.register(Config.class); + context.refresh(); + + final AADAuthenticationProperties properties = context.getBean(AADAuthenticationProperties.class); + + assertThat(properties.getBaseUri()).isEqualTo(AzureAuthorityHosts.AZURE_GERMANY); + } + private void configureAllRequiredProperties(AnnotationConfigApplicationContext context) { addInlinedPropertiesToEnvironment( context, diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilterTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilterTest.java similarity index 83% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilterTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilterTest.java index 65e2b0254c789..bac88ff2d76e2 100644 --- a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilterTest.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/aad/AADAuthenticationFilterTest.java @@ -9,11 +9,13 @@ import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; -import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import org.springframework.boot.test.context.FilteredClassLoader; +import org.springframework.boot.test.context.runner.WebApplicationContextRunner; import org.springframework.security.core.Authentication; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.oauth2.server.resource.BearerTokenAuthenticationToken; import javax.servlet.FilterChain; import javax.servlet.ServletException; @@ -33,7 +35,8 @@ public class AADAuthenticationFilterTest { private static final String TOKEN = "dummy-token"; - private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() + private final WebApplicationContextRunner contextRunner = new WebApplicationContextRunner() + .withClassLoader(new FilteredClassLoader(BearerTokenAuthenticationToken.class)) .withConfiguration(AutoConfigurations.of(AADAuthenticationFilterAutoConfiguration.class)); private final UserPrincipalManager userPrincipalManager; private final HttpServletRequest request; @@ -130,4 +133,21 @@ public void testAlreadyAuthenticated() throws ServletException, IOException, Par verify(userPrincipalManager, times(0)).buildUserPrincipal(TOKEN); } + @Test + @Disabled + public void testAADAuthenticationFilterAutoConfiguration() { + + this.contextRunner.withPropertyValues( + "azure.activedirectory.client-id=", "spring.cloud.azure.client-id=" + ).run(context -> assertThat(context).doesNotHaveBean(AADAuthenticationFilterAutoConfiguration.class)); + + this.contextRunner.withPropertyValues( + "azure.activedirectory.client-id=" + TestConstants.CLIENT_ID + ).run(context -> assertThat(context).hasSingleBean(AADAuthenticationFilterAutoConfiguration.class)); + + this.contextRunner.withPropertyValues( + "spring.cloud.azure.client-id=" + TestConstants.CLIENT_ID + ).run(context -> assertThat(context).hasSingleBean(AADAuthenticationFilterAutoConfiguration.class)); + + } } diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/AADAuthenticationPropertiesTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/aad/AADAuthenticationPropertiesTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/AADAuthenticationPropertiesTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/aad/AADAuthenticationPropertiesTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/AzureADGraphClientTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/aad/AzureADGraphClientTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/AzureADGraphClientTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/aad/AzureADGraphClientTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/MembershipTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/aad/MembershipTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/MembershipTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/aad/MembershipTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/MicrosoftGraphConstants.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/aad/MicrosoftGraphConstants.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/MicrosoftGraphConstants.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/aad/MicrosoftGraphConstants.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/ResourceRetrieverTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/aad/ResourceRetrieverTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/ResourceRetrieverTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/aad/ResourceRetrieverTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/TestConstants.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/aad/TestConstants.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/TestConstants.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/aad/TestConstants.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/UserPrincipalAzureADGraphTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/aad/UserPrincipalAzureADGraphTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/UserPrincipalAzureADGraphTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/aad/UserPrincipalAzureADGraphTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/UserPrincipalManagerAudienceTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/aad/UserPrincipalManagerAudienceTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/UserPrincipalManagerAudienceTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/aad/UserPrincipalManagerAudienceTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/UserPrincipalManagerTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/aad/UserPrincipalManagerTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/UserPrincipalManagerTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/aad/UserPrincipalManagerTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/UserPrincipalMicrosoftGraphTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/aad/UserPrincipalMicrosoftGraphTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/UserPrincipalMicrosoftGraphTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/aad/UserPrincipalMicrosoftGraphTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CAuthorizationRequestResolverTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CAuthorizationRequestResolverTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CAuthorizationRequestResolverTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CAuthorizationRequestResolverTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CAutoConfigurationTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CAutoConfigurationTest.java similarity index 75% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CAutoConfigurationTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CAutoConfigurationTest.java index 0bf7872303e43..d193f2598f310 100644 --- a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CAutoConfigurationTest.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CAutoConfigurationTest.java @@ -2,7 +2,9 @@ // Licensed under the MIT License. package com.azure.spring.autoconfigure.b2c; +import com.azure.spring.autoconfigure.unity.CredentialProperties; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.mockito.MockedStatic; import org.mockito.Mockito; @@ -62,6 +64,24 @@ public void testAutoConfigurationBean() { }); } + @Test + @Disabled + public void testAutoConfigurationBeanWithCredentialProperties() { + new WebApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(WebOAuth2ClientApp.class, AADB2CAutoConfiguration.class)) + .withClassLoader(new FilteredClassLoader(BearerTokenAuthenticationToken.class)) + .withPropertyValues("spring.cloud.azure.client-id=fake-client-id", + String.format("%s=%s", AADB2CConstants.CLIENT_SECRET, AADB2CConstants.TEST_CLIENT_SECRET), + String.format("%s.%s=%s", AADB2CConstants.USER_FLOWS, + AADB2CConstants.TEST_KEY_SIGN_UP_OR_IN, AADB2CConstants.TEST_SIGN_UP_OR_IN_NAME), + String.format("%s=%s", AADB2CConstants.BASE_URI, AADB2CConstants.TEST_BASE_URI) + ).run(c -> { + final AADB2CAutoConfiguration autoConfig = c.getBean(AADB2CAutoConfiguration.class); + + Assertions.assertNotNull(autoConfig); + }); + } + @Test public void testPropertiesBean() { getDefaultContextRunner().run(c -> { @@ -87,6 +107,31 @@ public void testPropertiesBean() { }); } + @Test + @Disabled + public void testCredentialPropertiesBean() { + new WebApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(WebOAuth2ClientApp.class, AADB2CAutoConfiguration.class)) + .withClassLoader(new FilteredClassLoader(BearerTokenAuthenticationToken.class)) + .withPropertyValues("spring.cloud.azure.tenant-id=fake-tenant-id", + "spring.cloud.azure.client-id=fake-client-id", + String.format("%s.%s=%s", AADB2CConstants.USER_FLOWS, + AADB2CConstants.TEST_KEY_SIGN_UP_OR_IN, AADB2CConstants.TEST_SIGN_UP_OR_IN_NAME), + String.format("%s=%s", AADB2CConstants.CLIENT_ID, AADB2CConstants.TEST_CLIENT_ID), + String.format("%s=%s", AADB2CConstants.CLIENT_SECRET, AADB2CConstants.TEST_CLIENT_SECRET), + String.format("%s=%s", AADB2CConstants.BASE_URI, AADB2CConstants.TEST_BASE_URI) + ).run(c -> { + final AADB2CProperties properties = c.getBean(AADB2CProperties.class); + final CredentialProperties credentialProperties = c.getBean(CredentialProperties.class); + + Assertions.assertNotNull(properties); + Assertions.assertNotNull(credentialProperties); + Assertions.assertEquals(properties.getClientId(), AADB2CConstants.TEST_CLIENT_ID); + Assertions.assertEquals(properties.getClientSecret(), AADB2CConstants.TEST_CLIENT_SECRET); + Assertions.assertEquals(properties.getTenantId(), "fake-tenant-id"); + }); + } + @Test public void testAADB2CAuthorizationRequestResolverBean() { getDefaultContextRunner().run(c -> { diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CConstants.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CConstants.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CConstants.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CConstants.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CLogoutSuccessHandlerTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CLogoutSuccessHandlerTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CLogoutSuccessHandlerTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CLogoutSuccessHandlerTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CResourceServerAutoConfigurationTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CResourceServerAutoConfigurationTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CResourceServerAutoConfigurationTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CResourceServerAutoConfigurationTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CURLTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CURLTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CURLTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CURLTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CUserPrincipalTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CUserPrincipalTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CUserPrincipalTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/b2c/AADB2CUserPrincipalTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/b2c/AbstractAADB2COAuth2ClientTestConfiguration.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/b2c/AbstractAADB2COAuth2ClientTestConfiguration.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/b2c/AbstractAADB2COAuth2ClientTestConfiguration.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/b2c/AbstractAADB2COAuth2ClientTestConfiguration.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/condition/aad/AbstractCondition.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/condition/aad/AbstractCondition.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/condition/aad/AbstractCondition.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/condition/aad/AbstractCondition.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/condition/aad/ClientRegistrationConditionTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/condition/aad/ClientRegistrationConditionTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/condition/aad/ClientRegistrationConditionTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/condition/aad/ClientRegistrationConditionTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/condition/aad/ResourceServerConditionTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/condition/aad/ResourceServerConditionTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/condition/aad/ResourceServerConditionTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/condition/aad/ResourceServerConditionTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/condition/aad/WebApplicationConditionTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/condition/aad/WebApplicationConditionTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/condition/aad/WebApplicationConditionTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/condition/aad/WebApplicationConditionTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/cosmos/CosmosAutoConfigurationTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/cosmos/CosmosAutoConfigurationTest.java similarity index 70% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/cosmos/CosmosAutoConfigurationTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/cosmos/CosmosAutoConfigurationTest.java index f01aaaeab29c9..c2dbdce29820c 100644 --- a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/cosmos/CosmosAutoConfigurationTest.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/cosmos/CosmosAutoConfigurationTest.java @@ -5,19 +5,26 @@ import com.azure.core.credential.AzureKeyCredential; import com.azure.cosmos.CosmosAsyncClient; import com.azure.cosmos.CosmosClientBuilder; +import com.azure.spring.autoconfigure.unity.AzureProperties; +import com.azure.spring.autoconfigure.unity.AzurePropertyAutoConfiguration; import com.azure.spring.data.cosmos.config.CosmosConfig; import com.azure.spring.data.cosmos.core.CosmosTemplate; import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.FilteredClassLoader; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; +import static com.azure.spring.autoconfigure.cosmos.PropertySettingUtil.CLIENT_ID; +import static com.azure.spring.autoconfigure.cosmos.PropertySettingUtil.CLOUD; import static com.azure.spring.autoconfigure.cosmos.PropertySettingUtil.DATABASE_NAME; import static com.azure.spring.autoconfigure.cosmos.PropertySettingUtil.KEY; import static com.azure.spring.autoconfigure.cosmos.PropertySettingUtil.URI; -import static com.azure.spring.autoconfigure.cosmos.PropertySettingUtil.getCommonPropertyValues; +import static com.azure.spring.autoconfigure.cosmos.PropertySettingUtil.getCosmosPropertyValues; +import static com.azure.spring.autoconfigure.cosmos.PropertySettingUtil.getUnifiedPropertyValues; +import static com.azure.spring.autoconfigure.unity.AzureProperties.AZURE_PROPERTY_BEAN_NAME; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; @@ -28,7 +35,7 @@ public class CosmosAutoConfigurationTest { @Test public void testCosmosAutoConfigurationWithoutEnableConfigFile() { this.contextRunner - .withConfiguration(AutoConfigurations.of(CosmosAutoConfiguration.class)) + .withConfiguration(AutoConfigurations.of(CosmosAutoConfiguration.class, AzurePropertyAutoConfiguration.class)) .withClassLoader(new FilteredClassLoader(new ClassPathResource("cosmos.enable.config"))) .run((context) -> { assertThat(context).doesNotHaveBean(CosmosConfig.class); @@ -38,7 +45,7 @@ public void testCosmosAutoConfigurationWithoutEnableConfigFile() { @Test public void testCosmosAutoConfigurationWithoutConditionalOnClass() { this.contextRunner - .withConfiguration(AutoConfigurations.of(CosmosAutoConfiguration.class)) + .withConfiguration(AutoConfigurations.of(CosmosAutoConfiguration.class, AzurePropertyAutoConfiguration.class)) .withClassLoader(new FilteredClassLoader(CosmosAsyncClient.class, CosmosTemplate.class)) .run((context) -> { assertThat(context).doesNotHaveBean(CosmosConfig.class); @@ -48,27 +55,33 @@ public void testCosmosAutoConfigurationWithoutConditionalOnClass() { @Test public void testCosmosAutoConfigurationBean() { this.contextRunner - .withPropertyValues(getCommonPropertyValues()) - .withConfiguration(AutoConfigurations.of(ConfigurationWithMockCosmosAsyncClient.class)) + .withPropertyValues(getCosmosPropertyValues()) + .withPropertyValues(getUnifiedPropertyValues()) + .withConfiguration(AutoConfigurations.of(ConfigurationWithMockCosmosAsyncClient.class, AzurePropertyAutoConfiguration.class)) .run((context) -> { assertThat(context).hasSingleBean(CosmosAsyncClient.class); assertThat(context).hasSingleBean(CosmosTemplate.class); assertThat(context).hasSingleBean(AzureKeyCredential.class); assertThat(context).hasSingleBean(CosmosClientBuilder.class); assertThat(context).hasSingleBean(CosmosConfig.class); + assertThat(context).hasBean(AZURE_PROPERTY_BEAN_NAME); CosmosProperties cosmosProperties = context.getBean(CosmosProperties.class); assertThat(cosmosProperties.getUri()).isEqualTo(URI); assertThat(cosmosProperties.getKey()).isEqualTo(KEY); assertThat(cosmosProperties.getDatabase()).isEqualTo(DATABASE_NAME); + + AzureProperties azureProperties = (AzureProperties) context.getBean(AZURE_PROPERTY_BEAN_NAME); + assertThat(azureProperties.getCredential().getClientId()).isEqualTo(CLIENT_ID); + assertThat(azureProperties.getEnvironment().getCloud()).isEqualTo(CLOUD); }); } @Configuration(proxyBeanMethods = false) static class ConfigurationWithMockCosmosAsyncClient extends CosmosAutoConfiguration { - ConfigurationWithMockCosmosAsyncClient(CosmosProperties properties) { - super(properties); + ConfigurationWithMockCosmosAsyncClient(CosmosProperties cosmosProperties, @Qualifier(AZURE_PROPERTY_BEAN_NAME)AzureProperties azureProperties) { + super(cosmosProperties, azureProperties); } @Override diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/cosmos/CosmosPropertiesTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/cosmos/CosmosPropertiesTest.java similarity index 84% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/cosmos/CosmosPropertiesTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/cosmos/CosmosPropertiesTest.java index f66db34846d84..1e8b8dde08278 100644 --- a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/cosmos/CosmosPropertiesTest.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/cosmos/CosmosPropertiesTest.java @@ -24,7 +24,7 @@ public class CosmosPropertiesTest { @Test - public void canSetAllProperties() { + public void canSetProperties() { try (AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext()) { configureCosmosProperties(context); context.register(Config.class); @@ -36,6 +36,8 @@ public void canSetAllProperties() { assertThat(properties.getConsistencyLevel()).isEqualTo(PropertySettingUtil.CONSISTENCY_LEVEL); assertThat(properties.isPopulateQueryMetrics()).isEqualTo(PropertySettingUtil.POPULATE_QUERY_METRICS); assertThat(properties.getConnectionMode()).isEqualTo(PropertySettingUtil.CONNECTION_MODE); + assertThat(properties.getCredential().getClientId()).isEqualTo(PropertySettingUtil.CLIENT_ID); + assertThat(properties.getEnvironment().getCloud()).isEqualTo(PropertySettingUtil.CLOUD); } } @@ -62,9 +64,9 @@ public void emptySettingNotAllowed() { Collections.sort(errorStrings); final List errorStringsExpected = Arrays.asList( - "Field error in object 'azure.cosmos' on field 'database': rejected value [null];", - "Field error in object 'azure.cosmos' on field 'key': rejected value [null];", - "Field error in object 'azure.cosmos' on field 'uri': rejected value [null];" + "Field error in object 'spring.cloud.azure.cosmos' on field 'database': rejected value [null];", + "Field error in object 'spring.cloud.azure.cosmos' on field 'key': rejected value [null];", + "Field error in object 'spring.cloud.azure.cosmos' on field 'uri': rejected value [null];" ); assertThat(errorStrings.size()).isEqualTo(errorStringsExpected.size()); diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/cosmos/CosmosRepositoriesAutoConfigurationUnitTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/cosmos/CosmosRepositoriesAutoConfigurationUnitTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/cosmos/CosmosRepositoriesAutoConfigurationUnitTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/cosmos/CosmosRepositoriesAutoConfigurationUnitTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/cosmos/PropertySettingUtil.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/cosmos/PropertySettingUtil.java similarity index 57% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/cosmos/PropertySettingUtil.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/cosmos/PropertySettingUtil.java index fdb30aec508c5..db7b1a1ec3e61 100644 --- a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/cosmos/PropertySettingUtil.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/cosmos/PropertySettingUtil.java @@ -15,12 +15,18 @@ public class PropertySettingUtil { public static final boolean POPULATE_QUERY_METRICS = true; public static final ConsistencyLevel CONSISTENCY_LEVEL = ConsistencyLevel.STRONG; public static final ConnectionMode CONNECTION_MODE = ConnectionMode.DIRECT; - public static final String PROPERTY_URI = "azure.cosmos.uri"; - public static final String PROPERTY_KEY = "azure.cosmos.key"; - public static final String PROPERTY_DBNAME = "azure.cosmos.database"; - public static final String PROPERTY_CONSISTENCY_LEVEL = "azure.cosmos.consistency-level"; - public static final String PROPERTY_POPULATE_QUERY_METRICS = "azure.cosmos.populateQueryMetrics"; - public static final String PROPERTY_CONNECTION_MODE = "azure.cosmos.connection-mode"; + public static final String CLIENT_ID = "for-test-purpose"; + public static final String CLOUD = "AzureChina"; + public static final String PROPERTY_URI = "spring.cloud.azure.cosmos.uri"; + public static final String PROPERTY_KEY = "spring.cloud.azure.cosmos.key"; + public static final String PROPERTY_DBNAME = "spring.cloud.azure.cosmos.database"; + public static final String PROPERTY_CONSISTENCY_LEVEL = "spring.cloud.azure.cosmos.consistency-level"; + public static final String PROPERTY_POPULATE_QUERY_METRICS = "spring.cloud.azure.cosmos.populateQueryMetrics"; + public static final String PROPERTY_CONNECTION_MODE = "spring.cloud.azure.cosmos.connection-mode"; + public static final String PROPERTY_CLIENT_ID = "spring.cloud.azure.cosmos.credential.client-id"; + public static final String PROPERTY_CLOUD = "spring.cloud.azure.cosmos.environment.cloud"; + public static final String PROPERTY_UNIFIED_CLIENT_ID = "spring.cloud.azure.credential.client-id"; + public static final String PROPERTY_UNIFIED_CLOUD = "spring.cloud.azure.environment.cloud"; public static void configureCosmosProperties(AnnotationConfigApplicationContext context) { addInlinedPropertiesToEnvironment( @@ -30,11 +36,13 @@ public static void configureCosmosProperties(AnnotationConfigApplicationContext PROPERTY_DBNAME + "=" + DATABASE_NAME, PROPERTY_CONSISTENCY_LEVEL + "=" + CONSISTENCY_LEVEL.name(), PROPERTY_POPULATE_QUERY_METRICS + "=" + POPULATE_QUERY_METRICS, - PROPERTY_CONNECTION_MODE + "=" + CONNECTION_MODE.name() + PROPERTY_CONNECTION_MODE + "=" + CONNECTION_MODE.name(), + PROPERTY_CLIENT_ID + "=" + CLIENT_ID, + PROPERTY_CLOUD + "=" + CLOUD ); } - public static String[] getCommonPropertyValues() { + public static String[] getCosmosPropertyValues() { return new String[] { PROPERTY_URI + "=" + URI, PROPERTY_KEY + "=" + KEY, PROPERTY_DBNAME + "=" + DATABASE_NAME, @@ -43,4 +51,10 @@ public static String[] getCommonPropertyValues() { PROPERTY_CONNECTION_MODE + "=" + CONNECTION_MODE.name() }; } + + public static String[] getUnifiedPropertyValues() { + return new String[] { PROPERTY_UNIFIED_CLIENT_ID + "=" + CLIENT_ID, + PROPERTY_UNIFIED_CLOUD + "=" + CLOUD + }; + } } diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/cosmos/TestAutoConfigurationPackage.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/cosmos/TestAutoConfigurationPackage.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/cosmos/TestAutoConfigurationPackage.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/cosmos/TestAutoConfigurationPackage.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/cosmos/TestAutoConfigurationPackageRegistrar.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/cosmos/TestAutoConfigurationPackageRegistrar.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/cosmos/TestAutoConfigurationPackageRegistrar.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/cosmos/TestAutoConfigurationPackageRegistrar.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/cosmos/domain/Person.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/cosmos/domain/Person.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/cosmos/domain/Person.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/cosmos/domain/Person.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/cosmos/domain/PersonRepository.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/cosmos/domain/PersonRepository.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/cosmos/domain/PersonRepository.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/cosmos/domain/PersonRepository.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/jms/ConnectionStringResolverTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/jms/ConnectionStringResolverTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/jms/ConnectionStringResolverTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/jms/ConnectionStringResolverTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/jms/NonPremiumServiceBusJMSAutoConfigurationTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/jms/NonPremiumServiceBusJMSAutoConfigurationTest.java similarity index 74% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/jms/NonPremiumServiceBusJMSAutoConfigurationTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/jms/NonPremiumServiceBusJMSAutoConfigurationTest.java index 78a81597b2065..6308beac625a9 100644 --- a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/jms/NonPremiumServiceBusJMSAutoConfigurationTest.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/jms/NonPremiumServiceBusJMSAutoConfigurationTest.java @@ -3,6 +3,8 @@ package com.azure.spring.autoconfigure.jms; +import com.azure.spring.autoconfigure.unity.AzureProperties; +import com.azure.spring.autoconfigure.unity.AzurePropertyAutoConfiguration; import org.apache.qpid.jms.JmsConnectionFactory; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -14,6 +16,7 @@ import javax.jms.ConnectionFactory; +import static com.azure.spring.autoconfigure.unity.AzureProperties.AZURE_PROPERTY_BEAN_NAME; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -87,6 +90,24 @@ public void testAzureServiceBusJMSPropertiesConfigured() { CONNECTION_STRING); assertThat(context.getBean(AzureServiceBusJMSProperties.class).getTopicClientId()).isEqualTo("cid"); assertThat(context.getBean(AzureServiceBusJMSProperties.class).getIdleTimeout()).isEqualTo(123); + assertThat(context.getBean(AzureServiceBusJMSProperties.class).getCredential().getClientSecret()).isEqualTo("for-test-purpose"); + assertThat(context.getBean(AzureServiceBusJMSProperties.class).getEnvironment().getCloud()).isEqualTo("AzureGermany"); + } + ); + } + + @Test + public void testAzurePropertiesConfigured() { + ApplicationContextRunner contextRunner = getContextRunnerWithProperties(); + + contextRunner.run( + context -> { + assertThat(context).hasBean(AZURE_PROPERTY_BEAN_NAME); + + assertThat(((AzureProperties) context.getBean(AZURE_PROPERTY_BEAN_NAME)).getCredential().getClientCertificatePassword()) + .isEqualTo("for-test-purpose"); + assertThat(((AzureProperties) context.getBean(AZURE_PROPERTY_BEAN_NAME)).getEnvironment().getAuthorityHost()) + .isEqualTo("for-test-purpose"); } ); } @@ -95,7 +116,7 @@ private ApplicationContextRunner getEmptyContextRunner() { return new ApplicationContextRunner() .withConfiguration(AutoConfigurations.of(NonPremiumServiceBusJMSAutoConfiguration.class, - JmsAutoConfiguration.class)) + JmsAutoConfiguration.class, AzurePropertyAutoConfiguration.class)) .withPropertyValues( "spring.jms.servicebus.pricing-tier=basic" ); @@ -105,12 +126,16 @@ private ApplicationContextRunner getContextRunnerWithProperties() { return new ApplicationContextRunner() .withConfiguration(AutoConfigurations.of(NonPremiumServiceBusJMSAutoConfiguration.class, - JmsAutoConfiguration.class)) + JmsAutoConfiguration.class, AzurePropertyAutoConfiguration.class)) .withPropertyValues( "spring.jms.servicebus.connection-string=" + CONNECTION_STRING, "spring.jms.servicebus.topic-client-id=cid", "spring.jms.servicebus.idle-timeout=123", - "spring.jms.servicebus.pricing-tier=basic" + "spring.jms.servicebus.pricing-tier=basic", + "spring.jms.servicebus.credential.client-secret=for-test-purpose", + "spring.jms.servicebus.environment.cloud=AzureGermany", + "spring.cloud.azure.credential.client-certificate-password=for-test-purpose", + "spring.cloud.azure.environment.authority-host=for-test-purpose" ); } } diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/jms/PremiumServiceBusJMSAutoConfigurationTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/jms/PremiumServiceBusJMSAutoConfigurationTest.java similarity index 65% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/jms/PremiumServiceBusJMSAutoConfigurationTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/jms/PremiumServiceBusJMSAutoConfigurationTest.java index 7cc42d8c1137d..8fc9063e3b913 100644 --- a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/jms/PremiumServiceBusJMSAutoConfigurationTest.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/jms/PremiumServiceBusJMSAutoConfigurationTest.java @@ -3,6 +3,8 @@ package com.azure.spring.autoconfigure.jms; +import com.azure.spring.autoconfigure.unity.AzureProperties; +import com.azure.spring.autoconfigure.unity.AzurePropertyAutoConfiguration; import com.microsoft.azure.servicebus.jms.ServiceBusJmsConnectionFactory; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -14,6 +16,7 @@ import javax.jms.ConnectionFactory; +import static com.azure.spring.autoconfigure.unity.AzureProperties.AZURE_PROPERTY_BEAN_NAME; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -26,10 +29,10 @@ public class PremiumServiceBusJMSAutoConfigurationTest { public void testAzureServiceBusPremiumAutoConfiguration() { ApplicationContextRunner contextRunner = getEmptyContextRunner(); contextRunner.withPropertyValues("spring.jms.servicebus.pricing-tier=basic") - .run(context -> assertThat(context).doesNotHaveBean(AzureServiceBusJMSProperties.class)); + .run(context -> assertThat(context).doesNotHaveBean(AzureServiceBusJMSProperties.class)); contextRunner.withPropertyValues("spring.jms.servicebus.enabled=false") - .run(context -> assertThat(context).doesNotHaveBean(AzureServiceBusJMSProperties.class)); + .run(context -> assertThat(context).doesNotHaveBean(AzureServiceBusJMSProperties.class)); contextRunner.withPropertyValues("spring.jms.servicebus.connection-string=" + CONNECTION_STRING) .run(context -> assertThat(context).hasSingleBean(AzureServiceBusJMSProperties.class)); @@ -47,7 +50,7 @@ public void testAzureServiceBusJMSPropertiesConnectionStringValidation() { public void testWithoutServiceBusJMSNamespace() { ApplicationContextRunner contextRunner = getEmptyContextRunner(); contextRunner.withClassLoader(new FilteredClassLoader(ServiceBusJmsConnectionFactory.class)) - .run(context -> assertThat(context).doesNotHaveBean(AzureServiceBusJMSProperties.class)); + .run(context -> assertThat(context).doesNotHaveBean(AzureServiceBusJMSProperties.class)); } @Test @@ -73,10 +76,30 @@ public void testAzureServiceBusJMSPropertiesConfigured() { contextRunner.run( context -> { assertThat(context).hasSingleBean(AzureServiceBusJMSProperties.class); + assertThat(context).hasBean(AZURE_PROPERTY_BEAN_NAME); + assertThat(context.getBean(AzureServiceBusJMSProperties.class).getConnectionString()).isEqualTo( CONNECTION_STRING); assertThat(context.getBean(AzureServiceBusJMSProperties.class).getTopicClientId()).isEqualTo("cid"); assertThat(context.getBean(AzureServiceBusJMSProperties.class).getIdleTimeout()).isEqualTo(123); + assertThat(context.getBean(AzureServiceBusJMSProperties.class).getCredential().getClientSecret()).isEqualTo("for-test-purpose"); + assertThat(context.getBean(AzureServiceBusJMSProperties.class).getEnvironment().getCloud()).isEqualTo("AzureGermany"); + } + ); + } + + @Test + public void testAzurePropertiesConfigured() { + ApplicationContextRunner contextRunner = getContextRunnerWithProperties(); + + contextRunner.run( + context -> { + assertThat(context).hasBean(AZURE_PROPERTY_BEAN_NAME); + + assertThat(((AzureProperties) context.getBean(AZURE_PROPERTY_BEAN_NAME)).getCredential().getClientCertificatePassword()) + .isEqualTo("for-test-purpose"); + assertThat(((AzureProperties) context.getBean(AZURE_PROPERTY_BEAN_NAME)).getEnvironment().getAuthorityHost()) + .isEqualTo("for-test-purpose"); } ); } @@ -84,7 +107,8 @@ public void testAzureServiceBusJMSPropertiesConfigured() { private ApplicationContextRunner getEmptyContextRunner() { return new ApplicationContextRunner() - .withConfiguration(AutoConfigurations.of(PremiumServiceBusJMSAutoConfiguration.class, JmsAutoConfiguration.class)) + .withConfiguration(AutoConfigurations.of(PremiumServiceBusJMSAutoConfiguration.class, + JmsAutoConfiguration.class, AzurePropertyAutoConfiguration.class)) .withPropertyValues( "spring.jms.servicebus.pricing-tier=premium" ); @@ -93,12 +117,17 @@ private ApplicationContextRunner getEmptyContextRunner() { private ApplicationContextRunner getContextRunnerWithProperties() { return new ApplicationContextRunner() - .withConfiguration(AutoConfigurations.of(PremiumServiceBusJMSAutoConfiguration.class, JmsAutoConfiguration.class)) + .withConfiguration(AutoConfigurations.of(PremiumServiceBusJMSAutoConfiguration.class, + JmsAutoConfiguration.class, AzurePropertyAutoConfiguration.class)) .withPropertyValues( "spring.jms.servicebus.connection-string=" + CONNECTION_STRING, "spring.jms.servicebus.topic-client-id=cid", "spring.jms.servicebus.idle-timeout=123", - "spring.jms.servicebus.pricing-tier=premium" + "spring.jms.servicebus.pricing-tier=premium", + "spring.jms.servicebus.credential.client-secret=for-test-purpose", + "spring.jms.servicebus.environment.cloud=AzureGermany", + "spring.cloud.azure.credential.client-certificate-password=for-test-purpose", + "spring.cloud.azure.environment.authority-host=for-test-purpose" ); } } diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/storage/AzureStorageResourcePatternResolverTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/storage/AzureStorageResourcePatternResolverTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/storage/AzureStorageResourcePatternResolverTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/storage/AzureStorageResourcePatternResolverTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/storage/StorageAutoConfigurationTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/storage/StorageAutoConfigurationTest.java similarity index 57% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/storage/StorageAutoConfigurationTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/storage/StorageAutoConfigurationTest.java index a95a9b65702df..cb83af30ebfcb 100644 --- a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/storage/StorageAutoConfigurationTest.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/storage/StorageAutoConfigurationTest.java @@ -3,6 +3,8 @@ package com.azure.spring.autoconfigure.storage; +import com.azure.spring.autoconfigure.unity.AzureProperties; +import com.azure.spring.autoconfigure.unity.AzurePropertyAutoConfiguration; import com.azure.storage.blob.BlobServiceClientBuilder; import com.azure.storage.file.share.ShareServiceClientBuilder; import org.junit.jupiter.api.Test; @@ -13,15 +15,15 @@ import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; +import static com.azure.spring.autoconfigure.unity.AzureProperties.AZURE_PROPERTY_BEAN_NAME; import static org.assertj.core.api.Assertions.assertThat; - import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.mock; public class StorageAutoConfigurationTest { private ApplicationContextRunner contextRunner = new ApplicationContextRunner() - .withConfiguration(AutoConfigurations.of(StorageAutoConfiguration.class)) + .withConfiguration(AutoConfigurations.of(StorageAutoConfiguration.class, AzurePropertyAutoConfiguration.class)) .withUserConfiguration(TestConfiguration.class); @Test @@ -38,22 +40,41 @@ public void testWithoutStorageClient() { @Test public void testAzureStoragePropertiesIllegal() { - this.contextRunner.withPropertyValues("azure.storage.accountName=a") + this.contextRunner.withPropertyValues("spring.cloud.azure.storage.accountName=a") .run(context -> assertThrows(IllegalStateException.class, () -> context.getBean(StorageProperties.class))); } @Test public void testAzureStoragePropertiesConfigured() { - this.contextRunner.withPropertyValues("azure.storage.account-name=acc1") - .withPropertyValues("azure.storage.account-key=key1") - .withPropertyValues("azure.storage.blob-endpoint=endpoint1") + this.contextRunner.withPropertyValues("spring.cloud.azure.storage.account-name=acc1") + .withPropertyValues("spring.cloud.azure.storage.account-key=key1") + .withPropertyValues("spring.cloud.azure.storage.blob-endpoint=endpoint1") + .withPropertyValues("spring.cloud.azure.storage.credential.client-id=for-test-purpose") + .withPropertyValues("spring.cloud.azure.storage.environment.cloud=AzureUSGovernment") .run(context -> { assertThat(context).hasSingleBean(StorageProperties.class); final StorageProperties storageProperties = context.getBean(StorageProperties.class); assertThat(storageProperties.getAccountName()).isEqualTo("acc1"); assertThat(storageProperties.getAccountKey()).isEqualTo("key1"); assertThat(storageProperties.getBlobEndpoint()).isEqualTo("endpoint1"); + assertThat(storageProperties.getCredential().getClientId()).isEqualTo("for-test-purpose"); + assertThat(storageProperties.getEnvironment().getCloud()).isEqualTo("AzureUSGovernment"); + }); + } + + @Test + public void testAzurePropertiesConfigured() { + this.contextRunner.withPropertyValues("spring.cloud.azure.credential.client-id=for-test-purpose") + .withPropertyValues("spring.cloud.azure.environment.cloud=AzureUSGovernment") + .withPropertyValues("spring.cloud.azure.storage.account-name=acc1") + .run(context -> { + assertThat(context).hasSingleBean(StorageProperties.class); + assertThat(context).hasBean(AZURE_PROPERTY_BEAN_NAME); + + final AzureProperties azureProperties = (AzureProperties) context.getBean(AZURE_PROPERTY_BEAN_NAME); + assertThat(azureProperties.getCredential().getClientId()).isEqualTo("for-test-purpose"); + assertThat(azureProperties.getEnvironment().getCloud()).isEqualTo("AzureUSGovernment"); }); } diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/storage/actuator/BlobStorageHealthIndicatorTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/storage/actuator/BlobStorageHealthIndicatorTest.java similarity index 96% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/storage/actuator/BlobStorageHealthIndicatorTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/storage/actuator/BlobStorageHealthIndicatorTest.java index cbc6f9fea0452..ccd39164cf764 100644 --- a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/storage/actuator/BlobStorageHealthIndicatorTest.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/storage/actuator/BlobStorageHealthIndicatorTest.java @@ -47,7 +47,7 @@ public void testWithStorageConfigurationWithConnectionUp() { .withAllowBeanDefinitionOverriding(true) .withConfiguration(AutoConfigurations.of(StorageAutoConfiguration.class, StorageHealthConfiguration.class)) .withUserConfiguration(TestConfigurationConnectionUp.class) - .withPropertyValues("azure.storage.account-name=acc1"); + .withPropertyValues("spring.cloud.azure.storage.account-name=acc1"); contextRunner.run(context -> { Health health = context.getBean("blobStorageHealthIndicator", BlobStorageHealthIndicator.class) @@ -63,7 +63,7 @@ public void testWithStorageConfigurationWithConnectionDown() { .withAllowBeanDefinitionOverriding(true) .withConfiguration(AutoConfigurations.of(StorageAutoConfiguration.class, StorageHealthConfiguration.class)) .withUserConfiguration(TestConfigurationConnectionDown.class) - .withPropertyValues("azure.storage.account-name=acc1"); + .withPropertyValues("spring.cloud.azure.storage.account-name=acc1"); contextRunner.run(context -> { Health health = context.getBean("blobStorageHealthIndicator", BlobStorageHealthIndicator.class) diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/storage/actuator/FileStorageHealthIndicatorTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/storage/actuator/FileStorageHealthIndicatorTest.java similarity index 96% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/storage/actuator/FileStorageHealthIndicatorTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/storage/actuator/FileStorageHealthIndicatorTest.java index 3237d96aaac97..9a328849270a9 100644 --- a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/storage/actuator/FileStorageHealthIndicatorTest.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/storage/actuator/FileStorageHealthIndicatorTest.java @@ -44,7 +44,7 @@ public void testWithStorageConfigurationWithConnectionUp() { .withAllowBeanDefinitionOverriding(true) .withConfiguration(AutoConfigurations.of(StorageAutoConfiguration.class, StorageHealthConfiguration.class)) .withUserConfiguration(TestConfigurationConnectionUp.class) - .withPropertyValues("azure.storage.account-name=acc1"); + .withPropertyValues("spring.cloud.azure.storage.account-name=acc1"); contextRunner.run(context -> { Health health = context.getBean(FileStorageHealthIndicator.class).getHealth(true); Assertions.assertEquals(Status.UP, health.getStatus()); @@ -58,7 +58,7 @@ public void testWithStorageConfigurationWithConnectionDown() { .withAllowBeanDefinitionOverriding(true) .withConfiguration(AutoConfigurations.of(StorageAutoConfiguration.class, StorageHealthConfiguration.class)) .withUserConfiguration(TestConfigurationConnectionDown.class) - .withPropertyValues("azure.storage.account-name=acc1"); + .withPropertyValues("spring.cloud.azure.storage.account-name=acc1"); contextRunner.run(context -> { Health health = context.getBean(FileStorageHealthIndicator.class).getHealth(true); Assertions.assertEquals(Status.DOWN, health.getStatus()); diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/storage/resource/AzureBlobStorageTests.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/storage/resource/AzureBlobStorageTests.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/storage/resource/AzureBlobStorageTests.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/storage/resource/AzureBlobStorageTests.java diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/unity/AzurePropertyAutoConfigurationTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/unity/AzurePropertyAutoConfigurationTest.java new file mode 100644 index 0000000000000..ad426473d3715 --- /dev/null +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/unity/AzurePropertyAutoConfigurationTest.java @@ -0,0 +1,39 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +package com.azure.spring.autoconfigure.unity; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +public class AzurePropertyAutoConfigurationTest { + private ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(AzurePropertyAutoConfiguration.class)); + + @Test + public void testAutoConfiguration() { + this.contextRunner.run(context -> { + assertThat(context).hasSingleBean(AzurePropertyAutoConfiguration.class); + assertThat(context).hasSingleBean(AzureProperties.class); + }); + } + + @Test + public void testAzureProperties() { + this.contextRunner.withPropertyValues( + "spring.cloud.azure.credential.client-id=fake-client-id", + "spring.cloud.azure.credential.client_secret=fake-client-secret", + "spring.cloud.azure.environment.authorityHost=fake-authority-host", + "spring.cloud.azure.environment.GRAPH_BASE_URI=fake-graph-base-uri" + ) + .run(context -> { + final AzureProperties azureProperties = context.getBean(AzureProperties.class); + assertThat(azureProperties.getCredential().getClientId()).isEqualTo("fake-client-id"); + assertThat(azureProperties.getCredential().getClientSecret()).isEqualTo("fake-client-secret"); + assertThat(azureProperties.getEnvironment().getAuthorityHost()).isEqualTo("fake-authority-host"); + assertThat(azureProperties.getEnvironment().getGraphBaseUri()).isEqualTo("fake-graph-base-uri"); + }); + } +} diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/unity/PreLegacyPropertyProcessorTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/unity/PreLegacyPropertyProcessorTest.java new file mode 100644 index 0000000000000..2d4a7f16f32ea --- /dev/null +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/autoconfigure/unity/PreLegacyPropertyProcessorTest.java @@ -0,0 +1,124 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +package com.azure.spring.autoconfigure.unity; + +import com.azure.cosmos.ConnectionMode; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.parallel.Execution; +import org.junit.jupiter.api.parallel.ExecutionMode; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.WebApplicationType; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.env.EnvironmentPostProcessor; +import org.springframework.boot.test.system.CapturedOutput; +import org.springframework.boot.test.system.OutputCaptureExtension; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.core.env.ConfigurableEnvironment; +import org.springframework.core.env.PropertiesPropertySource; + +import java.util.Properties; + +import static com.azure.spring.autoconfigure.unity.PreLegacyPropertyEnvironmentPostProcessor.toLogString; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +@Execution(ExecutionMode.SAME_THREAD) +@ExtendWith(OutputCaptureExtension.class) +public class PreLegacyPropertyProcessorTest { + + private PreLegacyPropertyEnvironmentPostProcessor processor = new PreLegacyPropertyEnvironmentPostProcessor(); + + @Test + public void postProcessorHasConfiguredOrder() { + assertEquals(processor.getOrder(), PreLegacyPropertyEnvironmentPostProcessor.DEFAULT_ORDER); + } + + @Test + public void testMapLegacyToCurrent(CapturedOutput output) { + Properties properties = new Properties(); + properties.setProperty("azure.storage.account-key", "fakekey"); + properties.setProperty("azure.keyvault.uri", "fakeuri"); + properties.setProperty("spring.cloud.azure.keyvault.uri", "trueuri"); + PropertiesPropertySource propertySource = new PropertiesPropertySource("test", properties); + ConfigurableEnvironment environment = getEnvironment(propertySource, processor); + + assertTrue(environment.getPropertySources().contains(processor.getClass().getName())); + assertEquals("fakekey", environment.getProperty("spring.cloud.azure.storage.account-key")); + assertEquals("trueuri", environment.getProperty("spring.cloud.azure.keyvault.uri")); + assertTrue(output.getOut().contains( + toLogString("azure.storage.account-key", "spring.cloud.azure.storage.account-key"))); + assertFalse(output.getOut().contains( + toLogString("azure.keyvault.uri", "spring.cloud.azure.keyvault.uri"))); + } + + @Test + public void testRelaxBinding(CapturedOutput output) { + Properties properties = new Properties(); + properties.setProperty("azure.storage.accountKey", "fakekey"); + properties.put("azure.cosmos.connection-mode", ConnectionMode.DIRECT); + properties.put("azure.cosmos.allow_telemetry", false); + properties.put("azure.keyvault.REFRESH_INTERVAL", 1000L); + PropertiesPropertySource propertySource = new PropertiesPropertySource("test", properties); + ConfigurableEnvironment environment = getEnvironment(propertySource, processor); + + assertTrue(environment.getPropertySources().contains(processor.getClass().getName())); + assertEquals("fakekey", environment.getProperty("spring.cloud.azure.storage.account-key")); + assertEquals(ConnectionMode.DIRECT, environment.getProperty("spring.cloud.azure.cosmos.connection-mode", ConnectionMode.class)); + assertEquals(false, environment.getProperty("spring.cloud.azure.cosmos.allow-telemetry", Boolean.class)); + assertEquals(1000L, environment.getProperty("spring.cloud.azure.keyvault.refresh-interval", Long.class)); + + assertTrue(output.getOut().contains( + toLogString("azure.storage.account-key", "spring.cloud.azure.storage.account-key"))); + } + + + @Test + public void testMultipleKeyVaults(CapturedOutput output) { + Properties properties = new Properties(); + properties.setProperty("azure.keyvault.order", "one, two"); + properties.setProperty("spring.cloud.azure.keyvault.order", "three, four"); + properties.setProperty("azure.keyvault.one.uri", "uri"); + properties.setProperty("azure.keyvault.two.client-id", "id"); + properties.setProperty("azure.keyvault.three.client-key", "key"); + properties.setProperty("azure.keyvault.four.authority-host", "host"); + properties.setProperty("azure.keyvault.five.enabled", "true"); + + PropertiesPropertySource propertySource = new PropertiesPropertySource("test", properties); + ConfigurableEnvironment environment = getEnvironment(propertySource, processor); + + assertTrue(environment.getPropertySources().contains(processor.getClass().getName())); + assertNull(environment.getProperty("spring.cloud.azure.keyvault.one.uri")); + assertNull(environment.getProperty("spring.cloud.azure.keyvault.two.credential.client-id")); + assertEquals("key", environment.getProperty("spring.cloud.azure.keyvault.three.credential.client-secret")); + assertEquals("host", environment.getProperty("spring.cloud.azure.keyvault.four.environment.authority-host")); + assertNull(environment.getProperty("spring.cloud.azure.keyvault.five.enabled")); + assertFalse(output.getOut().contains( + toLogString("azure.keyvault.one.uri", "spring.cloud.azure.keyvault.one.uri"))); + assertTrue(output.getOut().contains( + toLogString("azure.keyvault.three.client-key", "spring.cloud.azure.keyvault.three.credential.client-secret"))); + } + + private ConfigurableEnvironment getEnvironment(PropertiesPropertySource propertiesPropertySource, + EnvironmentPostProcessor environmentPostProcessor) { + SpringApplication springApplication = getSpringApplication(environmentPostProcessor.getClass()); + + ConfigurableApplicationContext context = springApplication.run(); + ConfigurableEnvironment configurableEnvironment = context.getEnvironment(); + configurableEnvironment.getPropertySources().addFirst(propertiesPropertySource); + environmentPostProcessor.postProcessEnvironment(configurableEnvironment, springApplication); + context.close(); + + return configurableEnvironment; + } + + private SpringApplication getSpringApplication(Class... sources) { + return new SpringApplicationBuilder().sources(sources).web(WebApplicationType.NONE).build(); + } + +// public static String toLogString(String legacyPropertyName, String currentPropertyName) { +// return String.format("Deprecated property %s detected! Use %s instead!", legacyPropertyName, currentPropertyName); +// } +} diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/cloudfoundry/AzureCloudFoundryEnvironmentPostProcessorTests.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/cloudfoundry/AzureCloudFoundryEnvironmentPostProcessorTests.java index a927e815a1cef..02d3ae36808a7 100644 --- a/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/cloudfoundry/AzureCloudFoundryEnvironmentPostProcessorTests.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/cloudfoundry/AzureCloudFoundryEnvironmentPostProcessorTests.java @@ -3,9 +3,9 @@ package com.azure.spring.cloud.autoconfigure.cloudfoundry; -import com.azure.spring.cloud.autoconfigure.storage.AzureStorageProperties; import com.azure.spring.cloud.autoconfigure.eventhub.AzureEventHubProperties; import com.azure.spring.cloud.autoconfigure.servicebus.AzureServiceBusProperties; +import com.azure.spring.cloud.autoconfigure.storage.AzureStorageProperties; import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.data.redis.RedisProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/commonconfig/TestConfigWithAzureResourceManager.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/commonconfig/TestConfigWithAzureResourceManager.java new file mode 100644 index 0000000000000..0e90b53f6549d --- /dev/null +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/commonconfig/TestConfigWithAzureResourceManager.java @@ -0,0 +1,35 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.spring.cloud.autoconfigure.commonconfig; + +import com.azure.resourcemanager.AzureResourceManager; +import com.azure.spring.cloud.autoconfigure.context.AzureContextProperties; +import com.azure.spring.cloud.context.core.api.AzureResourceMetadata; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import static org.mockito.Mockito.mock; + +@Configuration +@EnableConfigurationProperties(AzureContextProperties.class) +public class TestConfigWithAzureResourceManager { + + public static final String TEST_RESOURCE_GROUP = "test-rg"; + public static final String TEST_REGION = "test-region"; + + @Bean + public AzureResourceManager azureResourceManager() { + return mock(AzureResourceManager.class); + } + + @Bean + public AzureResourceMetadata azureResourceMetadata() { + final AzureResourceMetadata azureResourceMetadata = new AzureResourceMetadata(); + azureResourceMetadata.setResourceGroup(TEST_RESOURCE_GROUP); + azureResourceMetadata.setRegion(TEST_REGION); + return azureResourceMetadata; + } + +} diff --git a/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/cloud/autoconfigure/context/AzureContextAutoConfigurationTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/context/AzureContextAutoConfigurationTest.java similarity index 66% rename from sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/cloud/autoconfigure/context/AzureContextAutoConfigurationTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/context/AzureContextAutoConfigurationTest.java index 38659a3279756..88b4b3452ea09 100644 --- a/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/cloud/autoconfigure/context/AzureContextAutoConfigurationTest.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/context/AzureContextAutoConfigurationTest.java @@ -3,11 +3,8 @@ package com.azure.spring.cloud.autoconfigure.context; -import com.azure.core.management.AzureEnvironment; import com.azure.core.management.profile.AzureProfile; import com.azure.resourcemanager.AzureResourceManager; -import com.azure.spring.cloud.context.core.api.CredentialsProvider; -import com.azure.spring.cloud.context.core.config.AzureProperties; import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.FilteredClassLoader; @@ -16,25 +13,25 @@ import org.springframework.context.annotation.Configuration; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.mock; public class AzureContextAutoConfigurationTest { private static final String AZURE_PROPERTY_PREFIX = "spring.cloud.azure."; private ApplicationContextRunner contextRunner = new ApplicationContextRunner() - .withConfiguration(AutoConfigurations.of(AzureContextAutoConfiguration.class)); + .withConfiguration(AutoConfigurations.of(AzureResourceManagerAutoConfiguration.class)); @Test public void testAzureDisabled() { - this.contextRunner.run(context -> assertThat(context).doesNotHaveBean(AzureProperties.class)); + this.contextRunner.run(context -> assertThat(context).doesNotHaveBean(AzureContextProperties.class)); } @Test public void testWithoutAzureClass() { this.contextRunner.withClassLoader(new FilteredClassLoader(AzureResourceManager.class)) - .run(context -> assertThat(context).doesNotHaveBean(AzureProperties.class)); + .run(context -> assertThat(context).doesNotHaveBean(AzureContextProperties.class)); } @Test @@ -42,7 +39,7 @@ public void testLocationRequiredWhenAutoCreateResources() { this.contextRunner.withPropertyValues(AZURE_PROPERTY_PREFIX + "resourceGroup=group1") .withPropertyValues(AZURE_PROPERTY_PREFIX + "auto-create-resources=true") .run(context -> assertThrows(IllegalStateException.class, - () -> context.getBean(AzureProperties.class))); + () -> context.getBean(AzureContextProperties.class))); } @Test @@ -56,15 +53,13 @@ public void testAzurePropertiesConfigured() { AZURE_PROPERTY_PREFIX + "region=region1", AZURE_PROPERTY_PREFIX + "subscriptionId=sub1") .run(context -> { - assertThat(context).hasSingleBean(AzureProperties.class); - assertThat(context.getBean(AzureProperties.class).getClientId()).isEqualTo("client1"); - assertThat(context.getBean(AzureProperties.class).getClientSecret()).isEqualTo("secret1"); - assertThat(context.getBean(AzureProperties.class).getTenantId()).isEqualTo("tenant1"); - assertThat(context.getBean(AzureProperties.class).getResourceGroup()).isEqualTo("rg1"); - assertThat(context.getBean(AzureProperties.class).getRegion()).isEqualTo("region1"); - assertThat(context.getBean(AzureProperties.class).getSubscriptionId()).isEqualTo("sub1"); - assertThat(context.getBean(AzureProperties.class).getEnvironment().getAzureEnvironment()) - .isEqualTo(AzureEnvironment.AZURE); + assertThat(context).hasSingleBean(AzureContextProperties.class); + assertThat(context.getBean(AzureContextProperties.class).getClientId()).isEqualTo("client1"); + assertThat(context.getBean(AzureContextProperties.class).getClientSecret()).isEqualTo("secret1"); + assertThat(context.getBean(AzureContextProperties.class).getTenantId()).isEqualTo("tenant1"); + assertThat(context.getBean(AzureContextProperties.class).getResourceGroup()).isEqualTo("rg1"); + assertThat(context.getBean(AzureContextProperties.class).getRegion()).isEqualTo("region1"); + assertThat(context.getBean(AzureContextProperties.class).getSubscriptionId()).isEqualTo("sub1"); }); } @@ -73,7 +68,7 @@ public void testAutoConfigureEnabled() { this.contextRunner.withPropertyValues(AZURE_PROPERTY_PREFIX + "resource-group=rg1") .withUserConfiguration(TestConfigurationWithResourceManager.class) .run(context -> { - assertThat(context).hasSingleBean(AzureProperties.class); + assertThat(context).hasSingleBean(AzureContextProperties.class); assertThat(context).hasSingleBean(AzureProfile.class); }); } @@ -86,10 +81,5 @@ AzureResourceManager azureResourceManager() { return mock(AzureResourceManager.class); } - @Bean - CredentialsProvider credentialsProvider() { - return mock(CredentialsProvider.class); - } - } } diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubAutoConfigurationTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubAutoConfigurationTest.java index 67c919af2a89d..575d70d96c29e 100644 --- a/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubAutoConfigurationTest.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubAutoConfigurationTest.java @@ -10,28 +10,28 @@ import com.azure.resourcemanager.storage.models.StorageAccount; import com.azure.resourcemanager.storage.models.StorageAccountKey; import com.azure.resourcemanager.storage.models.StorageAccounts; -import com.azure.spring.cloud.context.core.config.AzureProperties; +import com.azure.spring.cloud.autoconfigure.commonconfig.TestConfigWithAzureResourceManager; import com.azure.spring.cloud.context.core.impl.EventHubNamespaceManager; import com.azure.spring.cloud.context.core.impl.StorageAccountManager; import com.azure.spring.integration.eventhub.api.EventHubClientFactory; import com.azure.spring.integration.eventhub.api.EventHubOperation; -import com.azure.spring.integration.eventhub.factory.EventHubConnectionStringProvider; import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; -import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.FilteredClassLoader; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.Primary; import java.util.List; import static java.util.Collections.singletonList; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import static org.junit.jupiter.api.Assertions.assertThrows; public class AzureEventHubAutoConfigurationTest { @@ -90,8 +90,7 @@ public void testConnectionStringProvided() { @Test public void testResourceManagerProvided() { this.contextRunner.withUserConfiguration( - TestConfigWithAzureResourceManagerAndConnectionProvider.class, - AzureEventHubAutoConfiguration.class) + TestConfigWithAzureResourceManagerAndConnectionProvider.class) .withPropertyValues( AZURE_PROPERTY_PREFIX + "resource-group=rg1", EVENT_HUB_PROPERTY_PREFIX + "namespace=ns1", @@ -106,18 +105,18 @@ public void testResourceManagerProvided() { } @Configuration - @EnableConfigurationProperties(AzureProperties.class) + @Import(TestConfigWithAzureResourceManager.class) public static class TestConfigWithAzureResourceManagerAndConnectionProvider { @Bean - public AzureResourceManager azureResourceManager() { + @Primary + public AzureResourceManager azureResourceManagerMock() { final AzureResourceManager mockResourceManager = mock(AzureResourceManager.class); final StorageManager mockStorageManager = mock(StorageManager.class); final StorageAccounts mockStorageAccounts = mock(StorageAccounts.class); final StorageAccount mockStorageAccount = mock(StorageAccount.class); final List mockStorageAccountKeys = singletonList(mock(StorageAccountKey.class)); - when(mockResourceManager.storageAccounts()).thenReturn(mockStorageAccounts); when(mockStorageAccounts.getByResourceGroup(anyString(), anyString())).thenReturn(mockStorageAccount); when(mockStorageAccount.getKeys()).thenReturn(mockStorageAccountKeys); diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubKafkaAutoConfigurationTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubKafkaAutoConfigurationTest.java index 4159ba5c8e97f..8efe19391d955 100644 --- a/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubKafkaAutoConfigurationTest.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/eventhub/AzureEventHubKafkaAutoConfigurationTest.java @@ -13,25 +13,26 @@ import com.azure.resourcemanager.eventhubs.models.EventHubNamespace; import com.azure.resourcemanager.eventhubs.models.EventHubNamespaceAuthorizationRule; import com.azure.resourcemanager.eventhubs.models.EventHubNamespaces; -import com.azure.spring.cloud.context.core.config.AzureProperties; +import com.azure.spring.cloud.autoconfigure.commonconfig.TestConfigWithAzureResourceManager; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.kafka.KafkaProperties; -import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.FilteredClassLoader; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.Primary; import org.springframework.kafka.core.KafkaTemplate; import reactor.core.publisher.Mono; import static java.util.Collections.singletonList; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import static org.junit.jupiter.api.Assertions.assertThrows; public class AzureEventHubKafkaAutoConfigurationTest { @@ -82,11 +83,12 @@ public void testAzureEventHubPropertiesConfigured() { } @Configuration - @EnableConfigurationProperties(AzureProperties.class) + @Import(TestConfigWithAzureResourceManager.class) public static class TestConfigurationWithResourceManager { @Bean - public AzureResourceManager azureResourceManager() { + @Primary + public AzureResourceManager azureResourceManagerMock() { final AzureResourceManager mockResourceManager = mock(AzureResourceManager.class); final EventHubNamespaces mockNamespaces = mock(EventHubNamespaces.class); final EventHubNamespace mockNamespace = mock(EventHubNamespace.class); @@ -102,7 +104,6 @@ public AzureResourceManager azureResourceManager() { return mockResourceManager; } - } static PagedIterable buildPagedIterable(T element) { diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusAutoConfigurationTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusAutoConfigurationTest.java index 1af5d45bb2428..51c0715ef00d2 100644 --- a/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusAutoConfigurationTest.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusAutoConfigurationTest.java @@ -6,22 +6,15 @@ import com.azure.core.amqp.AmqpRetryMode; import com.azure.core.amqp.AmqpTransportType; import com.azure.messaging.servicebus.ServiceBusReceivedMessage; -import com.azure.resourcemanager.AzureResourceManager; -import com.azure.spring.cloud.context.core.config.AzureProperties; +import com.azure.spring.cloud.autoconfigure.commonconfig.TestConfigWithAzureResourceManager; import com.azure.spring.cloud.context.core.impl.ServiceBusNamespaceManager; -import com.azure.spring.integration.servicebus.factory.ServiceBusConnectionStringProvider; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.boot.autoconfigure.AutoConfigurations; -import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.FilteredClassLoader; import org.springframework.boot.test.context.runner.ApplicationContextRunner; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; import static org.junit.jupiter.api.Assertions.assertThrows; public class AzureServiceBusAutoConfigurationTest { @@ -120,17 +113,5 @@ public void testWithAzureResourceManagerProvided() { .run(context -> assertThat(context).hasSingleBean(ServiceBusNamespaceManager.class)); } - @Configuration - @Import(AzureServiceBusAutoConfiguration.class) - @EnableConfigurationProperties(AzureProperties.class) - public static class TestConfigWithAzureResourceManager { - - @Bean - public AzureResourceManager azureResourceManager() { - return mock(AzureResourceManager.class); - } - - } - } diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusQueueAutoConfigurationTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusQueueAutoConfigurationTest.java index e5c012f3eea60..963f61d37978b 100644 --- a/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusQueueAutoConfigurationTest.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusQueueAutoConfigurationTest.java @@ -6,12 +6,12 @@ import com.azure.core.amqp.AmqpRetryMode; import com.azure.core.amqp.AmqpTransportType; import com.azure.messaging.servicebus.ServiceBusProcessorClient; -import com.azure.resourcemanager.AzureResourceManager; -import com.azure.spring.cloud.context.core.config.AzureProperties; +import com.azure.spring.cloud.autoconfigure.commonconfig.TestConfigWithAzureResourceManager; +import com.azure.spring.cloud.autoconfigure.context.AzureContextProperties; +import com.azure.spring.cloud.context.core.api.AzureResourceMetadata; import com.azure.spring.cloud.context.core.impl.ServiceBusNamespaceManager; import com.azure.spring.cloud.context.core.impl.ServiceBusQueueManager; import com.azure.spring.integration.servicebus.converter.ServiceBusMessageConverter; -import com.azure.spring.integration.servicebus.factory.ServiceBusConnectionStringProvider; import com.azure.spring.integration.servicebus.factory.ServiceBusQueueClientFactory; import com.azure.spring.integration.servicebus.queue.ServiceBusQueueOperation; import com.azure.spring.integration.servicebus.queue.ServiceBusQueueTemplate; @@ -188,7 +188,7 @@ public void testMessageConverterProvided() { } @Configuration - @EnableConfigurationProperties(AzureProperties.class) + @EnableConfigurationProperties(AzureContextProperties.class) public static class TestConfigWithServiceBusNamespaceManager { @Bean @@ -196,6 +196,11 @@ public ServiceBusNamespaceManager servicebusNamespaceManager() { return mock(ServiceBusNamespaceManager.class); } + @Bean + public AzureResourceMetadata azureResourceMetadata() { + return mock(AzureResourceMetadata.class); + } + } @Configuration @@ -210,18 +215,7 @@ public ServiceBusConnectionStringProvider serviceBusConnectionStringProvider() { } @Configuration - @EnableConfigurationProperties(AzureProperties.class) - public static class TestConfigWithAzureResourceManager { - - @Bean - public AzureResourceManager azureResourceManager() { - return mock(AzureResourceManager.class); - } - - } - - @Configuration - @EnableConfigurationProperties(AzureProperties.class) + @EnableConfigurationProperties(AzureContextProperties.class) public static class TestConfigWithMessageConverter { @Bean diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusTopicAutoConfigurationTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusTopicAutoConfigurationTest.java index c230d7cdc0f36..dc3be3f9dad53 100644 --- a/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusTopicAutoConfigurationTest.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/servicebus/AzureServiceBusTopicAutoConfigurationTest.java @@ -6,13 +6,12 @@ import com.azure.core.amqp.AmqpRetryMode; import com.azure.core.amqp.AmqpTransportType; import com.azure.messaging.servicebus.ServiceBusProcessorClient; -import com.azure.resourcemanager.AzureResourceManager; -import com.azure.spring.cloud.context.core.config.AzureProperties; +import com.azure.spring.cloud.autoconfigure.commonconfig.TestConfigWithAzureResourceManager; +import com.azure.spring.cloud.autoconfigure.context.AzureContextProperties; import com.azure.spring.cloud.context.core.impl.ServiceBusNamespaceManager; import com.azure.spring.cloud.context.core.impl.ServiceBusTopicManager; import com.azure.spring.cloud.context.core.impl.ServiceBusTopicSubscriptionManager; import com.azure.spring.integration.servicebus.converter.ServiceBusMessageConverter; -import com.azure.spring.integration.servicebus.factory.ServiceBusConnectionStringProvider; import com.azure.spring.integration.servicebus.factory.ServiceBusTopicClientFactory; import com.azure.spring.integration.servicebus.topic.ServiceBusTopicOperation; import com.azure.spring.integration.servicebus.topic.ServiceBusTopicTemplate; @@ -27,6 +26,7 @@ import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; import static com.azure.spring.cloud.autoconfigure.servicebus.AzureServiceBusQueueAutoConfigurationTest.NAMESPACE_CONNECTION_STRING; import static org.assertj.core.api.Assertions.assertThat; @@ -133,7 +133,7 @@ public void testTransportTypeWithRetryOptions() { @Test public void testResourceManagerProvided() { this.contextRunner.withUserConfiguration(TestConfigWithAzureResourceManager.class, - TestConfigWithConnectionStringProvider.class, AzureServiceBusAutoConfiguration.class) + TestConfigWithConnectionStringProvider.class, AzureServiceBusAutoConfiguration.class) .withPropertyValues( AZURE_PROPERTY_PREFIX + "resource-group=rg1", SERVICE_BUS_PROPERTY_PREFIX + "namespace=ns1" @@ -167,7 +167,7 @@ public void testMessageConverterProvided() { } @Configuration - @EnableConfigurationProperties(AzureProperties.class) + @Import(TestConfigWithAzureResourceManager.class) public static class TestConfigWithServiceBusNamespaceManager { @Bean @@ -189,19 +189,7 @@ public ServiceBusConnectionStringProvider serviceBusConnectionStringProvider() { } @Configuration - @EnableConfigurationProperties(AzureProperties.class) - public static class TestConfigWithAzureResourceManager { - - @Bean - public AzureResourceManager azureResourceManager() { - return mock(AzureResourceManager.class); - } - - - } - - @Configuration - @EnableConfigurationProperties(AzureProperties.class) + @EnableConfigurationProperties(AzureContextProperties.class) public static class TestConfigWithMessageConverter { @Bean diff --git a/sdk/spring/azure-spring-cloud-storage/src/test/java/com/azure/spring/cloud/autoconfigure/storage/AzureStorageQueueAutoConfigurationTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/storage/AzureStorageQueueAutoConfigurationTest.java similarity index 100% rename from sdk/spring/azure-spring-cloud-storage/src/test/java/com/azure/spring/cloud/autoconfigure/storage/AzureStorageQueueAutoConfigurationTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/storage/AzureStorageQueueAutoConfigurationTest.java index b589c62533ff3..271d868cd6061 100644 --- a/sdk/spring/azure-spring-cloud-storage/src/test/java/com/azure/spring/cloud/autoconfigure/storage/AzureStorageQueueAutoConfigurationTest.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/storage/AzureStorageQueueAutoConfigurationTest.java @@ -15,8 +15,8 @@ import org.springframework.context.annotation.Configuration; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.mock; public class AzureStorageQueueAutoConfigurationTest { diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/cloudfoundry/environment/AzureCloudFoundryServiceApplicationTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloudfoundry/environment/AzureCloudFoundryServiceApplicationTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/cloudfoundry/environment/AzureCloudFoundryServiceApplicationTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/cloudfoundry/environment/AzureCloudFoundryServiceApplicationTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/keyvault/CaseSensitiveKeyVaultTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/keyvault/CaseSensitiveKeyVaultTest.java similarity index 92% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/keyvault/CaseSensitiveKeyVaultTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/keyvault/CaseSensitiveKeyVaultTest.java index f18385ae86748..16b256fce10eb 100644 --- a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/keyvault/CaseSensitiveKeyVaultTest.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/keyvault/CaseSensitiveKeyVaultTest.java @@ -13,7 +13,7 @@ import java.util.ArrayList; import java.util.LinkedHashMap; -import static com.azure.spring.utils.Constants.DEFAULT_REFRESH_INTERVAL_MS; +import static com.azure.spring.keyvault.KeyVaultEnvironmentPostProcessorHelper.DEFAULT_REFRESH_INTERVAL_MS; import static org.junit.jupiter.api.Assertions.assertEquals; public class CaseSensitiveKeyVaultTest { diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/keyvault/InitializerTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/keyvault/InitializerTest.java similarity index 87% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/keyvault/InitializerTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/keyvault/InitializerTest.java index feb169a3c1549..352c690083720 100644 --- a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/keyvault/InitializerTest.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/keyvault/InitializerTest.java @@ -3,8 +3,6 @@ package com.azure.spring.keyvault; -import com.azure.spring.utils.Constants; - import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -28,7 +26,7 @@ public void testAzureKvPropertySourceNotInitialized() { final MutablePropertySources sources = ((ConfigurableEnvironment) context.getEnvironment()).getPropertySources(); - assertFalse(sources.contains(Constants.AZURE_KEYVAULT_PROPERTYSOURCE_NAME), "PropertySources should not " + assertFalse(sources.contains(KeyVaultEnvironmentPostProcessorHelper.AZURE_KEYVAULT_PROPERTYSOURCE_NAME), "PropertySources should not " + "contains azurekv when enabled=false"); } } diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessorTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessorTest.java similarity index 58% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessorTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessorTest.java index 076636c5f111e..104f3ace2f958 100644 --- a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessorTest.java +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/keyvault/KeyVaultEnvironmentPostProcessorTest.java @@ -22,12 +22,18 @@ import java.util.HashMap; import java.util.Map; +import static com.azure.spring.keyvault.KeyVaultProperties.Property.AUTHORITY_HOST; import static com.azure.spring.keyvault.KeyVaultProperties.Property.CERTIFICATE_PATH; import static com.azure.spring.keyvault.KeyVaultProperties.Property.CLIENT_ID; import static com.azure.spring.keyvault.KeyVaultProperties.Property.CLIENT_KEY; +import static com.azure.spring.keyvault.KeyVaultProperties.Property.CLIENT_SECRET; +import static com.azure.spring.keyvault.KeyVaultProperties.Property.ORDER; import static com.azure.spring.keyvault.KeyVaultProperties.Property.TENANT_ID; +import static com.azure.spring.keyvault.KeyVaultProperties.Property.URI; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertNull; public class KeyVaultEnvironmentPostProcessorTest { private KeyVaultEnvironmentPostProcessorHelper keyVaultEnvironmentPostProcessorHelper; @@ -84,7 +90,7 @@ public void testGetCredentialsWhenMSIEnabledInAppService() { @Test public void testGetCredentialsWhenMSIEnabledInVMWithClientId() { - testProperties.put("azure.keyvault.client-id", "aaaa-bbbb-cccc-dddd"); + testProperties.put("spring.cloud.azure.keyvault.credential.client-id", "aaaa-bbbb-cccc-dddd"); propertySources.addLast(new MapPropertySource("Test_Properties", testProperties)); keyVaultEnvironmentPostProcessorHelper = new KeyVaultEnvironmentPostProcessorHelper(environment); @@ -113,7 +119,7 @@ public void postProcessorHasConfiguredOrder() { public void postProcessorOrderConfigurable() { final ApplicationContextRunner contextRunner = new ApplicationContextRunner() .withConfiguration(AutoConfigurations.of(OrderedProcessConfig.class)) - .withPropertyValues("azure.keyvault.uri=fakeuri", "azure.keyvault.enabled=true"); + .withPropertyValues("spring.cloud.azure.keyvault.uri=fakeuri", "spring.cloud.azure.keyvault.enabled=true"); contextRunner.run(context -> { assertThat("Configured order for KeyVaultEnvironmentPostProcessor is different with default order " @@ -130,13 +136,13 @@ public void postProcessorOrderConfigurable() { */ @Test public void testMultipleKeyVaults() { - testProperties.put("azure.keyvault.order", "myvault, myvault2"); - testProperties.put("azure.keyvault.myvault.client-id", "aaaa-bbbb-cccc-dddd"); - testProperties.put("azure.keyvault.myvault.client-key", "mySecret"); - testProperties.put("azure.keyvault.myvault.tenant-id", "myid"); - testProperties.put("azure.keyvault.myvault2.client-id", "aaaa-bbbb-cccc-dddd"); - testProperties.put("azure.keyvault.myvault2.client-key", "mySecret"); - testProperties.put("azure.keyvault.myvault2.tenant-id", "myid"); + testProperties.put("spring.cloud.azure.keyvault.order", "myvault, myvault2"); + testProperties.put("spring.cloud.azure.keyvault.myvault.credential.client-id", "aaaa-bbbb-cccc-dddd"); + testProperties.put("spring.cloud.azure.keyvault.myvault.credential.client-secret", "mySecret"); + testProperties.put("spring.cloud.azure.keyvault.myvault.credential.tenant-id", "myid"); + testProperties.put("spring.cloud.azure.keyvault.myvault2.credential.client-id", "aaaa-bbbb-cccc-dddd"); + testProperties.put("spring.cloud.azure.keyvault.myvault2.credential.client-secret", "mySecret"); + testProperties.put("spring.cloud.azure.keyvault.myvault2.credential.tenant-id", "myid"); propertySources.addLast(new MapPropertySource("Test_Properties", testProperties)); keyVaultEnvironmentPostProcessorHelper = new KeyVaultEnvironmentPostProcessorHelper(environment); @@ -147,6 +153,72 @@ public void testMultipleKeyVaults() { final TokenCredential credentials2 = keyVaultEnvironmentPostProcessorHelper.getCredentials("myvault2"); assertThat(credentials2, IsInstanceOf.instanceOf(ClientSecretCredential.class)); } + + @Test + public void testGetCredentialFromKeyVaultProperties() { + testProperties.put("spring.cloud.azure.keyvault.credential.client-id", "aaaa-bbbb-cccc-dddd"); + testProperties.put("spring.cloud.azure.keyvault.credential.client-secret", "mySecret"); + testProperties.put("spring.cloud.azure.keyvault.credential.tenant-id", "myid"); + propertySources.addLast(new MapPropertySource("Test_Properties", testProperties)); + keyVaultEnvironmentPostProcessorHelper = new KeyVaultEnvironmentPostProcessorHelper(environment); + + final TokenCredential credentials = keyVaultEnvironmentPostProcessorHelper.getCredentials(); + + assertThat(credentials, IsInstanceOf.instanceOf(ClientSecretCredential.class)); + } + + @Test + public void testGetCredentialFromCommonProperties() { + testProperties.put("spring.cloud.azure.credential.client-id", "fake-client-id"); + testProperties.put("spring.cloud.azure.credential.client-secret", "fake-client-secret"); + testProperties.put("spring.cloud.azure.credential.tenant-id", "fake-tenant-id"); + propertySources.addLast(new MapPropertySource("Test_Properties", testProperties)); + + keyVaultEnvironmentPostProcessorHelper = new KeyVaultEnvironmentPostProcessorHelper(environment); + + final TokenCredential credentials = keyVaultEnvironmentPostProcessorHelper.getCredentials(); + + assertThat(credentials, IsInstanceOf.instanceOf(ClientSecretCredential.class)); + } + + @Test + public void testGetPropertyValue() { + testProperties.put("spring.cloud.azure.credential.client-id", "client1"); + + testProperties.put("spring.cloud.azure.keyvault.credential.client-secret", "secret2"); + + testProperties.put("spring.cloud.azure.credential.tenant-id", "tenant1"); + testProperties.put("spring.cloud.azure.keyvault.credential.tenant-id", "tenant2"); + + testProperties.put("spring.cloud.azure.environment.authority-host", "host1"); + testProperties.put("spring.cloud.azure.keyvault.environment.authority-host", "host2"); + + testProperties.put("spring.cloud.azure.credential.client-certificate-path", "cert1"); + testProperties.put("spring.cloud.azure.keyvault.mykeyvault.credential.client-certificate-path", "cert2"); + + testProperties.put("spring.cloud.azure.keyvault.uri", "uri1"); + + propertySources.addLast(new MapPropertySource("Test_Properties", testProperties)); + + keyVaultEnvironmentPostProcessorHelper = new KeyVaultEnvironmentPostProcessorHelper(environment); + + String clientId = keyVaultEnvironmentPostProcessorHelper.getPropertyValue("", CLIENT_ID); + String clientSecert = keyVaultEnvironmentPostProcessorHelper.getPropertyValue("", CLIENT_SECRET); + String tenantId = keyVaultEnvironmentPostProcessorHelper.getPropertyValue("", TENANT_ID); + String authorityHost = keyVaultEnvironmentPostProcessorHelper.getPropertyValue("", AUTHORITY_HOST); + String certificatePath = keyVaultEnvironmentPostProcessorHelper.getPropertyValue("mykeyvault", CERTIFICATE_PATH); + String uri = keyVaultEnvironmentPostProcessorHelper.getPropertyValue("", URI); + String order = keyVaultEnvironmentPostProcessorHelper.getPropertyValue("", ORDER); + + assertEquals("client1", clientId); + assertEquals("secret2", clientSecert); + assertEquals("tenant2", tenantId); + assertNotEquals("host1", authorityHost); + assertEquals("cert2", certificatePath); + assertEquals("uri1", uri); + assertNull(order); + } + } @Configuration diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/keyvault/KeyVaultOperationUnitTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/keyvault/KeyVaultOperationUnitTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/keyvault/KeyVaultOperationUnitTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/keyvault/KeyVaultOperationUnitTest.java diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/keyvault/KeyVaultPropertySourceUnitTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/keyvault/KeyVaultPropertySourceUnitTest.java similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/keyvault/KeyVaultPropertySourceUnitTest.java rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/keyvault/KeyVaultPropertySourceUnitTest.java diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/keyvault/PostLegacyPropertyProcessorTest.java b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/keyvault/PostLegacyPropertyProcessorTest.java new file mode 100644 index 0000000000000..f84c436210c80 --- /dev/null +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/java/com/azure/spring/keyvault/PostLegacyPropertyProcessorTest.java @@ -0,0 +1,254 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +package com.azure.spring.keyvault; + +import com.azure.spring.autoconfigure.unity.PreLegacyPropertyEnvironmentPostProcessor; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.parallel.Execution; +import org.junit.jupiter.api.parallel.ExecutionMode; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.WebApplicationType; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.env.EnvironmentPostProcessor; +import org.springframework.boot.test.system.CapturedOutput; +import org.springframework.boot.test.system.OutputCaptureExtension; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.core.env.ConfigurableEnvironment; +import org.springframework.core.env.MutablePropertySources; +import org.springframework.core.env.PropertiesPropertySource; +import org.springframework.core.env.PropertySource; + +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; + +import static com.azure.spring.autoconfigure.unity.PreLegacyPropertyEnvironmentPostProcessor.toLogString; +import static com.azure.spring.keyvault.PostLegacyPropertyEnvironmentPostProcessor.toLogString; +import static com.azure.spring.keyvault.KeyVaultEnvironmentPostProcessorHelper.AZURE_KEYVAULT_PROPERTYSOURCE_NAME; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.when; +import static org.springframework.core.env.StandardEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME; + +@Execution(ExecutionMode.SAME_THREAD) +@ExtendWith(OutputCaptureExtension.class) +public class PostLegacyPropertyProcessorTest { + + private static final String KEYVAULT_PROPERTY_SOURCE_FIRST = "first"; + private static final String KEYVAULT_PROPERTY_SOURCE_SECOND = "second"; + private PostLegacyPropertyEnvironmentPostProcessor processor = new PostLegacyPropertyEnvironmentPostProcessor(); + private AutoCloseable closeable; + + @Mock + private KeyVaultOperation keyVaultOperationOne; + + @Mock + private KeyVaultOperation keyVaultOperationTwo; + + @BeforeEach + public void setup() { + closeable = MockitoAnnotations.openMocks(this); + } + + @AfterEach + public void close() throws Exception { + closeable.close(); + } + + @Test + public void postProcessorHasConfiguredOrder() { + assertEquals(processor.getOrder(), PostLegacyPropertyEnvironmentPostProcessor.DEFAULT_ORDER); + } + + @Test + public void testMappingSingleKvSources(CapturedOutput output) { + when(keyVaultOperationOne.getProperty("azure.cosmos.uri")).thenReturn("one"); + when(keyVaultOperationOne.getProperty("spring.cloud.azure.cosmos.uri")).thenReturn(null); + + List> sourceList = new ArrayList<>(); + buildNonKvPropertySource(sourceList); + buildKvPropertySource(sourceList); + + ConfigurableEnvironment environment = getEnvironment(sourceList, processor); + MutablePropertySources propertySources = environment.getPropertySources(); + PropertySource kvPropertySource = propertySources.get(KEYVAULT_PROPERTY_SOURCE_FIRST); + PropertySource postPropertySource = propertySources.get(processor.getClass().getName()); + + assertNotNull(kvPropertySource); + assertNotNull(postPropertySource); + assertEquals("one", environment.getProperty("spring.cloud.azure.cosmos.uri")); + assertTrue(propertySources.precedenceOf(kvPropertySource) > propertySources.precedenceOf(postPropertySource)); + assertTrue(output.getOut().contains( + toLogString("azure.cosmos.uri", "spring.cloud.azure.cosmos.uri", KEYVAULT_PROPERTY_SOURCE_FIRST))); + } + + @Test + public void testMappingSingleKvSourcesFail() { + when(keyVaultOperationOne.getProperty("azure.cosmos.uri")).thenReturn("one"); + when(keyVaultOperationOne.getProperty("spring.cloud.azure.cosmos.uri")).thenReturn("two"); + + List> sourceList = new ArrayList>(); + buildNonKvPropertySource(sourceList); + buildKvPropertySource(sourceList); + + ConfigurableEnvironment environment = getEnvironment(sourceList, processor); + assertFalse(environment.getPropertySources().contains(processor.getClass().getName())); + assertNotEquals("one", environment.getProperty("spring.cloud.azure.cosmos.uri")); + } + + @Test + public void testNoKvSources() { + List> sourceList = new ArrayList>(); + buildNonKvPropertySource(sourceList); + + ConfigurableEnvironment environment = getEnvironment(sourceList, processor); + assertFalse(environment.getPropertySources().contains(processor.getClass().getName())); + } + + @Test + public void testMappingMultipleKvSources(CapturedOutput output) { + when(keyVaultOperationOne.getProperty("azure.cosmos.uri")).thenReturn("one"); + when(keyVaultOperationTwo.getProperty("azure.cosmos.uri")).thenReturn("two"); + when(keyVaultOperationTwo.getProperty("spring.cloud.azure.cosmos.uri")).thenReturn("three"); + + List> sourceList = new ArrayList>(); + buildNonKvPropertySource(sourceList); + buildKvPropertySource(sourceList); + + ConfigurableEnvironment environment = getEnvironment(sourceList, processor); + assertEquals("one", environment.getProperty("spring.cloud.azure.cosmos.uri")); + assertEquals("three", environment.getPropertySources().get(KEYVAULT_PROPERTY_SOURCE_SECOND) + .getProperty("spring.cloud.azure.cosmos.uri")); + assertTrue(output.getOut().contains( + toLogString("azure.cosmos.uri", "spring.cloud.azure.cosmos.uri", KEYVAULT_PROPERTY_SOURCE_FIRST))); + assertFalse(output.getOut().contains( + toLogString("azure.cosmos.uri", "spring.cloud.azure.cosmos.uri", KEYVAULT_PROPERTY_SOURCE_SECOND))); + + } + + @Test + public void testMappingMultipleKvSourcesFail() { + when(keyVaultOperationOne.getProperty("azure.cosmos.uri")).thenReturn("one"); + when(keyVaultOperationOne.getProperty("spring.cloud.azure.cosmos.uri")).thenReturn("three"); + when(keyVaultOperationTwo.getProperty("azure.cosmos.uri")).thenReturn("two"); + when(keyVaultOperationTwo.getProperty("spring.cloud.azure.cosmos.uri")).thenReturn("four"); + + List> sourceList = new ArrayList>(); + buildNonKvPropertySource(sourceList); + buildKvPropertySource(sourceList); + + ConfigurableEnvironment environment = getEnvironment(sourceList, processor); + assertFalse(environment.getPropertySources().contains(processor.getClass().getName())); + assertEquals("three", environment.getProperty("spring.cloud.azure.cosmos.uri")); + } + + private List> buildNonKvPropertySource(List> sourceList) { + Properties test = new Properties(); + test.setProperty("spring.cloud.azure.keyvault.order", "first, second"); + test.setProperty("azure.cosmos.key", "fake"); + sourceList.add(new PropertiesPropertySource("test", test)); + return sourceList; + } + + private List> buildKvPropertySource(List> sourceList) { + KeyVaultPropertySource kvSourceOne = new KeyVaultPropertySource(KEYVAULT_PROPERTY_SOURCE_FIRST, keyVaultOperationOne); + KeyVaultPropertySource kvSourceTwo = new KeyVaultPropertySource(KEYVAULT_PROPERTY_SOURCE_SECOND, keyVaultOperationTwo); + sourceList.add(kvSourceTwo); + sourceList.add(kvSourceOne); + return sourceList; + } + + private ConfigurableEnvironment getEnvironment(List> sourceList, + EnvironmentPostProcessor environmentPostProcessor) { + SpringApplication springApplication = getSpringApplication(environmentPostProcessor.getClass()); + ConfigurableApplicationContext context = springApplication.run(); + ConfigurableEnvironment configurableEnvironment = context.getEnvironment(); + sourceList.stream().forEach(source -> + configurableEnvironment.getPropertySources().addAfter(SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME, source)); + environmentPostProcessor.postProcessEnvironment(configurableEnvironment, springApplication); + context.close(); + + return configurableEnvironment; + } + + protected SpringApplication getSpringApplication(Class... sources) { + return new SpringApplicationBuilder().sources(sources).web(WebApplicationType.NONE).build(); + } + + @Test + public void testBothProcessorsConfigured(CapturedOutput output) { + when(keyVaultOperationOne.getProperty("azure.storage.account-key")).thenReturn("LegacyKey"); + when(keyVaultOperationOne.getProperty("azure.cosmos.uri")).thenReturn("LegacyUri"); + when(keyVaultOperationOne.getProperty("spring.cloud.azure.storage.account-key")).thenReturn("CurrentKey"); + when(keyVaultOperationOne.getProperty("spring.cloud.azure.keyvault.credential.client-id")).thenReturn("CurrentId"); + + Properties properties = new Properties(); + properties.setProperty("azure.storage.account-key", "fakekey"); + properties.setProperty("azure.cosmos.uri", "fakeuri"); + properties.setProperty("azure.keyvault.client-id", "fakeid"); + properties.setProperty("azure.keyvault.client-key", "fakesecret"); + PropertiesPropertySource propertySource = new PropertiesPropertySource("test", properties); + ConfigurableEnvironment environment = getEnvironment(propertySource, + new PreLegacyPropertyEnvironmentPostProcessor(), processor); + + MutablePropertySources propertySources = environment.getPropertySources(); + PropertySource prePropertySource = + propertySources.get(PreLegacyPropertyEnvironmentPostProcessor.class.getName()); + PropertySource postPropertySource = propertySources.get(processor.getClass().getName()); + + assertNotNull(prePropertySource); + assertNotNull(postPropertySource); + assertTrue(propertySources.precedenceOf(prePropertySource) > propertySources.precedenceOf(postPropertySource)); + + assertEquals("fakekey", prePropertySource.getProperty("spring.cloud.azure.storage.account-key")); + assertEquals("fakeuri", prePropertySource.getProperty("spring.cloud.azure.cosmos.uri")); + assertEquals("fakeid", prePropertySource.getProperty("spring.cloud.azure.keyvault.credential.client-id")); + assertEquals("fakesecret", prePropertySource.getProperty("spring.cloud.azure.keyvault.credential.client-secret")); + + assertNull(postPropertySource.getProperty("spring.cloud.azure.storage.account-key")); + assertEquals("LegacyUri", postPropertySource.getProperty("spring.cloud.azure.cosmos.uri")); + assertNull(postPropertySource.getProperty("spring.cloud.azure.keyvault.credential.client-id")); + assertNull(postPropertySource.getProperty("spring.cloud.azure.keyvault.credential.client-secret")); + + assertEquals("CurrentKey", environment.getProperty("spring.cloud.azure.storage.account-key")); + assertEquals("LegacyUri", environment.getProperty("spring.cloud.azure.cosmos.uri")); + assertEquals("CurrentId", environment.getProperty("spring.cloud.azure.keyvault.credential.client-id")); + assertEquals("fakesecret", environment.getProperty("spring.cloud.azure.keyvault.credential.client-secret")); + + assertTrue(output.getOut().contains( + toLogString("azure.cosmos.uri", "spring.cloud.azure.cosmos.uri"))); + assertTrue(output.getOut().contains( + toLogString("azure.cosmos.uri", "spring.cloud.azure.cosmos.uri", AZURE_KEYVAULT_PROPERTYSOURCE_NAME))); + assertFalse(output.getOut().contains( + toLogString("azure.storage.account-key", "spring.cloud.azure.storage.account-key", AZURE_KEYVAULT_PROPERTYSOURCE_NAME))); + + + } + + private ConfigurableEnvironment getEnvironment(PropertiesPropertySource propertiesPropertySource, + PreLegacyPropertyEnvironmentPostProcessor preProcessor, + PostLegacyPropertyEnvironmentPostProcessor postProcessor) { + SpringApplication springApplication = getSpringApplication(postProcessor.getClass(), preProcessor.getClass()); + + ConfigurableApplicationContext context = springApplication.run(); + ConfigurableEnvironment configurableEnvironment = context.getEnvironment(); + configurableEnvironment.getPropertySources().addLast(propertiesPropertySource); + preProcessor.postProcessEnvironment(configurableEnvironment, springApplication); + + configurableEnvironment.getPropertySources().addAfter(SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME, + new KeyVaultPropertySource(AZURE_KEYVAULT_PROPERTYSOURCE_NAME, keyVaultOperationOne)); + postProcessor.postProcessEnvironment(configurableEnvironment, springApplication); + context.close(); + + return configurableEnvironment; + } +} diff --git a/sdk/spring/azure-spring-boot/src/test/resources/aad-backend-oauth2-minimum.properties b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/aad-backend-oauth2-minimum.properties similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/resources/aad-backend-oauth2-minimum.properties rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/aad-backend-oauth2-minimum.properties diff --git a/sdk/spring/azure-spring-boot/src/test/resources/aad.enable.config b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/aad.enable.config similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/resources/aad.enable.config rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/aad.enable.config diff --git a/sdk/spring/azure-spring-boot/src/test/resources/aad/microsoft-graph-user-groups.json b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/aad/microsoft-graph-user-groups.json similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/resources/aad/microsoft-graph-user-groups.json rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/aad/microsoft-graph-user-groups.json diff --git a/sdk/spring/azure-spring-boot/src/test/resources/aadb2c.enable.config b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/aadb2c.enable.config similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/resources/aadb2c.enable.config rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/aadb2c.enable.config diff --git a/sdk/spring/azure-spring-boot/src/test/resources/application.properties b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/application.properties similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/resources/application.properties rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/application.properties diff --git a/sdk/spring/azure-spring-boot/src/test/resources/cloudfoundry/vcap1.json b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/cloudfoundry/vcap1.json similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/resources/cloudfoundry/vcap1.json rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/cloudfoundry/vcap1.json diff --git a/sdk/spring/azure-spring-boot/src/test/resources/cloudfoundry/vcap2.json b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/cloudfoundry/vcap2.json similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/resources/cloudfoundry/vcap2.json rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/cloudfoundry/vcap2.json diff --git a/sdk/spring/azure-spring-boot/src/test/resources/cloudfoundry/vcap3.json b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/cloudfoundry/vcap3.json similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/resources/cloudfoundry/vcap3.json rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/cloudfoundry/vcap3.json diff --git a/sdk/spring/azure-spring-boot/src/test/resources/cosmos.enable.config b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/cosmos.enable.config similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/resources/cosmos.enable.config rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/cosmos.enable.config diff --git a/sdk/spring/azure-spring-boot/src/test/resources/fake-pfx-cert.pfx b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/fake-pfx-cert.pfx similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/resources/fake-pfx-cert.pfx rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/fake-pfx-cert.pfx diff --git a/sdk/spring/azure-spring-boot/src/test/resources/gremlin.enable.config b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/gremlin.enable.config similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/resources/gremlin.enable.config rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/gremlin.enable.config diff --git a/sdk/spring/azure-spring-boot/src/test/resources/jwt-bad-issuer.txt b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/jwt-bad-issuer.txt similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/resources/jwt-bad-issuer.txt rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/jwt-bad-issuer.txt diff --git a/sdk/spring/azure-spring-boot/src/test/resources/jwt-null-issuer.txt b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/jwt-null-issuer.txt similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/resources/jwt-null-issuer.txt rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/jwt-null-issuer.txt diff --git a/sdk/spring/azure-spring-boot/src/test/resources/jwt-signed.txt b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/jwt-signed.txt similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/resources/jwt-signed.txt rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/jwt-signed.txt diff --git a/sdk/spring/azure-spring-boot/src/test/resources/jwt-valid-issuer.txt b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/jwt-valid-issuer.txt similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/resources/jwt-valid-issuer.txt rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/jwt-valid-issuer.txt diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/logback-test.xml b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/logback-test.xml index ae0c6e60c13c8..c0330fdf75b86 100644 --- a/sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/logback-test.xml +++ b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/logback-test.xml @@ -1,12 +1,17 @@ - + + true + + + - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n - - + + + diff --git a/sdk/spring/azure-spring-boot/src/test/resources/nopwdcert.pfx b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/nopwdcert.pfx similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/resources/nopwdcert.pfx rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/nopwdcert.pfx diff --git a/sdk/spring/azure-spring-boot/src/test/resources/servicebusjms.enable.config b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/servicebusjms.enable.config similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/resources/servicebusjms.enable.config rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/servicebusjms.enable.config diff --git a/sdk/spring/azure-spring-boot/src/test/resources/storage.enable.config b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/storage.enable.config similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/resources/storage.enable.config rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/storage.enable.config diff --git a/sdk/spring/azure-spring-boot/src/test/resources/test-public-key.txt b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/test-public-key.txt similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/resources/test-public-key.txt rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/test-public-key.txt diff --git a/sdk/spring/azure-spring-boot/src/test/resources/testkeyvault.pfx b/sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/testkeyvault.pfx similarity index 100% rename from sdk/spring/azure-spring-boot/src/test/resources/testkeyvault.pfx rename to sdk/spring/azure-spring-cloud-autoconfigure/src/test/resources/testkeyvault.pfx diff --git a/sdk/spring/azure-spring-cloud-context/pom.xml b/sdk/spring/azure-spring-cloud-context/pom.xml index 8afaf42a82d0a..4568a91421821 100644 --- a/sdk/spring/azure-spring-cloud-context/pom.xml +++ b/sdk/spring/azure-spring-cloud-context/pom.xml @@ -25,63 +25,28 @@ org.springframework - spring-context - 5.3.9 - - - org.springframework.boot - spring-boot-starter-aop - 2.5.3 - - - - org.springframework - spring-context-support - 5.3.9 - true - - - commons-io - commons-io - 2.5 - - - org.springframework.boot - spring-boot-configuration-processor - 2.5.3 - true + spring-core + 5.3.9 - - com.azure.resourcemanager - azure-resourcemanager - 2.7.0 + com.azure + azure-identity + 1.3.5 + compile - - com.azure.spring - azure-identity-spring - 1.8.0-beta.1 - - - - - org.springframework.boot - spring-boot-starter-test - 2.5.3 + org.mockito + mockito-core + 3.9.0 test - - - com.google.code.findbugs - jsr305 - 3.0.2 - provided + org.junit.jupiter + junit-jupiter + 5.7.2 + test @@ -95,76 +60,24 @@ - commons-io:commons-io:[2.5] - org.springframework.boot:spring-boot-configuration-processor:[2.5.3] - org.springframework.boot:spring-boot-starter-aop:[2.5.3] - org.springframework:spring-context-support:[5.3.9] - org.springframework:spring-context:[5.3.9] + org.springframework:spring-core:[5.3.9] + + org.apache.maven.plugins + maven-jar-plugin + 3.1.2 + + + + true + + + + - - - - annotation-process-for-java-8 - - [1.8,9) - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.8.1 - - - annotation-process-for-java-8 - - compile - - - - -proc:only - - - - - - - - - - annotation-process-for-java-11 - - [11,) - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.8.1 - - - annotation-process-for-java-11 - - compile - - - - -proc:only - - 11 - - - - - - - - diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/autoconfigure/context/AzureContextAutoConfiguration.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/autoconfigure/context/AzureContextAutoConfiguration.java deleted file mode 100644 index ccc7b550085c6..0000000000000 --- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/autoconfigure/context/AzureContextAutoConfiguration.java +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.spring.cloud.autoconfigure.context; - -import com.azure.core.credential.TokenCredential; -import com.azure.core.management.profile.AzureProfile; -import com.azure.resourcemanager.AzureResourceManager; -import com.azure.spring.cloud.context.core.api.CredentialsProvider; -import com.azure.spring.cloud.context.core.config.AzureProperties; -import com.azure.spring.cloud.context.core.impl.ResourceGroupManager; -import com.azure.spring.identity.DefaultSpringCredentialBuilder; -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.env.Environment; - -/** - * Auto-config to provide default {@link CredentialsProvider} for all Azure services - * - * @author Warren Zhu - */ -@Configuration -@EnableConfigurationProperties(AzureProperties.class) -@ConditionalOnClass(AzureResourceManager.class) -@ConditionalOnProperty(prefix = "spring.cloud.azure", value = { "resource-group" }) -public class AzureContextAutoConfiguration { - - /** - * Create an {@link AzureResourceManager} bean. - * - * @param credential The credential to connect to Azure. - * @param profile The azure profile. - * @return An AzureResourceManager object. - */ - @Bean - @ConditionalOnMissingBean - public AzureResourceManager azureResourceManager(TokenCredential credential, AzureProfile profile) { - // TODO (xiada) Do we need to pass our User-Agent to with the management sdk? - return AzureResourceManager.configure() - .authenticate(credential, profile) - .withDefaultSubscription(); - } - - @Bean - @ConditionalOnMissingBean - public AzureProfile azureProfile(AzureProperties azureProperties) { - return new AzureProfile(azureProperties.getTenantId(), azureProperties.getSubscriptionId(), - azureProperties.getEnvironment().getAzureEnvironment()); - } - - @Bean - @ConditionalOnMissingBean - public TokenCredential credential(Environment environment) { - return new DefaultSpringCredentialBuilder().environment(environment) - .alternativePrefix(AzureProperties.PREFIX) - .build(); - } - - @Bean - @ConditionalOnMissingBean - @ConditionalOnBean(AzureResourceManager.class) - public ResourceGroupManager resourceGroupManager(AzureResourceManager azureResourceManager, - AzureProperties azureProperties) { - ResourceGroupManager resourceGroupManager = new ResourceGroupManager(azureResourceManager, azureProperties); - if (azureProperties.isAutoCreateResources() - && !resourceGroupManager.exists(azureProperties.getResourceGroup())) { - resourceGroupManager.create(azureProperties.getResourceGroup()); - } - return resourceGroupManager; - } -} diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/autoconfigure/context/AzureEnvironmentAutoConfiguration.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/autoconfigure/context/AzureEnvironmentAutoConfiguration.java deleted file mode 100644 index 57922173fefd4..0000000000000 --- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/autoconfigure/context/AzureEnvironmentAutoConfiguration.java +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.spring.cloud.autoconfigure.context; - -import com.azure.spring.cloud.context.core.api.EnvironmentProvider; -import com.azure.spring.cloud.context.core.config.AzureProperties; -import com.azure.spring.cloud.context.core.impl.DefaultEnvironmentProvider; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - * Auto-config to provide default {@link EnvironmentProvider} for all Azure services - * - * @author Warren Zhu - */ -@Configuration -public class AzureEnvironmentAutoConfiguration { - - @Bean - @ConditionalOnMissingBean - public EnvironmentProvider environmentProvider(@Autowired(required = false) AzureProperties azureProperties) { - DefaultEnvironmentProvider defaultEnvironmentProvider = new DefaultEnvironmentProvider(); - - if (azureProperties != null) { - defaultEnvironmentProvider.setEnvironment(azureProperties.getEnvironment().getAzureEnvironment()); - } - - return defaultEnvironmentProvider; - } - -} diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/api/CredentialSupplier.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/api/CredentialSupplier.java deleted file mode 100644 index 55661622cfc71..0000000000000 --- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/api/CredentialSupplier.java +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.spring.cloud.context.core.api; - -/** - * An interface meant to be implemented by configuration properties POJOs that store information about Azure - * credentials. - * - * @author Warren Zhu - */ -public interface CredentialSupplier { - - String getClientId(); - - String getClientSecret(); - - boolean isMsiEnabled(); - - String getTenantId(); - - String getSubscriptionId(); -} diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/api/CredentialsProvider.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/api/CredentialsProvider.java deleted file mode 100644 index 74b5d7547da34..0000000000000 --- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/api/CredentialsProvider.java +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.spring.cloud.context.core.api; - -import com.azure.core.credential.TokenCredential; - -/** - * Interface to provide the {@link TokenCredential} that will be used to call the service. - * - * @author Warren Zhu - */ -public interface CredentialsProvider { - - TokenCredential getCredential(); -} diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/api/EnvironmentProvider.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/api/EnvironmentProvider.java deleted file mode 100644 index e4ae194449085..0000000000000 --- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/api/EnvironmentProvider.java +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.spring.cloud.context.core.api; - -import com.azure.core.management.AzureEnvironment; - -/** - * Interface to provide the {@link AzureEnvironment} - * - * @author Warren Zhu - */ -public interface EnvironmentProvider { - - AzureEnvironment getEnvironment(); - -} diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/config/package-info.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/config/package-info.java deleted file mode 100644 index 21e74e7ad78ed..0000000000000 --- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/config/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -/** - * Package com.azure.spring.cloud.context.core.config; - */ -package com.azure.spring.cloud.context.core.config; diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/enums/AzureEnvironments.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/enums/AzureEnvironments.java deleted file mode 100644 index 9cf54879814f3..0000000000000 --- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/enums/AzureEnvironments.java +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.spring.cloud.context.core.enums; - -import com.azure.core.management.AzureEnvironment; - -/** - * Enum to define all Azure environments: Azure, Azure China... - */ -public enum AzureEnvironments { - - Azure(AzureEnvironment.AZURE), - AzureChina(AzureEnvironment.AZURE_CHINA), - AzureUSGovernment(AzureEnvironment.AZURE_US_GOVERNMENT), - AZURE_GERMANY(AzureEnvironment.AZURE_GERMANY); - - private final AzureEnvironment azureEnvironment; - - AzureEnvironments(AzureEnvironment environment) { - this.azureEnvironment = environment; - } - - public AzureEnvironment getAzureEnvironment() { - return azureEnvironment; - } -} diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/DefaultCredentialsProvider.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/DefaultCredentialsProvider.java deleted file mode 100644 index ff6b86af31ce2..0000000000000 --- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/DefaultCredentialsProvider.java +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.spring.cloud.context.core.impl; - -import com.azure.core.credential.TokenCredential; -import com.azure.identity.ClientSecretCredentialBuilder; -import com.azure.identity.ManagedIdentityCredentialBuilder; -import com.azure.spring.cloud.context.core.api.CredentialsProvider; -import com.azure.spring.cloud.context.core.config.AzureProperties; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * A {@link CredentialsProvider} implementation that provides credentials based on user-provided properties and - * defaults. - * - * @author Warren Zhu - */ -public class DefaultCredentialsProvider implements CredentialsProvider { - - private static final Logger LOGGER = LoggerFactory.getLogger(DefaultCredentialsProvider.class); - - private final TokenCredential credentials; - - public DefaultCredentialsProvider(AzureProperties azureProperties) { - this.credentials = initCredentials(azureProperties); - } - - private TokenCredential initCredentials(AzureProperties azureProperties) { - final String clientId = azureProperties.getClientId(); - final String clientSecret = azureProperties.getClientSecret(); - final String tenantId = azureProperties.getTenantId(); - - if (clientId != null && clientSecret != null && tenantId != null) { - LOGGER.debug("Will use ClientSecretCredential"); - return new ClientSecretCredentialBuilder() - .clientId(clientId) - .clientSecret(clientSecret) - .tenantId(tenantId) - .authorityHost(azureProperties.getEnvironment().getAzureEnvironment().getActiveDirectoryEndpoint()) - .build(); - } - - if (azureProperties.isMsiEnabled()) { - final String managedIdentityClientId = azureProperties.getClientId(); - - if (managedIdentityClientId != null) { - LOGGER.debug("Will use MSI credentials with specified clientId"); - return new ManagedIdentityCredentialBuilder().clientId(managedIdentityClientId).build(); - } - } - - LOGGER.debug("Will use MSI credentials"); - return new ManagedIdentityCredentialBuilder().build(); - } - - @Override - public TokenCredential getCredential() { - return this.credentials; - } -} diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/DefaultEnvironmentProvider.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/DefaultEnvironmentProvider.java deleted file mode 100644 index ec57c47b95d3c..0000000000000 --- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/DefaultEnvironmentProvider.java +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.spring.cloud.context.core.impl; - -import com.azure.core.management.AzureEnvironment; -import com.azure.spring.cloud.context.core.api.EnvironmentProvider; -import com.azure.spring.cloud.context.core.config.AzureProperties; - -/** - * A {@link EnvironmentProvider} implementation that based on {@link - * AzureProperties}. - * - * @author Warren Zhu - */ -public class DefaultEnvironmentProvider implements EnvironmentProvider { - - private AzureEnvironment environment = AzureEnvironment.AZURE; - - @Override - public AzureEnvironment getEnvironment() { - return environment; - } - - public void setEnvironment(AzureEnvironment environment) { - this.environment = environment; - } -} diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util/Constants.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util/Constants.java deleted file mode 100644 index a475e3542a74f..0000000000000 --- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util/Constants.java +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -package com.azure.spring.cloud.context.core.util; - -/** - * The User Agent constants. - */ -public class Constants { - - // for the User-Agent header set in track2 SDKs - private static final String SNAPSHOT_VERSION = "snapshot"; - private static final String AZURE = "az"; - private static final String SPRING_CLOUD = "sc"; - private static final String SPRING_STREAMS = "ss"; - private static final String SPRING_INTEGRATION = "si"; - private static final String KEY_VAULT = "kv"; - private static final String STORAGE_BLOBS = "sb"; - private static final String STORAGE_FILE_SHARE = "sf"; - private static final String STORAGE_QUEUE = "sq"; - private static final String EVENT_HUB = "eh"; - private static final String SERVICE_BUS = "bus"; - private static final String APP_CONFIGURATION = "cfg"; - - - public static final String SPRING_CLOUD_VERSION = SNAPSHOT_VERSION; - - // the max length of application id is 24 - public static final String SPRING_INTEGRATION_STORAGE_QUEUE_APPLICATION_ID = - String.join("-", AZURE, SPRING_INTEGRATION, STORAGE_QUEUE) + "/" + SPRING_CLOUD_VERSION; - - public static final String SPRING_EVENT_HUB_APPLICATION_ID = - String.join("-", AZURE, SPRING_CLOUD, EVENT_HUB) + "/" + SPRING_CLOUD_VERSION; - public static final String SPRING_SERVICE_BUS_APPLICATION_ID = - String.join("-", AZURE, SPRING_CLOUD, SERVICE_BUS) + "/" + SPRING_CLOUD_VERSION; -} diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/ApplicationId.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/core/ApplicationId.java similarity index 73% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/ApplicationId.java rename to sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/core/ApplicationId.java index e4ecc3147b37f..204141f943c6f 100644 --- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/ApplicationId.java +++ b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/core/ApplicationId.java @@ -1,12 +1,12 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -package com.azure.spring.utils; +package com.azure.spring.core; import java.util.Optional; /** - * Util class for ApplicationId + * Util class for ApplicationId perfix */ public class ApplicationId { // There is 24 char limitation about the app id. So some abbreviation needs to be applied: @@ -15,25 +15,20 @@ public class ApplicationId { // sc: for Spring Cloud // sd: for Spring Data // ss: for Spring Streams + // si: for Spring Integration // kv: for Key Vault // se: for Security // jca: for JCA // sb: for Storage Blobs // sf: for Storage Files + // sq: for Storage Queue // eh: for Event Hub // bus: for Service Bus // cfg: for App Config // cos: for Cosmos // aad: for AAD // b2c: for AAD B2C - public static final String VERSION = Optional.of(ApplicationId.class) - .map(Class::getPackage) - .map(Package::getImplementationVersion) - .orElse("unknown"); - public static final String AZURE_SPRING_KEY_VAULT = "az-sp-kv/" + VERSION; - public static final String AZURE_SPRING_SERVICE_BUS = "az-sp-bus/" + VERSION; - public static final String AZURE_SPRING_STORAGE_BLOB = "az-sp-sb/" + VERSION; - public static final String AZURE_SPRING_STORAGE_FILES = "az-sp-sf/" + VERSION; + /** * AZURE_SPRING_AAD does not contain VERSION, because AAD server support 2 headers: * 1. x-client-SKU; @@ -41,5 +36,16 @@ public class ApplicationId { */ public static final String AZURE_SPRING_AAD = "az-sp-aad"; public static final String AZURE_SPRING_B2C = "az-sp-b2c"; + public static final String AZURE_SPRING_EVENT_HUB = "az-sc-eh/;"; + public static final String AZURE_SPRING_KEY_VAULT = "az-sp-kv/"; + public static final String AZURE_SPRING_SERVICE_BUS = "az-sp-bus/"; + public static final String AZURE_SPRING_STORAGE_BLOB = "az-sp-sb/"; + public static final String AZURE_SPRING_STORAGE_FILES = "az-sp-sf/"; + public static final String AZURE_SPRING_STORAGE_QUEUE = "az-si-sq/"; + //TODO: version should contains each starter library's version + public static final String VERSION = Optional.of(ApplicationId.class) + .map(Class::getPackage) + .map(Package::getImplementationVersion) + .orElse("unknown"); } diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/core/env/AzureEnvironment.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/core/env/AzureEnvironment.java new file mode 100644 index 0000000000000..0de48811e1096 --- /dev/null +++ b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/core/env/AzureEnvironment.java @@ -0,0 +1,398 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +package com.azure.spring.core.env; + +import com.azure.identity.AzureAuthorityHosts; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * An instance of this class describes an environment in Azure. + */ +public final class AzureEnvironment { + + public static final String KEY_VAULT_DNS_SUFFIX = "keyVaultDnsSuffix"; + public static final String STORAGE_ENDPOINT_SUFFIX = "storageEndpointSuffix"; + public static final String AZURE_DATA_LAKE_STORE_FILE_SYSTEM_ENDPOINT_SUFFIX = "azureDataLakeStoreFileSystemEndpointSuffix"; + public static final String AZURE_DATA_LAKE_ANALYTICS_CATALOG_AND_JOB_ENDPOINT_SUFFIX = "azureDataLakeAnalyticsCatalogAndJobEndpointSuffix"; + public static final String PUBLISHING_PROFILE_URL = "publishingProfileUrl"; + public static final String MANAGEMENT_ENDPOINT_URL = "managementEndpointUrl"; + public static final String RESOURCE_MANAGER_ENDPOINT_URL = "resourceManagerEndpointUrl"; + public static final String SQL_MANAGEMENT_ENDPOINT_URL = "sqlManagementEndpointUrl"; + public static final String SQL_SERVER_HOSTNAME_SUFFIX = "sqlServerHostnameSuffix"; + public static final String GALLERY_ENDPOINT_URL = "galleryEndpointUrl"; + public static final String ACTIVE_DIRECTORY_ENDPOINT_URL = "activeDirectoryEndpointUrl"; + public static final String ACTIVE_DIRECTORY_RESOURCE_ID = "activeDirectoryResourceId"; + public static final String ACTIVE_DIRECTORY_GRAPH_RESOURCE_ID = "activeDirectoryGraphResourceId"; + public static final String MICROSOFT_GRAPH_RESOURCE_ID = "microsoftGraphResourceId"; + public static final String DATA_LAKE_ENDPOINT_RESOURCE_ID = "dataLakeEndpointResourceId"; + public static final String ACTIVE_DIRECTORY_GRAPH_API_VERSION = "activeDirectoryGraphApiVersion"; + public static final String AZURE_LOG_ANALYTICS_RESOURCE_ID = "azureLogAnalyticsResourceId"; + public static final String AZURE_APPLICATION_INSIGHTS_RESOURCE_ID = "azureApplicationInsightsResourceId"; + public static final String PORTAL_URL = "portalUrl"; + + /** + * the map of all endpoints. + */ + private final Map endpoints; + + /** + * Initializes an instance of AzureEnvironment class. + * + * @param endpoints a map storing all the endpoint info + */ + public AzureEnvironment(Map endpoints) { + this.endpoints = endpoints; + } + + /** + * Provides the settings for authentication with Azure. + */ + public static final AzureEnvironment AZURE = new AzureEnvironment(new HashMap() { + { + put(PORTAL_URL, "http://go.microsoft.com/fwlink/?LinkId=254433"); + put(PUBLISHING_PROFILE_URL, "http://go.microsoft.com/fwlink/?LinkId=254432"); + put(MANAGEMENT_ENDPOINT_URL, "https://management.core.windows.net/"); + put(RESOURCE_MANAGER_ENDPOINT_URL, "https://management.azure.com/"); + put(SQL_MANAGEMENT_ENDPOINT_URL, "https://management.core.windows.net:8443/"); + put(SQL_SERVER_HOSTNAME_SUFFIX, ".database.windows.net"); + put(GALLERY_ENDPOINT_URL, "https://gallery.azure.com/"); + put(ACTIVE_DIRECTORY_ENDPOINT_URL, "https://login.microsoftonline.com/"); + put(ACTIVE_DIRECTORY_RESOURCE_ID, "https://management.core.windows.net/"); + put(ACTIVE_DIRECTORY_GRAPH_RESOURCE_ID, "https://graph.windows.net/"); + put(MICROSOFT_GRAPH_RESOURCE_ID, "https://graph.microsoft.com/"); + put(DATA_LAKE_ENDPOINT_RESOURCE_ID, "https://datalake.azure.net/"); + put(ACTIVE_DIRECTORY_GRAPH_API_VERSION, "2013-04-05"); + put(STORAGE_ENDPOINT_SUFFIX, ".core.windows.net"); + put(KEY_VAULT_DNS_SUFFIX, ".vault.azure.net"); + put(AZURE_DATA_LAKE_STORE_FILE_SYSTEM_ENDPOINT_SUFFIX, "azuredatalakestore.net"); + put(AZURE_DATA_LAKE_ANALYTICS_CATALOG_AND_JOB_ENDPOINT_SUFFIX, "azuredatalakeanalytics.net"); + put(AZURE_LOG_ANALYTICS_RESOURCE_ID, "https://api.loganalytics.io/"); + put(AZURE_APPLICATION_INSIGHTS_RESOURCE_ID, "https://api.applicationinsights.io/"); + } + }); + + /** + * Provides the settings for authentication with Azure China. + */ + public static final AzureEnvironment AZURE_CHINA = new AzureEnvironment(new HashMap() { + { + put(PORTAL_URL, "http://go.microsoft.com/fwlink/?LinkId=301902"); + put(PUBLISHING_PROFILE_URL, "http://go.microsoft.com/fwlink/?LinkID=301774"); + put(MANAGEMENT_ENDPOINT_URL, "https://management.core.chinacloudapi.cn/"); + put(RESOURCE_MANAGER_ENDPOINT_URL, "https://management.chinacloudapi.cn/"); + put(SQL_MANAGEMENT_ENDPOINT_URL, "https://management.core.chinacloudapi.cn:8443/"); + put(SQL_SERVER_HOSTNAME_SUFFIX, ".database.chinacloudapi.cn"); + put(GALLERY_ENDPOINT_URL, "https://gallery.chinacloudapi.cn/"); + put(ACTIVE_DIRECTORY_ENDPOINT_URL, "https://login.chinacloudapi.cn/"); + put(ACTIVE_DIRECTORY_RESOURCE_ID, "https://management.core.chinacloudapi.cn/"); + put(ACTIVE_DIRECTORY_GRAPH_RESOURCE_ID, "https://graph.chinacloudapi.cn/"); + put(MICROSOFT_GRAPH_RESOURCE_ID, "https://microsoftgraph.chinacloudapi.cn/"); + // TODO: add resource id for the china cloud for datalake once it is defined. + put(DATA_LAKE_ENDPOINT_RESOURCE_ID, "N/A"); + put(ACTIVE_DIRECTORY_GRAPH_API_VERSION, "2013-04-05"); + put(STORAGE_ENDPOINT_SUFFIX, ".core.chinacloudapi.cn"); + put(KEY_VAULT_DNS_SUFFIX, ".vault.azure.cn"); + // TODO: add dns suffixes for the china cloud for datalake store and datalake analytics once they are + // defined. + put(AZURE_DATA_LAKE_STORE_FILE_SYSTEM_ENDPOINT_SUFFIX, "N/A"); + put(AZURE_DATA_LAKE_ANALYTICS_CATALOG_AND_JOB_ENDPOINT_SUFFIX, "N/A"); + put(AZURE_LOG_ANALYTICS_RESOURCE_ID, "N/A"); + put(AZURE_APPLICATION_INSIGHTS_RESOURCE_ID, "N/A"); + + } + }); + + /** + * Provides the settings for authentication with Azure US Government. + */ + public static final AzureEnvironment AZURE_US_GOVERNMENT = new AzureEnvironment(new HashMap() { + { + put(PORTAL_URL, "https://manage.windowsazure.us"); + put(PUBLISHING_PROFILE_URL, "https://manage.windowsazure.us/publishsettings/index"); + put(MANAGEMENT_ENDPOINT_URL, "https://management.core.usgovcloudapi.net/"); + put(RESOURCE_MANAGER_ENDPOINT_URL, "https://management.usgovcloudapi.net/"); + put(SQL_MANAGEMENT_ENDPOINT_URL, "https://management.core.usgovcloudapi.net:8443/"); + put(SQL_SERVER_HOSTNAME_SUFFIX, ".database.usgovcloudapi.net"); + put(GALLERY_ENDPOINT_URL, "https://gallery.usgovcloudapi.net/"); + put(ACTIVE_DIRECTORY_ENDPOINT_URL, "https://login.microsoftonline.us/"); + put(ACTIVE_DIRECTORY_RESOURCE_ID, "https://management.core.usgovcloudapi.net/"); + put(ACTIVE_DIRECTORY_GRAPH_RESOURCE_ID, "https://graph.windows.net/"); + put(MICROSOFT_GRAPH_RESOURCE_ID, "https://graph.microsoft.us/"); + // TODO: add resource id for the US government for datalake once it is defined. + put(DATA_LAKE_ENDPOINT_RESOURCE_ID, "N/A"); + put(ACTIVE_DIRECTORY_GRAPH_API_VERSION, "2013-04-05"); + put(STORAGE_ENDPOINT_SUFFIX, ".core.usgovcloudapi.net"); + put(KEY_VAULT_DNS_SUFFIX, ".vault.usgovcloudapi.net"); + // TODO: add dns suffixes for the US government for datalake store and datalake analytics once they are + // defined. + put(AZURE_DATA_LAKE_STORE_FILE_SYSTEM_ENDPOINT_SUFFIX, "N/A"); + put(AZURE_DATA_LAKE_ANALYTICS_CATALOG_AND_JOB_ENDPOINT_SUFFIX, "N/A"); + put(AZURE_LOG_ANALYTICS_RESOURCE_ID, "https://api.loganalytics.us/"); + put(AZURE_APPLICATION_INSIGHTS_RESOURCE_ID, "N/A"); + + } + }); + + /** + * Provides the settings for authentication with Azure Germany. + */ + public static final AzureEnvironment AZURE_GERMANY = new AzureEnvironment(new HashMap() { + { + put(PORTAL_URL, "http://portal.microsoftazure.de/"); + put(PUBLISHING_PROFILE_URL, "https://manage.microsoftazure.de/publishsettings/index"); + put(MANAGEMENT_ENDPOINT_URL, "https://management.core.cloudapi.de/"); + put(RESOURCE_MANAGER_ENDPOINT_URL, "https://management.microsoftazure.de/"); + put(SQL_MANAGEMENT_ENDPOINT_URL, "https://management.core.cloudapi.de:8443/"); + put(SQL_SERVER_HOSTNAME_SUFFIX, ".database.cloudapi.de"); + put(GALLERY_ENDPOINT_URL, "https://gallery.cloudapi.de/"); + put(ACTIVE_DIRECTORY_ENDPOINT_URL, "https://login.microsoftonline.de/"); + put(ACTIVE_DIRECTORY_RESOURCE_ID, "https://management.core.cloudapi.de/"); + put(ACTIVE_DIRECTORY_GRAPH_RESOURCE_ID, "https://graph.cloudapi.de/"); + put(MICROSOFT_GRAPH_RESOURCE_ID, "https://graph.microsoft.de/"); + // TODO: add resource id for the germany cloud for datalake once it is defined. + put(DATA_LAKE_ENDPOINT_RESOURCE_ID, "N/A"); + put(ACTIVE_DIRECTORY_GRAPH_API_VERSION, "2013-04-05"); + put(STORAGE_ENDPOINT_SUFFIX, ".core.cloudapi.de"); + put(KEY_VAULT_DNS_SUFFIX, ".vault.microsoftazure.de"); + // TODO: add dns suffixes for the germany cloud for datalake store and datalake analytics once they are + // defined. + put(AZURE_DATA_LAKE_STORE_FILE_SYSTEM_ENDPOINT_SUFFIX, "N/A"); + put(AZURE_DATA_LAKE_ANALYTICS_CATALOG_AND_JOB_ENDPOINT_SUFFIX, "N/A"); + put(AZURE_LOG_ANALYTICS_RESOURCE_ID, "N/A"); + put(AZURE_APPLICATION_INSIGHTS_RESOURCE_ID, "N/A"); + + } + }); + + /** + * @return the entirety of the endpoints associated with the current environment. + */ + public Map getEndpoints() { + return endpoints; + } + + /** + * @return the list of known environments to Azure SDK. + */ + public static List knownEnvironments() { + return Arrays.asList(AZURE, AZURE_CHINA, AZURE_GERMANY, AZURE_US_GOVERNMENT); + } + + /** + * @return the management portal URL. + */ + public String getPortal() { + return endpoints.get(PORTAL_URL); + } + + /** + * @return the publish settings file URL. + */ + public String getPublishingProfile() { + return endpoints.get(PUBLISHING_PROFILE_URL); + } + + /** + * @return the management service endpoint. + */ + public String getManagementEndpoint() { + return endpoints.get(MANAGEMENT_ENDPOINT_URL); + } + + /** + * @return the resource management endpoint. + */ + public String getResourceManagerEndpoint() { + return endpoints.get(RESOURCE_MANAGER_ENDPOINT_URL); + } + + /** + * @return the sql server management endpoint for mobile commands. + */ + public String getSqlManagementEndpoint() { + return endpoints.get(SQL_MANAGEMENT_ENDPOINT_URL); + } + + /** + * @return The resource ID to obtain AD tokens for. + */ + public String getActiveDirectoryResourceId() { + return endpoints.get(ACTIVE_DIRECTORY_RESOURCE_ID); + } + + /** + * @return the template gallery endpoint. + */ + public String getGalleryEndpoint() { + return endpoints.get(GALLERY_ENDPOINT_URL); + } + + /** + * @return the Active Directory resource ID. + */ + public String getGraphEndpoint() { + return endpoints.get(ACTIVE_DIRECTORY_GRAPH_RESOURCE_ID); + } + + /** + * @return the Microsoft Graph resource ID. + */ + public String getMicrosoftGraphEndpoint() { + return endpoints.get(MICROSOFT_GRAPH_RESOURCE_ID); + } + + /** + * @return the Data Lake resource ID. + */ + public String getDataLakeEndpointResourceId() { + return endpoints.get(DATA_LAKE_ENDPOINT_RESOURCE_ID); + } + + /** + * @return the Active Directory api version. + */ + public String getActiveDirectoryGraphApiVersion() { + return endpoints.get(ACTIVE_DIRECTORY_GRAPH_API_VERSION); + } + + /** + * @return the endpoint suffix for storage accounts. + */ + public String getStorageEndpointSuffix() { + return endpoints.get(STORAGE_ENDPOINT_SUFFIX); + } + + /** + * @return the keyvault service dns suffix. + */ + public String getKeyVaultDnsSuffix() { + return endpoints.get(KEY_VAULT_DNS_SUFFIX); + } + + /** + * @return the data lake store filesystem service dns suffix. + */ + public String getAzureDataLakeStoreFileSystemEndpointSuffix() { + return endpoints.get(AZURE_DATA_LAKE_STORE_FILE_SYSTEM_ENDPOINT_SUFFIX); + } + + /** + * @return the data lake analytics job and catalog service dns suffix. + */ + public String getAzureDataLakeAnalyticsCatalogAndJobEndpointSuffix() { + return endpoints.get(AZURE_DATA_LAKE_ANALYTICS_CATALOG_AND_JOB_ENDPOINT_SUFFIX); + } + + /** + * @return the log analytics endpoint. + */ + public String getLogAnalyticsEndpoint() { + return endpoints.get(AZURE_LOG_ANALYTICS_RESOURCE_ID); + } + + /** + * @return the log analytics endpoint. + */ + public String getApplicationInsightsEndpoint() { + return endpoints.get(AZURE_APPLICATION_INSIGHTS_RESOURCE_ID); + } + + public static String toAuthorityHost(String azureEnvironment) { + switch (azureEnvironment) { + case "AzureChina": + return AzureAuthorityHosts.AZURE_CHINA; + case "AzureGermany": + return AzureAuthorityHosts.AZURE_GERMANY; + case "AzureUSGovernment": + return AzureAuthorityHosts.AZURE_GOVERNMENT; + default: + return AzureAuthorityHosts.AZURE_PUBLIC_CLOUD; + } + } + + /** + * The enum representing available endpoints in an environment. + */ + public enum Endpoint { + /** + * Azure management endpoint. + */ + MANAGEMENT(MANAGEMENT_ENDPOINT_URL), + /** + * Azure Resource Manager endpoint. + */ + RESOURCE_MANAGER(RESOURCE_MANAGER_ENDPOINT_URL), + /** + * Azure SQL endpoint. + */ + SQL(SQL_MANAGEMENT_ENDPOINT_URL), + /** + * Azure Gallery endpoint. + */ + GALLERY(GALLERY_ENDPOINT_URL), + /** + * Active Directory authentication endpoint. + */ + ACTIVE_DIRECTORY(ACTIVE_DIRECTORY_ENDPOINT_URL), + /** + * Azure Active Directory Graph APIs endpoint. + */ + GRAPH(ACTIVE_DIRECTORY_GRAPH_RESOURCE_ID), + /** + * Key Vault DNS suffix. + */ + KEYVAULT(KEY_VAULT_DNS_SUFFIX), + /** + * Azure Data Lake Store DNS suffix. + */ + DATA_LAKE_STORE(AZURE_DATA_LAKE_STORE_FILE_SYSTEM_ENDPOINT_SUFFIX), + /** + * Azure Data Lake Analytics DNS suffix. + */ + DATA_LAKE_ANALYTICS(AZURE_DATA_LAKE_ANALYTICS_CATALOG_AND_JOB_ENDPOINT_SUFFIX), + /** + * Azure Log Analytics endpoint. + */ + LOG_ANALYTICS(AZURE_LOG_ANALYTICS_RESOURCE_ID), + /** + * Azure Application Insights. + */ + APPLICATION_INSIGHTS(AZURE_APPLICATION_INSIGHTS_RESOURCE_ID), + /** + * Microsoft Graph APIs endpoint. + */ + MICROSOFT_GRAPH(MICROSOFT_GRAPH_RESOURCE_ID); + + private final String field; + + Endpoint(String value) { + this.field = value; + } + + /** + * @return a unique identifier for the endpoint in the environment + */ + public String identifier() { + return field; + } + + @Override + public String toString() { + return field; + } + } + + /** + * Gets the endpoint URL for the current environment. + * + * @param endpoint the endpoint. + * @return the URL for the endpoint, null if no match. + */ + public String getUrlByEndpoint(Endpoint endpoint) { + return endpoints.get(endpoint.identifier()); + } +} diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/enums/package-info.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/core/env/package-info.java similarity index 50% rename from sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/enums/package-info.java rename to sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/core/env/package-info.java index 1de7287763681..604c4afcb8b1d 100644 --- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/enums/package-info.java +++ b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/core/env/package-info.java @@ -2,6 +2,6 @@ // Licensed under the MIT License. /** - * Package com.azure.spring.cloud.context.core.enums; + * Package com.azure.spring.core.env; */ -package com.azure.spring.cloud.context.core.enums; +package com.azure.spring.core.env; diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/core/package-info.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/core/package-info.java new file mode 100644 index 0000000000000..be239a2b1e729 --- /dev/null +++ b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/core/package-info.java @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +/** + * Package com.azure.spring.core; + */ +package com.azure.spring.core; diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util/Memoizer.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/core/util/Memoizer.java similarity index 95% rename from sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util/Memoizer.java rename to sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/core/util/Memoizer.java index 9fcdc9ef9009f..c47e8518d7450 100644 --- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util/Memoizer.java +++ b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/core/util/Memoizer.java @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -package com.azure.spring.cloud.context.core.util; +package com.azure.spring.core.util; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util/Tuple.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/core/util/Tuple.java similarity index 95% rename from sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util/Tuple.java rename to sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/core/util/Tuple.java index b64d6a01343a2..157dbd8cd4529 100644 --- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util/Tuple.java +++ b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/core/util/Tuple.java @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -package com.azure.spring.cloud.context.core.util; +package com.azure.spring.core.util; import java.util.Objects; diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util/TypeMap.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/core/util/TypeMap.java similarity index 91% rename from sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util/TypeMap.java rename to sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/core/util/TypeMap.java index a887206013491..dd280d9dca061 100644 --- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/util/TypeMap.java +++ b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/core/util/TypeMap.java @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -package com.azure.spring.cloud.context.core.util; +package com.azure.spring.core.util; import java.util.HashMap; import java.util.Map; diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/core/util/package-info.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/core/util/package-info.java new file mode 100644 index 0000000000000..2174fe25415f6 --- /dev/null +++ b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/core/util/package-info.java @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +/** + * Package com.azure.spring.core.util; + */ +package com.azure.spring.core.util; diff --git a/sdk/spring/azure-identity-spring/src/main/java/com/azure/spring/identity/DefaultSpringCredentialBuilder.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/identity/DefaultSpringCredentialBuilder.java similarity index 100% rename from sdk/spring/azure-identity-spring/src/main/java/com/azure/spring/identity/DefaultSpringCredentialBuilder.java rename to sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/identity/DefaultSpringCredentialBuilder.java diff --git a/sdk/spring/azure-identity-spring/src/main/java/com/azure/spring/identity/PrefixedSpringCredentialBuilder.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/identity/PrefixedSpringCredentialBuilder.java similarity index 100% rename from sdk/spring/azure-identity-spring/src/main/java/com/azure/spring/identity/PrefixedSpringCredentialBuilder.java rename to sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/identity/PrefixedSpringCredentialBuilder.java diff --git a/sdk/spring/azure-identity-spring/src/main/java/com/azure/spring/identity/SpringCredentialBuilderBase.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/identity/SpringCredentialBuilderBase.java similarity index 61% rename from sdk/spring/azure-identity-spring/src/main/java/com/azure/spring/identity/SpringCredentialBuilderBase.java rename to sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/identity/SpringCredentialBuilderBase.java index 8aba8c4093e38..75893099db4bc 100644 --- a/sdk/spring/azure-identity-spring/src/main/java/com/azure/spring/identity/SpringCredentialBuilderBase.java +++ b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/identity/SpringCredentialBuilderBase.java @@ -3,13 +3,17 @@ package com.azure.spring.identity; import com.azure.core.credential.TokenCredential; +import com.azure.identity.AzureAuthorityHosts; import com.azure.identity.ClientCertificateCredentialBuilder; import com.azure.identity.ClientSecretCredentialBuilder; import com.azure.identity.ManagedIdentityCredential; import com.azure.identity.ManagedIdentityCredentialBuilder; -import org.springframework.boot.context.properties.bind.Binder; +import com.azure.spring.core.env.AzureEnvironment; import org.springframework.core.env.Environment; +import java.util.Optional; + + /** * */ @@ -36,25 +40,28 @@ protected TokenCredential populateTokenCredentialBasedOnClientId(String prefix) } private TokenCredential populateTokenCredential(String prefix, boolean createDefault) { - String tenantId = getPropertyValue(prefix, "tenant-id"); - String clientId = getPropertyValue(prefix, "client-id"); - String clientSecret = getPropertyValue(prefix, "client-secret"); + String tenantId = getPropertyValue(prefix + "tenant-id"); + String clientId = getPropertyValue(prefix + "client-id"); + String clientSecret = getPropertyValue(prefix + "client-secret"); + String authorityHost = getAuthorityHost(prefix); if (tenantId != null && clientId != null && clientSecret != null) { return new ClientSecretCredentialBuilder() .tenantId(tenantId) .clientId(clientId) .clientSecret(clientSecret) + .authorityHost(authorityHost) .build(); } - String certPath = getPropertyValue(prefix, "client-certificate-path"); + String certPath = getPropertyValue(prefix + "client-certificate-path"); if (tenantId != null && clientId != null && certPath != null) { return new ClientCertificateCredentialBuilder() .tenantId(tenantId) .clientId(clientId) .pemCertificate(certPath) + .authorityHost(authorityHost) .build(); } @@ -69,10 +76,20 @@ protected ManagedIdentityCredential defaultManagedIdentityCredential() { return new ManagedIdentityCredentialBuilder().build(); } - protected String getPropertyValue(String prefix, String propertyKey) { - return Binder.get(this.environment) - .bind(prefix + propertyKey, String.class) - .orElse(null); + protected String getPropertyValue(String propertyName) { + return environment.getProperty(propertyName); + } + + protected String getPropertyValue(String propertyName, String defaultValue) { + return environment.getProperty(propertyName, defaultValue); + } + + protected String getAuthorityHost(String prefix) { + return Optional.ofNullable(getPropertyValue(prefix + "authority-host")) + .orElse(Optional.ofNullable(getPropertyValue(prefix + "environment")) + .filter(env -> !env.isEmpty()) + .map(AzureEnvironment::toAuthorityHost) + .orElse(AzureAuthorityHosts.AZURE_PUBLIC_CLOUD)); } } diff --git a/sdk/spring/azure-identity-spring/src/main/java/com/azure/spring/identity/package-info.java b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/identity/package-info.java similarity index 78% rename from sdk/spring/azure-identity-spring/src/main/java/com/azure/spring/identity/package-info.java rename to sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/identity/package-info.java index 391ffff04977d..4de576fa1a58e 100644 --- a/sdk/spring/azure-identity-spring/src/main/java/com/azure/spring/identity/package-info.java +++ b/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/identity/package-info.java @@ -2,6 +2,6 @@ // Licensed under the MIT License. /** - * Package com.azure.identity.spring; + * Package com.azure.spring.identity; */ package com.azure.spring.identity; diff --git a/sdk/spring/azure-spring-cloud-context/src/main/resources/META-INF/spring.factories b/sdk/spring/azure-spring-cloud-context/src/main/resources/META-INF/spring.factories deleted file mode 100644 index 28acdd1e10988..0000000000000 --- a/sdk/spring/azure-spring-cloud-context/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1,3 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -com.azure.spring.cloud.autoconfigure.context.AzureContextAutoConfiguration,\ -com.azure.spring.cloud.autoconfigure.context.AzureEnvironmentAutoConfiguration diff --git a/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/cloud/autoconfigure/context/AzureEnvironmentConfigurationTest.java b/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/cloud/autoconfigure/context/AzureEnvironmentConfigurationTest.java deleted file mode 100644 index f0683dadfed6f..0000000000000 --- a/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/cloud/autoconfigure/context/AzureEnvironmentConfigurationTest.java +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.spring.cloud.autoconfigure.context; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; -import com.azure.core.management.AzureEnvironment; -import com.azure.resourcemanager.AzureResourceManager; -import com.azure.spring.cloud.context.core.api.CredentialsProvider; -import com.azure.spring.cloud.context.core.api.EnvironmentProvider; -import com.azure.spring.cloud.context.core.config.AzureProperties; -import org.junit.jupiter.api.Test; -import org.springframework.boot.autoconfigure.AutoConfigurations; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.boot.test.context.runner.ApplicationContextRunner; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -public class AzureEnvironmentConfigurationTest { - - private static final String AZURE_PROPERTY_PREFIX = "spring.cloud.azure."; - - private ApplicationContextRunner contextRunner = new ApplicationContextRunner() - .withConfiguration(AutoConfigurations.of(AzureEnvironmentAutoConfiguration.class)); - - @Test - public void testAutoConfigure() { - this.contextRunner.run(context -> { - assertThat(context).hasSingleBean(EnvironmentProvider.class); - assertThat(context.getBean(EnvironmentProvider.class).getEnvironment()).isEqualTo(AzureEnvironment.AZURE); - }); - } - - @Test - public void testWithAnotherEnvironment() { - this.contextRunner - .withUserConfiguration(TestConfigurationWithProperty.class) - .withPropertyValues(AZURE_PROPERTY_PREFIX + "environment=AzureChina") - .run(context -> { - assertThat(context).hasSingleBean(EnvironmentProvider.class); - assertThat(context.getBean(EnvironmentProvider.class).getEnvironment()) - .isEqualTo(AzureEnvironment.AZURE_CHINA); - }); - } - - - @Configuration - @EnableConfigurationProperties(AzureProperties.class) - static class TestConfigurationWithProperty { - - } - - @Configuration - static class TestConfigurationWithResourceManager { - - @Bean - AzureResourceManager azureResourceManager() { - return mock(AzureResourceManager.class); - } - - @Bean - CredentialsProvider credentialsProvider() { - return mock(CredentialsProvider.class); - } - - } - -} diff --git a/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/cloud/context/core/ApplicationIdTest.java b/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/cloud/context/core/ApplicationIdTest.java index 7765b741eb2f0..33fce79d1510f 100644 --- a/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/cloud/context/core/ApplicationIdTest.java +++ b/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/cloud/context/core/ApplicationIdTest.java @@ -5,14 +5,15 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import static com.azure.spring.cloud.context.core.util.Constants.SPRING_INTEGRATION_STORAGE_QUEUE_APPLICATION_ID; +import static com.azure.spring.core.ApplicationId.AZURE_SPRING_STORAGE_QUEUE; +import static com.azure.spring.core.ApplicationId.VERSION; public class ApplicationIdTest { @Test public void maxLength() { - Assertions.assertTrue(SPRING_INTEGRATION_STORAGE_QUEUE_APPLICATION_ID.length() <= 24); + Assertions.assertTrue((AZURE_SPRING_STORAGE_QUEUE + VERSION).length() <= 24); } } diff --git a/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/cloud/context/core/MemoizerTest.java b/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/cloud/context/core/MemoizerTest.java index 2ada36b0cc16a..0fb40b945c828 100644 --- a/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/cloud/context/core/MemoizerTest.java +++ b/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/cloud/context/core/MemoizerTest.java @@ -3,16 +3,20 @@ package com.azure.spring.cloud.context.core; -import static org.mockito.Mockito.*; +import com.azure.spring.core.util.Memoizer; +import com.azure.spring.core.util.Tuple; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; -import com.azure.spring.cloud.context.core.util.Memoizer; -import com.azure.spring.cloud.context.core.util.Tuple; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.function.BiFunction; import java.util.function.Function; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; public class MemoizerTest { diff --git a/sdk/spring/azure-identity-spring/src/test/java/com/azure/spring/identity/DefaultSpringCredentialBuilderTest.java b/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/identity/DefaultSpringCredentialBuilderTest.java similarity index 100% rename from sdk/spring/azure-identity-spring/src/test/java/com/azure/spring/identity/DefaultSpringCredentialBuilderTest.java rename to sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/identity/DefaultSpringCredentialBuilderTest.java diff --git a/sdk/spring/azure-identity-spring/src/test/java/com/azure/spring/identity/PrefixedSpringCredentialBuilderTest.java b/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/identity/PrefixedSpringCredentialBuilderTest.java similarity index 100% rename from sdk/spring/azure-identity-spring/src/test/java/com/azure/spring/identity/PrefixedSpringCredentialBuilderTest.java rename to sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/identity/PrefixedSpringCredentialBuilderTest.java diff --git a/sdk/spring/azure-identity-spring/src/test/java/com/azure/spring/identity/SpringCredentialBuilderBaseTest.java b/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/identity/SpringCredentialBuilderBaseTest.java similarity index 65% rename from sdk/spring/azure-identity-spring/src/test/java/com/azure/spring/identity/SpringCredentialBuilderBaseTest.java rename to sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/identity/SpringCredentialBuilderBaseTest.java index ab466e261ca0d..b1a3d13903f63 100644 --- a/sdk/spring/azure-identity-spring/src/test/java/com/azure/spring/identity/SpringCredentialBuilderBaseTest.java +++ b/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/identity/SpringCredentialBuilderBaseTest.java @@ -3,6 +3,7 @@ package com.azure.spring.identity; import com.azure.core.credential.TokenCredential; +import com.azure.identity.AzureAuthorityHosts; import com.azure.identity.ClientCertificateCredential; import com.azure.identity.ClientSecretCredential; import com.azure.identity.ManagedIdentityCredential; @@ -23,19 +24,54 @@ public void testPropertyBinder() { final Properties properties = new PropertiesBuilder() .prefix(prefix) - .property("clientId", "fake-client-id") // camel case + //TODO: make getPropertyValue compatible with relax binding .property("client-secret", "fake-secret") // kebab case - .property("tenant_id", "fake-tenant-id") // underscore notation - .property("CLIENT_CERTIFICATE_PATH", "fake-cert-path")// upper case format +// .property("clientId", "fake-client-id") // camel case +// .property("tenant_id", "fake-tenant-id") // underscore notation +// .property("CLIENT_CERTIFICATE_PATH", "fake-cert-path")// upper case format .build(); final TestSpringCredentialBuilder builder = new TestSpringCredentialBuilder() .environment(buildEnvironment(properties)); - assertEquals("fake-client-id", builder.getPropertyValue(prefix, "client-id")); - assertEquals("fake-secret", builder.getPropertyValue(prefix, "client-secret")); - assertEquals("fake-tenant-id", builder.getPropertyValue(prefix, "tenant-id")); - assertEquals("fake-cert-path", builder.getPropertyValue(prefix, "client-certificate-path")); + assertEquals("fake-secret", builder.getPropertyValue(prefix + "client-secret")); +// assertEquals("fake-client-id", builder.getPropertyValue(prefix + "client-id")); +// assertEquals("fake-tenant-id", builder.getPropertyValue(prefix + "tenant-id")); +// assertEquals("fake-cert-path", builder.getPropertyValue(prefix + "client-certificate-path")); + assertEquals(AzureAuthorityHosts.AZURE_PUBLIC_CLOUD, builder.getAuthorityHost(prefix)); + } + + @Test + public void testGetAuthorityHost() { + + final String prefix = "azure.activedirectory."; + + final Properties properties = new PropertiesBuilder() + .prefix(prefix) + .property("authority-host", "fake-authority-host") + .property("environment", "AzureChina") + .build(); + + final TestSpringCredentialBuilder builder = new TestSpringCredentialBuilder() + .environment(buildEnvironment(properties)); + + assertEquals("fake-authority-host", builder.getAuthorityHost(prefix)); + } + + @Test + public void testGetAuthorityHostFromEnvironment() { + + final String prefix = "azure.activedirectory."; + + final Properties properties = new PropertiesBuilder() + .prefix(prefix) + .property("environment", "AzureChina") + .build(); + + final TestSpringCredentialBuilder builder = new TestSpringCredentialBuilder() + .environment(buildEnvironment(properties)); + + assertEquals(AzureAuthorityHosts.AZURE_CHINA, builder.getAuthorityHost(prefix)); } @Test diff --git a/sdk/spring/azure-identity-spring/src/test/java/com/azure/spring/identity/SpringCredentialTestBase.java b/sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/identity/SpringCredentialTestBase.java similarity index 100% rename from sdk/spring/azure-identity-spring/src/test/java/com/azure/spring/identity/SpringCredentialTestBase.java rename to sdk/spring/azure-spring-cloud-context/src/test/java/com/azure/spring/identity/SpringCredentialTestBase.java diff --git a/sdk/spring/azure-spring-cloud-messaging/pom.xml b/sdk/spring/azure-spring-cloud-messaging/pom.xml index b30d82a2da438..f28ff69159453 100644 --- a/sdk/spring/azure-spring-cloud-messaging/pom.xml +++ b/sdk/spring/azure-spring-cloud-messaging/pom.xml @@ -32,6 +32,11 @@ azure-spring-integration-core 2.8.0-beta.1 + + org.springframework.boot + spring-boot-autoconfigure + 2.5.3 + org.springframework:spring-messaging:[5.3.9] diff --git a/sdk/spring/azure-spring-cloud-resourcemanager/CHANGELOG.md b/sdk/spring/azure-spring-cloud-resourcemanager/CHANGELOG.md new file mode 100644 index 0000000000000..50a5288023375 --- /dev/null +++ b/sdk/spring/azure-spring-cloud-resourcemanager/CHANGELOG.md @@ -0,0 +1,4 @@ +# Release History + +## 2.8.0-beta.1 (Unreleased) + diff --git a/sdk/spring/azure-spring-cloud-storage/README.md b/sdk/spring/azure-spring-cloud-resourcemanager/README.md similarity index 96% rename from sdk/spring/azure-spring-cloud-storage/README.md rename to sdk/spring/azure-spring-cloud-resourcemanager/README.md index ad1ed44a6511a..142029526af66 100644 --- a/sdk/spring/azure-spring-cloud-storage/README.md +++ b/sdk/spring/azure-spring-cloud-resourcemanager/README.md @@ -52,7 +52,7 @@ This project welcomes contributions and suggestions. Most contributions require Please follow [instructions here][contributing_md] to build from source or contribute. -[src]: https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/spring/azure-spring-cloud-storage +[src]: https://github.com/Azure/azure-sdk-for-java/tree/b6a7aba854d35d2a861dbf2786b5e41b9d3538ad/sdk/spring/azure-spring-cloud-storage [package]: https://mvnrepository.com/artifact/com.azure.spring/azure-spring-cloud-storage [refdocs]: https://azure.github.io/azure-sdk-for-java/springcloud.html#azure-spring-cloud-storage [logging]: https://github.com/Azure/azure-sdk-for-java/wiki/Logging-with-Azure-SDK#use-logback-logging-framework-in-a-spring-boot-application diff --git a/sdk/spring/azure-spring-cloud-resourcemanager/pom.xml b/sdk/spring/azure-spring-cloud-resourcemanager/pom.xml new file mode 100644 index 0000000000000..f3638653d84f7 --- /dev/null +++ b/sdk/spring/azure-spring-cloud-resourcemanager/pom.xml @@ -0,0 +1,41 @@ + + + + com.azure + azure-client-sdk-parent + 1.7.0 + ../../parents/azure-client-sdk-parent + + 4.0.0 + + com.azure.spring + azure-spring-cloud-resourcemanager + 2.8.0-beta.1 + + Azure Spring Cloud Resource Manager + https://github.com/Azure/azure-sdk-for-java + + + 0.09 + 0.14 + + + + + com.azure.spring + azure-spring-cloud-context + 2.8.0-beta.1 + + + + + com.azure.resourcemanager + azure-resourcemanager + 2.7.0 + + + + + diff --git a/sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/api/AzureResourceMetadata.java b/sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/api/AzureResourceMetadata.java new file mode 100644 index 0000000000000..d850c2adf599e --- /dev/null +++ b/sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/api/AzureResourceMetadata.java @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.spring.cloud.context.core.api; + +/** + * Metadata defining an Azure resource. + */ +public class AzureResourceMetadata { + + private String region; + private String resourceGroup; + private boolean autoCreateResources; + + public String getRegion() { + return region; + } + + public void setRegion(String region) { + this.region = region; + } + + public String getResourceGroup() { + return resourceGroup; + } + + public void setResourceGroup(String resourceGroup) { + this.resourceGroup = resourceGroup; + } + + public boolean isAutoCreateResources() { + return autoCreateResources; + } + + public void setAutoCreateResources(boolean autoCreateResources) { + this.autoCreateResources = autoCreateResources; + } +} diff --git a/sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/api/package-info.java b/sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/api/package-info.java new file mode 100644 index 0000000000000..55d8ee2b53c0a --- /dev/null +++ b/sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/api/package-info.java @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +/** + * Package com.azure.spring.cloud.context.core.api; + */ +package com.azure.spring.cloud.context.core.api; diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/AzureManager.java b/sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/impl/AzureManager.java similarity index 87% rename from sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/AzureManager.java rename to sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/impl/AzureManager.java index 9a9920fd5e851..803ea6bcb9e94 100644 --- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/AzureManager.java +++ b/sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/impl/AzureManager.java @@ -4,8 +4,8 @@ package com.azure.spring.cloud.context.core.impl; import com.azure.core.management.exception.ManagementException; +import com.azure.spring.cloud.context.core.api.AzureResourceMetadata; import com.azure.spring.cloud.context.core.api.ResourceManager; -import com.azure.spring.cloud.context.core.config.AzureProperties; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.lang.NonNull; @@ -21,14 +21,14 @@ public abstract class AzureManager implements ResourceManager { private static final Logger LOGGER = LoggerFactory.getLogger(AzureManager.class); - private final AzureProperties azureProperties; + private final AzureResourceMetadata azureResourceMetadata; protected final String resourceGroup; protected final String region; - public AzureManager(@NonNull AzureProperties azureProperties) { - this.azureProperties = azureProperties; - this.resourceGroup = azureProperties.getResourceGroup(); - this.region = azureProperties.getRegion(); + public AzureManager(@NonNull AzureResourceMetadata azureResourceMetadata) { + this.azureResourceMetadata = azureResourceMetadata; + this.resourceGroup = azureResourceMetadata.getResourceGroup(); + this.region = azureResourceMetadata.getRegion(); } @Override @@ -90,7 +90,7 @@ public T getOrCreate(K key) { return result; } - if (!azureProperties.isAutoCreateResources()) { + if (!azureResourceMetadata.isAutoCreateResources()) { String message = String.format("%s with name '%s' not existed.", getResourceType(), getResourceName(key)); LOGGER.warn(message); String enable = "If you want to enable automatic resource creation. Please set spring.cloud.azure" diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/EventHubConsumerGroupManager.java b/sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/impl/EventHubConsumerGroupManager.java similarity index 87% rename from sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/EventHubConsumerGroupManager.java rename to sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/impl/EventHubConsumerGroupManager.java index c0ea127fa9e9d..f33002df965f6 100644 --- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/EventHubConsumerGroupManager.java +++ b/sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/impl/EventHubConsumerGroupManager.java @@ -6,8 +6,8 @@ import com.azure.resourcemanager.AzureResourceManager; import com.azure.resourcemanager.eventhubs.models.EventHub; import com.azure.resourcemanager.eventhubs.models.EventHubConsumerGroup; -import com.azure.spring.cloud.context.core.config.AzureProperties; -import com.azure.spring.cloud.context.core.util.Tuple; +import com.azure.spring.cloud.context.core.api.AzureResourceMetadata; +import com.azure.spring.core.util.Tuple; /** * Resource manager for Event Hubs consumer group. @@ -15,9 +15,10 @@ public class EventHubConsumerGroupManager extends AzureManager> { private final AzureResourceManager azureResourceManager; - - public EventHubConsumerGroupManager(AzureResourceManager azureResourceManager, AzureProperties azureProperties) { - super(azureProperties); + + public EventHubConsumerGroupManager(AzureResourceManager azureResourceManager, + AzureResourceMetadata resourceMetadata) { + super(resourceMetadata); this.azureResourceManager = azureResourceManager; } diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/EventHubManager.java b/sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/impl/EventHubManager.java similarity index 90% rename from sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/EventHubManager.java rename to sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/impl/EventHubManager.java index ff3bdfbe3d52b..6845a8389471b 100644 --- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/EventHubManager.java +++ b/sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/impl/EventHubManager.java @@ -7,8 +7,8 @@ import com.azure.resourcemanager.AzureResourceManager; import com.azure.resourcemanager.eventhubs.models.EventHub; import com.azure.resourcemanager.eventhubs.models.EventHubNamespace; -import com.azure.spring.cloud.context.core.config.AzureProperties; -import com.azure.spring.cloud.context.core.util.Tuple; +import com.azure.spring.cloud.context.core.api.AzureResourceMetadata; +import com.azure.spring.core.util.Tuple; /** * Resource manager for Event Hubs. @@ -17,8 +17,8 @@ public class EventHubManager extends AzureManager { private final AzureResourceManager azureResourceManager; - public RedisCacheManager(AzureResourceManager azureResourceManager, AzureProperties azureProperties) { - super(azureProperties); + public RedisCacheManager(AzureResourceManager azureResourceManager, AzureResourceMetadata azureResourceMetadata) { + super(azureResourceMetadata); this.azureResourceManager = azureResourceManager; } diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/ResourceGroupManager.java b/sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/impl/ResourceGroupManager.java similarity index 89% rename from sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/ResourceGroupManager.java rename to sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/impl/ResourceGroupManager.java index 60ffcdf9bc990..40f09debc7fbd 100644 --- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/ResourceGroupManager.java +++ b/sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/impl/ResourceGroupManager.java @@ -6,7 +6,7 @@ import com.azure.core.management.exception.ManagementException; import com.azure.resourcemanager.AzureResourceManager; import com.azure.resourcemanager.resources.models.ResourceGroup; -import com.azure.spring.cloud.context.core.config.AzureProperties; +import com.azure.spring.cloud.context.core.api.AzureResourceMetadata; /** * Resource manager for resource group. @@ -15,8 +15,8 @@ public class ResourceGroupManager extends AzureManager { private final AzureResourceManager azureResourceManager; - public ResourceGroupManager(AzureResourceManager azureResourceManager, AzureProperties azureProperties) { - super(azureProperties); + public ResourceGroupManager(AzureResourceManager azureResourceManager, AzureResourceMetadata azureResourceMetadata) { + super(azureResourceMetadata); this.azureResourceManager = azureResourceManager; } diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusNamespaceManager.java b/sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusNamespaceManager.java similarity index 82% rename from sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusNamespaceManager.java rename to sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusNamespaceManager.java index 20975479fd148..c6a994b7419aa 100644 --- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusNamespaceManager.java +++ b/sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusNamespaceManager.java @@ -6,7 +6,8 @@ import com.azure.core.management.exception.ManagementException; import com.azure.resourcemanager.AzureResourceManager; import com.azure.resourcemanager.servicebus.models.ServiceBusNamespace; -import com.azure.spring.cloud.context.core.config.AzureProperties; +import com.azure.spring.cloud.context.core.api.AzureResourceMetadata; +import org.springframework.lang.NonNull; /** * Resource manager for Service Bus namespace. @@ -15,8 +16,9 @@ public class ServiceBusNamespaceManager extends AzureManager> { - public ServiceBusQueueManager(AzureProperties azureProperties) { - super(azureProperties); + public ServiceBusQueueManager(AzureResourceMetadata azureResourceMetadata) { + super(azureResourceMetadata); } @Override diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusTopicManager.java b/sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusTopicManager.java similarity index 85% rename from sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusTopicManager.java rename to sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusTopicManager.java index 0c21a4a7a80d7..2bf3b8b1e8afd 100644 --- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusTopicManager.java +++ b/sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusTopicManager.java @@ -6,16 +6,16 @@ import com.azure.core.management.exception.ManagementException; import com.azure.resourcemanager.servicebus.models.ServiceBusNamespace; import com.azure.resourcemanager.servicebus.models.Topic; -import com.azure.spring.cloud.context.core.config.AzureProperties; -import com.azure.spring.cloud.context.core.util.Tuple; +import com.azure.spring.cloud.context.core.api.AzureResourceMetadata; +import com.azure.spring.core.util.Tuple; /** * Resource manager for Service Bus topic. */ public class ServiceBusTopicManager extends AzureManager> { - public ServiceBusTopicManager(AzureProperties azureProperties) { - super(azureProperties); + public ServiceBusTopicManager(AzureResourceMetadata azureResourceMetadata) { + super(azureResourceMetadata); } @Override diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusTopicSubscriptionManager.java b/sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusTopicSubscriptionManager.java similarity index 86% rename from sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusTopicSubscriptionManager.java rename to sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusTopicSubscriptionManager.java index e8872ca4b726c..09d3b27cf18e5 100644 --- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusTopicSubscriptionManager.java +++ b/sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/impl/ServiceBusTopicSubscriptionManager.java @@ -6,8 +6,8 @@ import com.azure.core.management.exception.ManagementException; import com.azure.resourcemanager.servicebus.models.ServiceBusSubscription; import com.azure.resourcemanager.servicebus.models.Topic; -import com.azure.spring.cloud.context.core.config.AzureProperties; -import com.azure.spring.cloud.context.core.util.Tuple; +import com.azure.spring.cloud.context.core.api.AzureResourceMetadata; +import com.azure.spring.core.util.Tuple; /** * Resource manager for Service Bus topic subscription. @@ -15,8 +15,8 @@ public class ServiceBusTopicSubscriptionManager extends AzureManager> { - public ServiceBusTopicSubscriptionManager(AzureProperties azureProperties) { - super(azureProperties); + public ServiceBusTopicSubscriptionManager(AzureResourceMetadata azureResourceMetadata) { + super(azureResourceMetadata); } @Override diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/StorageAccountManager.java b/sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/impl/StorageAccountManager.java similarity index 84% rename from sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/StorageAccountManager.java rename to sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/impl/StorageAccountManager.java index 6156402f00b40..e2d9c55290461 100644 --- a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/StorageAccountManager.java +++ b/sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/impl/StorageAccountManager.java @@ -6,9 +6,8 @@ import com.azure.core.management.exception.ManagementException; import com.azure.resourcemanager.AzureResourceManager; import com.azure.resourcemanager.storage.models.StorageAccount; -import com.azure.spring.cloud.context.core.config.AzureProperties; - -import javax.annotation.Nonnull; +import com.azure.spring.cloud.context.core.api.AzureResourceMetadata; +import org.springframework.lang.NonNull; /** * Resource manager for Storage account. @@ -17,8 +16,8 @@ public class StorageAccountManager extends AzureManager private final AzureResourceManager azureResourceManager; - public StorageAccountManager(@Nonnull AzureResourceManager azureResourceManager, AzureProperties azureProperties) { - super(azureProperties); + public StorageAccountManager(@NonNull AzureResourceManager azureResourceManager, AzureResourceMetadata azureResourceMetadata) { + super(azureResourceMetadata); this.azureResourceManager = azureResourceManager; } diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/package-info.java b/sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/impl/package-info.java similarity index 100% rename from sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/impl/package-info.java rename to sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/impl/package-info.java diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/storage/StorageConnectionStringProvider.java b/sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/storage/StorageConnectionStringProvider.java similarity index 100% rename from sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/storage/StorageConnectionStringProvider.java rename to sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/storage/StorageConnectionStringProvider.java diff --git a/sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/storage/package-info.java b/sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/storage/package-info.java similarity index 100% rename from sdk/spring/azure-spring-cloud-context/src/main/java/com/azure/spring/cloud/context/core/storage/package-info.java rename to sdk/spring/azure-spring-cloud-resourcemanager/src/main/java/com/azure/spring/cloud/context/core/storage/package-info.java diff --git a/sdk/spring/azure-spring-cloud-starter-cache/pom.xml b/sdk/spring/azure-spring-cloud-starter-cache/pom.xml index f27ad7bd1b621..9d63d4e3c037e 100644 --- a/sdk/spring/azure-spring-cloud-starter-cache/pom.xml +++ b/sdk/spring/azure-spring-cloud-starter-cache/pom.xml @@ -22,11 +22,6 @@ azure-spring-cloud-autoconfigure 2.8.0-beta.1 - - com.azure.spring - azure-spring-cloud-context - 2.8.0-beta.1 - org.springframework.boot spring-boot-starter-cache @@ -37,6 +32,11 @@ spring-boot-starter-data-redis 2.5.3 + + com.azure.spring + azure-spring-cloud-resourcemanager + 2.8.0-beta.1 + diff --git a/sdk/spring/azure-spring-cloud-starter-eventhubs-kafka/pom.xml b/sdk/spring/azure-spring-cloud-starter-eventhubs-kafka/pom.xml index 6a1b6441bcc18..707e7325a6815 100644 --- a/sdk/spring/azure-spring-cloud-starter-eventhubs-kafka/pom.xml +++ b/sdk/spring/azure-spring-cloud-starter-eventhubs-kafka/pom.xml @@ -29,8 +29,8 @@ com.azure.spring - azure-spring-cloud-context - 2.8.0-beta.1 + azure-spring-cloud-resourcemanager + 2.8.0-beta.1 diff --git a/sdk/spring/azure-spring-cloud-starter-eventhubs/pom.xml b/sdk/spring/azure-spring-cloud-starter-eventhubs/pom.xml index 9d854b283025f..b9dec12c8a926 100644 --- a/sdk/spring/azure-spring-cloud-starter-eventhubs/pom.xml +++ b/sdk/spring/azure-spring-cloud-starter-eventhubs/pom.xml @@ -31,6 +31,11 @@ azure-spring-cloud-messaging 2.8.0-beta.1 + + com.azure.spring + azure-spring-cloud-resourcemanager + 2.8.0-beta.1 + diff --git a/sdk/spring/azure-spring-cloud-starter-servicebus/pom.xml b/sdk/spring/azure-spring-cloud-starter-servicebus/pom.xml index c625c75e3b662..c237ddd8f58a7 100644 --- a/sdk/spring/azure-spring-cloud-starter-servicebus/pom.xml +++ b/sdk/spring/azure-spring-cloud-starter-servicebus/pom.xml @@ -31,6 +31,11 @@ azure-messaging-servicebus 7.3.0 + + com.azure.spring + azure-spring-cloud-resourcemanager + 2.8.0-beta.1 + diff --git a/sdk/spring/azure-spring-cloud-starter-storage-queue/pom.xml b/sdk/spring/azure-spring-cloud-starter-storage-queue/pom.xml index 4c0c07567f4ed..7a4b909d605d2 100644 --- a/sdk/spring/azure-spring-cloud-starter-storage-queue/pom.xml +++ b/sdk/spring/azure-spring-cloud-starter-storage-queue/pom.xml @@ -21,19 +21,19 @@ com.azure.spring - azure-spring-cloud-context - 2.8.0-beta.1 + azure-spring-cloud-autoconfigure + 2.8.0-beta.1 runtime com.azure.spring - azure-spring-cloud-storage - 2.8.0-beta.1 + azure-spring-integration-storage-queue + 2.8.0-beta.1 com.azure.spring - azure-spring-integration-storage-queue - 2.8.0-beta.1 + azure-spring-cloud-resourcemanager + 2.8.0-beta.1 diff --git a/sdk/spring/azure-spring-cloud-storage/CHANGELOG.md b/sdk/spring/azure-spring-cloud-storage/CHANGELOG.md deleted file mode 100644 index c4ef798f3cf12..0000000000000 --- a/sdk/spring/azure-spring-cloud-storage/CHANGELOG.md +++ /dev/null @@ -1,52 +0,0 @@ -# Release History - -## 2.8.0-beta.1 (Unreleased) -This release is compatible with Spring Boot 2.5.0 - 2.5.3 and Spring Cloud 2020.0.3. -### Dependency Upgrades -- Upgrade to [spring-boot-dependencies:2.5.3](https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-dependencies/2.5.3/spring-boot-dependencies-2.5.3.pom). - - -## 2.7.0 (2021-07-20) -### Dependency Upgrades -- Upgrade to [spring-boot-dependencies:2.5.2](https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-dependencies/2.5.2/spring-boot-dependencies-2.5.2.pom). -- Upgrade to [spring-cloud-dependencies:2020.0.3](https://repo.maven.apache.org/maven2/org/springframework/cloud/spring-cloud-dependencies/2020.0.3/spring-cloud-dependencies-2020.0.3.pom). - -## 2.6.0 (2021-06-23) -### Breaking Changes -- Removed `TelemetryCollector` usage. - -## 2.5.0 (2021-05-24) -### New Features -- Upgrade to [spring-boot-dependencies:2.4.5](https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-dependencies/2.4.5/spring-boot-dependencies-2.4.5.pom). -- Upgrade to [spring-cloud-dependencies:2020.0.2](https://repo.maven.apache.org/maven2/org/springframework/cloud/spring-cloud-dependencies/2020.0.2/spring-cloud-dependencies-2020.0.2.pom). - - - -## 2.4.0 (2021-04-19) - - -## 2.3.0 (2021-03-22) -### New Features -- Upgrade to `Spring Boot` [2.4.3](https://github.com/spring-projects/spring-boot/releases/tag/v2.4.3). - -## 2.2.0 (2021-03-03) - - -## 2.1.0 (2021-01-20) - - -## 2.0.0 (2020-12-30) -### Breaking Changes -- Remove the `spring.cloud.azure.credential-file-path` property. -- Deprecated the `spring.cloud.azure.managed-identity.client-id` property, - use `spring.cloud.azure.client-id` to set the managed identity id when using Managed Identity. - -## 2.0.0-beta.1 (2020-11-19) -### Breaking Changes -- Change group id from `com.microsoft.azure` to `com.azure.spring`. -- Change artifact id from `spring-cloud-azure-storage` to `azure-spring-cloud-storage`. - -## 1.2.8 (2020-09-14) -### New Features - - Enable Storage starter to support overwriting blob data - - Enable Actuator for storage blob diff --git a/sdk/spring/azure-spring-cloud-storage/pom.xml b/sdk/spring/azure-spring-cloud-storage/pom.xml deleted file mode 100644 index e2c6bec3ae425..0000000000000 --- a/sdk/spring/azure-spring-cloud-storage/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - com.azure - azure-client-sdk-parent - 1.7.0 - ../../parents/azure-client-sdk-parent - - 4.0.0 - - com.azure.spring - azure-spring-cloud-storage - 2.8.0-beta.1 - Azure Spring Cloud Storage - - - 0.3 - - - - - com.azure.spring - azure-spring-cloud-context - 2.8.0-beta.1 - - - - org.springframework.boot - spring-boot-configuration-processor - 2.5.3 - true - - - - - com.azure - azure-storage-queue - 12.10.0 - true - - - - com.azure.spring - azure-spring-integration-storage-queue - 2.8.0-beta.1 - true - - - - - org.springframework.boot - spring-boot-actuator-autoconfigure - 2.5.3 - true - - - - org.hibernate.validator - hibernate-validator - 6.2.0.Final - - - - org.springframework.boot - spring-boot-starter-logging - 2.5.3 - - - - org.springframework.boot - spring-boot-starter-test - 2.5.3 - test - - - - - com.google.code.findbugs - jsr305 - 3.0.2 - provided - - - - - - - org.apache.maven.plugins - maven-enforcer-plugin - 3.0.0-M3 - - - - - org.hibernate.validator:hibernate-validator:[6.2.0.Final] - org.springframework.boot:spring-boot-actuator-autoconfigure:[2.5.3] - org.springframework.boot:spring-boot-configuration-processor:[2.5.3] - org.springframework.boot:spring-boot-starter-logging:[2.5.3] - - - - - - - - - - - annotation-process-for-java-8 - - [1.8,9) - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.8.1 - - - annotation-process-for-java-8 - - compile - - - - -proc:only - - - - - - - - - - annotation-process-for-java-11 - - [11,) - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.8.1 - - - annotation-process-for-java-11 - - compile - - - - -proc:only - - 11 - - - - - - - - - diff --git a/sdk/spring/azure-spring-cloud-storage/src/main/resources/META-INF/spring.factories b/sdk/spring/azure-spring-cloud-storage/src/main/resources/META-INF/spring.factories deleted file mode 100644 index d2cc2583bcfed..0000000000000 --- a/sdk/spring/azure-spring-cloud-storage/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1,2 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -com.azure.spring.cloud.autoconfigure.storage.AzureStorageQueueAutoConfiguration diff --git a/sdk/spring/azure-spring-cloud-storage/src/test/resources/logback-test.xml b/sdk/spring/azure-spring-cloud-storage/src/test/resources/logback-test.xml deleted file mode 100644 index ae0c6e60c13c8..0000000000000 --- a/sdk/spring/azure-spring-cloud-storage/src/test/resources/logback-test.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - diff --git a/sdk/spring/azure-spring-cloud-storage/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/sdk/spring/azure-spring-cloud-storage/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker deleted file mode 100644 index ca6ee9cea8ec1..0000000000000 --- a/sdk/spring/azure-spring-cloud-storage/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker +++ /dev/null @@ -1 +0,0 @@ -mock-maker-inline \ No newline at end of file diff --git a/sdk/spring/azure-spring-cloud-stream-binder-eventhubs/pom.xml b/sdk/spring/azure-spring-cloud-stream-binder-eventhubs/pom.xml index 16310056a0a27..04131591d744c 100644 --- a/sdk/spring/azure-spring-cloud-stream-binder-eventhubs/pom.xml +++ b/sdk/spring/azure-spring-cloud-stream-binder-eventhubs/pom.xml @@ -61,6 +61,12 @@ 2.8.0-beta.1 test + + + com.azure.spring + azure-spring-cloud-resourcemanager + 2.8.0-beta.1 + diff --git a/sdk/spring/azure-spring-cloud-stream-binder-eventhubs/src/main/java/com/azure/spring/eventhub/stream/binder/config/EventHubBinderConfiguration.java b/sdk/spring/azure-spring-cloud-stream-binder-eventhubs/src/main/java/com/azure/spring/eventhub/stream/binder/config/EventHubBinderConfiguration.java index afa52d04fa2ab..783db7a97b89b 100644 --- a/sdk/spring/azure-spring-cloud-stream-binder-eventhubs/src/main/java/com/azure/spring/eventhub/stream/binder/config/EventHubBinderConfiguration.java +++ b/sdk/spring/azure-spring-cloud-stream-binder-eventhubs/src/main/java/com/azure/spring/eventhub/stream/binder/config/EventHubBinderConfiguration.java @@ -4,12 +4,12 @@ package com.azure.spring.eventhub.stream.binder.config; import com.azure.resourcemanager.AzureResourceManager; -import com.azure.spring.cloud.autoconfigure.context.AzureContextAutoConfiguration; -import com.azure.spring.cloud.autoconfigure.context.AzureEnvironmentAutoConfiguration; +import com.azure.spring.cloud.autoconfigure.context.AzureResourceManagerAutoConfiguration; import com.azure.spring.cloud.autoconfigure.eventhub.AzureEventHubAutoConfiguration; import com.azure.spring.cloud.autoconfigure.eventhub.AzureEventHubProperties; +import com.azure.spring.cloud.autoconfigure.eventhub.EventHubConnectionStringProvider; import com.azure.spring.cloud.autoconfigure.eventhub.EventHubUtils; -import com.azure.spring.cloud.context.core.config.AzureProperties; +import com.azure.spring.cloud.context.core.api.AzureResourceMetadata; import com.azure.spring.cloud.context.core.impl.EventHubConsumerGroupManager; import com.azure.spring.cloud.context.core.impl.EventHubManager; import com.azure.spring.cloud.context.core.impl.EventHubNamespaceManager; @@ -18,7 +18,6 @@ import com.azure.spring.eventhub.stream.binder.provisioning.EventHubChannelProvisioner; import com.azure.spring.eventhub.stream.binder.provisioning.EventHubChannelResourceManagerProvisioner; import com.azure.spring.integration.eventhub.api.EventHubOperation; -import com.azure.spring.integration.eventhub.factory.EventHubConnectionStringProvider; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; @@ -34,8 +33,7 @@ @Configuration @ConditionalOnMissingBean(Binder.class) @Import({ - AzureEnvironmentAutoConfiguration.class, - AzureContextAutoConfiguration.class, + AzureResourceManagerAutoConfiguration.class, AzureEventHubAutoConfiguration.class, EventHubBinderHealthIndicatorConfiguration.class }) @@ -45,16 +43,17 @@ public class EventHubBinderConfiguration { @Bean @ConditionalOnMissingBean @ConditionalOnBean(EventHubNamespaceManager.class) - public EventHubManager eventHubManager(AzureResourceManager azureResourceManager, AzureProperties azureProperties) { - return new EventHubManager(azureResourceManager, azureProperties); + public EventHubManager eventHubManager(AzureResourceManager azureResourceManager, + AzureResourceMetadata azureResourceMetadata) { + return new EventHubManager(azureResourceManager, azureResourceMetadata); } @Bean @ConditionalOnMissingBean @ConditionalOnBean(EventHubNamespaceManager.class) public EventHubConsumerGroupManager eventHubConsumerGroupManager(AzureResourceManager azureResourceManager, - AzureProperties azureProperties) { - return new EventHubConsumerGroupManager(azureResourceManager, azureProperties); + AzureResourceMetadata azureContextProperties) { + return new EventHubConsumerGroupManager(azureResourceManager, azureContextProperties); } @Bean diff --git a/sdk/spring/azure-spring-cloud-stream-binder-eventhubs/src/main/java/com/azure/spring/eventhub/stream/binder/provisioning/EventHubChannelResourceManagerProvisioner.java b/sdk/spring/azure-spring-cloud-stream-binder-eventhubs/src/main/java/com/azure/spring/eventhub/stream/binder/provisioning/EventHubChannelResourceManagerProvisioner.java index 7fee8356d4a78..41c63a65e074a 100644 --- a/sdk/spring/azure-spring-cloud-stream-binder-eventhubs/src/main/java/com/azure/spring/eventhub/stream/binder/provisioning/EventHubChannelResourceManagerProvisioner.java +++ b/sdk/spring/azure-spring-cloud-stream-binder-eventhubs/src/main/java/com/azure/spring/eventhub/stream/binder/provisioning/EventHubChannelResourceManagerProvisioner.java @@ -8,7 +8,7 @@ import com.azure.spring.cloud.context.core.impl.EventHubConsumerGroupManager; import com.azure.spring.cloud.context.core.impl.EventHubManager; import com.azure.spring.cloud.context.core.impl.EventHubNamespaceManager; -import com.azure.spring.cloud.context.core.util.Tuple; +import com.azure.spring.core.util.Tuple; import org.springframework.cloud.stream.provisioning.ProvisioningException; import org.springframework.lang.NonNull; import org.springframework.util.Assert; diff --git a/sdk/spring/azure-spring-cloud-stream-binder-eventhubs/src/main/java/com/azure/spring/eventhub/stream/binder/provisioning/EventHubProvisioner.java b/sdk/spring/azure-spring-cloud-stream-binder-eventhubs/src/main/java/com/azure/spring/eventhub/stream/binder/provisioning/EventHubProvisioner.java new file mode 100644 index 0000000000000..ff4723f0fd0df --- /dev/null +++ b/sdk/spring/azure-spring-cloud-stream-binder-eventhubs/src/main/java/com/azure/spring/eventhub/stream/binder/provisioning/EventHubProvisioner.java @@ -0,0 +1,17 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.spring.eventhub.stream.binder.provisioning; + +/** + * + */ +public interface EventHubProvisioner { + + void provisionEventHubNamespace(String namespace); + + void provisionEventHub(String namespace, String eventHub); + + void provisionConsumerGroup(String namespace, String eventHub, String consumerGroup); + +} diff --git a/sdk/spring/azure-spring-cloud-stream-binder-servicebus-core/pom.xml b/sdk/spring/azure-spring-cloud-stream-binder-servicebus-core/pom.xml index 0f7d6c7e6c344..3a77a0abe73d0 100644 --- a/sdk/spring/azure-spring-cloud-stream-binder-servicebus-core/pom.xml +++ b/sdk/spring/azure-spring-cloud-stream-binder-servicebus-core/pom.xml @@ -27,11 +27,6 @@ spring-cloud-stream 3.1.3 - - com.azure.spring - azure-spring-cloud-autoconfigure - 2.8.0-beta.1 - com.azure.spring azure-spring-cloud-starter-servicebus diff --git a/sdk/spring/azure-spring-cloud-stream-binder-servicebus-queue/pom.xml b/sdk/spring/azure-spring-cloud-stream-binder-servicebus-queue/pom.xml index 800b54ce5ec5f..fdf78e6ef426d 100644 --- a/sdk/spring/azure-spring-cloud-stream-binder-servicebus-queue/pom.xml +++ b/sdk/spring/azure-spring-cloud-stream-binder-servicebus-queue/pom.xml @@ -50,9 +50,15 @@ 2.8.0-beta.1 test + + + com.azure.spring + azure-spring-cloud-resourcemanager + 2.8.0-beta.1 + + Without this dependency, javadoc throws a warning as it cannot find enum When.MAYBE + which is used in @Nullable annotation in reactor core classes --> com.google.code.findbugs jsr305 diff --git a/sdk/spring/azure-spring-cloud-stream-binder-servicebus-queue/src/main/java/com/azure/spring/servicebus/stream/binder/config/ServiceBusQueueBinderConfiguration.java b/sdk/spring/azure-spring-cloud-stream-binder-servicebus-queue/src/main/java/com/azure/spring/servicebus/stream/binder/config/ServiceBusQueueBinderConfiguration.java index 6ddc4dd48870f..9c4284ffacc3d 100644 --- a/sdk/spring/azure-spring-cloud-stream-binder-servicebus-queue/src/main/java/com/azure/spring/servicebus/stream/binder/config/ServiceBusQueueBinderConfiguration.java +++ b/sdk/spring/azure-spring-cloud-stream-binder-servicebus-queue/src/main/java/com/azure/spring/servicebus/stream/binder/config/ServiceBusQueueBinderConfiguration.java @@ -3,8 +3,7 @@ package com.azure.spring.servicebus.stream.binder.config; -import com.azure.spring.cloud.autoconfigure.context.AzureContextAutoConfiguration; -import com.azure.spring.cloud.autoconfigure.context.AzureEnvironmentAutoConfiguration; +import com.azure.spring.cloud.autoconfigure.context.AzureResourceManagerAutoConfiguration; import com.azure.spring.cloud.autoconfigure.servicebus.AzureServiceBusAutoConfiguration; import com.azure.spring.cloud.autoconfigure.servicebus.AzureServiceBusProperties; import com.azure.spring.cloud.autoconfigure.servicebus.AzureServiceBusQueueAutoConfiguration; @@ -29,8 +28,7 @@ @Configuration @ConditionalOnMissingBean(Binder.class) @Import({ - AzureEnvironmentAutoConfiguration.class, - AzureContextAutoConfiguration.class, + AzureResourceManagerAutoConfiguration.class, AzureServiceBusAutoConfiguration.class, AzureServiceBusQueueAutoConfiguration.class, ServiceBusQueueBinderHealthIndicatorConfiguration.class diff --git a/sdk/spring/azure-spring-cloud-stream-binder-servicebus-queue/src/main/java/com/azure/spring/servicebus/stream/binder/provisioning/ServiceBusQueueChannelResourceManagerProvisioner.java b/sdk/spring/azure-spring-cloud-stream-binder-servicebus-queue/src/main/java/com/azure/spring/servicebus/stream/binder/provisioning/ServiceBusQueueChannelResourceManagerProvisioner.java index 66896af6d3561..1f7fd898bef79 100644 --- a/sdk/spring/azure-spring-cloud-stream-binder-servicebus-queue/src/main/java/com/azure/spring/servicebus/stream/binder/provisioning/ServiceBusQueueChannelResourceManagerProvisioner.java +++ b/sdk/spring/azure-spring-cloud-stream-binder-servicebus-queue/src/main/java/com/azure/spring/servicebus/stream/binder/provisioning/ServiceBusQueueChannelResourceManagerProvisioner.java @@ -7,7 +7,7 @@ import com.azure.resourcemanager.servicebus.models.ServiceBusNamespace; import com.azure.spring.cloud.context.core.impl.ServiceBusNamespaceManager; import com.azure.spring.cloud.context.core.impl.ServiceBusQueueManager; -import com.azure.spring.cloud.context.core.util.Tuple; +import com.azure.spring.core.util.Tuple; import org.springframework.cloud.stream.provisioning.ProvisioningException; import org.springframework.lang.NonNull; import org.springframework.util.Assert; diff --git a/sdk/spring/azure-spring-cloud-stream-binder-servicebus-topic/pom.xml b/sdk/spring/azure-spring-cloud-stream-binder-servicebus-topic/pom.xml index 28db213445e83..9339b0f531135 100644 --- a/sdk/spring/azure-spring-cloud-stream-binder-servicebus-topic/pom.xml +++ b/sdk/spring/azure-spring-cloud-stream-binder-servicebus-topic/pom.xml @@ -44,6 +44,11 @@ true + + com.azure.spring + azure-spring-cloud-resourcemanager + 2.8.0-beta.1 + com.azure.spring azure-spring-cloud-stream-binder-test diff --git a/sdk/spring/azure-spring-cloud-stream-binder-servicebus-topic/src/main/java/com/azure/spring/servicebus/stream/binder/config/ServiceBusTopicBinderConfiguration.java b/sdk/spring/azure-spring-cloud-stream-binder-servicebus-topic/src/main/java/com/azure/spring/servicebus/stream/binder/config/ServiceBusTopicBinderConfiguration.java index 1cd98d4bee647..8eb5b5a1f52a7 100644 --- a/sdk/spring/azure-spring-cloud-stream-binder-servicebus-topic/src/main/java/com/azure/spring/servicebus/stream/binder/config/ServiceBusTopicBinderConfiguration.java +++ b/sdk/spring/azure-spring-cloud-stream-binder-servicebus-topic/src/main/java/com/azure/spring/servicebus/stream/binder/config/ServiceBusTopicBinderConfiguration.java @@ -3,8 +3,7 @@ package com.azure.spring.servicebus.stream.binder.config; -import com.azure.spring.cloud.autoconfigure.context.AzureContextAutoConfiguration; -import com.azure.spring.cloud.autoconfigure.context.AzureEnvironmentAutoConfiguration; +import com.azure.spring.cloud.autoconfigure.context.AzureResourceManagerAutoConfiguration; import com.azure.spring.cloud.autoconfigure.servicebus.AzureServiceBusAutoConfiguration; import com.azure.spring.cloud.autoconfigure.servicebus.AzureServiceBusProperties; import com.azure.spring.cloud.autoconfigure.servicebus.AzureServiceBusTopicAutoConfiguration; @@ -30,8 +29,7 @@ @Configuration @ConditionalOnMissingBean(Binder.class) @Import({ - AzureEnvironmentAutoConfiguration.class, - AzureContextAutoConfiguration.class, + AzureResourceManagerAutoConfiguration.class, AzureServiceBusAutoConfiguration.class, AzureServiceBusTopicAutoConfiguration.class, ServiceBusTopicBinderHealthIndicatorConfiguration.class diff --git a/sdk/spring/azure-spring-cloud-stream-binder-servicebus-topic/src/main/java/com/azure/spring/servicebus/stream/binder/provisioning/ServiceBusTopicChannelResourceManagerProvisioner.java b/sdk/spring/azure-spring-cloud-stream-binder-servicebus-topic/src/main/java/com/azure/spring/servicebus/stream/binder/provisioning/ServiceBusTopicChannelResourceManagerProvisioner.java index 26d8cca260759..cbd8a300e22e6 100644 --- a/sdk/spring/azure-spring-cloud-stream-binder-servicebus-topic/src/main/java/com/azure/spring/servicebus/stream/binder/provisioning/ServiceBusTopicChannelResourceManagerProvisioner.java +++ b/sdk/spring/azure-spring-cloud-stream-binder-servicebus-topic/src/main/java/com/azure/spring/servicebus/stream/binder/provisioning/ServiceBusTopicChannelResourceManagerProvisioner.java @@ -8,7 +8,7 @@ import com.azure.spring.cloud.context.core.impl.ServiceBusNamespaceManager; import com.azure.spring.cloud.context.core.impl.ServiceBusTopicManager; import com.azure.spring.cloud.context.core.impl.ServiceBusTopicSubscriptionManager; -import com.azure.spring.cloud.context.core.util.Tuple; +import com.azure.spring.core.util.Tuple; import org.springframework.cloud.stream.provisioning.ProvisioningException; import org.springframework.lang.NonNull; import org.springframework.util.Assert; diff --git a/sdk/spring/azure-spring-cloud-test-eventhubs/pom.xml b/sdk/spring/azure-spring-cloud-test-eventhubs/pom.xml index 0371df10cde03..73161c52758fa 100644 --- a/sdk/spring/azure-spring-cloud-test-eventhubs/pom.xml +++ b/sdk/spring/azure-spring-cloud-test-eventhubs/pom.xml @@ -24,10 +24,6 @@ org.springframework.boot spring-boot-starter-web - - org.springframework.cloud - spring-cloud-stream - com.azure.spring azure-spring-cloud-stream-binder-eventhubs diff --git a/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/factory/DefaultEventHubClientFactory.java b/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/factory/DefaultEventHubClientFactory.java index 6787551838267..748026a83cf63 100644 --- a/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/factory/DefaultEventHubClientFactory.java +++ b/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/factory/DefaultEventHubClientFactory.java @@ -11,8 +11,8 @@ import com.azure.messaging.eventhubs.EventProcessorClient; import com.azure.messaging.eventhubs.EventProcessorClientBuilder; import com.azure.messaging.eventhubs.checkpointstore.blob.BlobCheckpointStore; -import com.azure.spring.cloud.context.core.util.Memoizer; -import com.azure.spring.cloud.context.core.util.Tuple; +import com.azure.spring.core.util.Memoizer; +import com.azure.spring.core.util.Tuple; import com.azure.spring.integration.eventhub.api.EventHubClientFactory; import com.azure.spring.integration.eventhub.impl.EventHubProcessor; import com.azure.storage.blob.BlobContainerAsyncClient; @@ -31,7 +31,9 @@ import java.util.function.Consumer; import java.util.function.Function; -import static com.azure.spring.cloud.context.core.util.Constants.SPRING_EVENT_HUB_APPLICATION_ID; +import static com.azure.spring.core.ApplicationId.AZURE_SPRING_EVENT_HUB; +import static com.azure.spring.core.ApplicationId.VERSION; + /** * Default implementation of {@link EventHubClientFactory}. @@ -72,14 +74,14 @@ private EventHubConsumerAsyncClient createEventHubClient(String eventHubName, St return new EventHubClientBuilder() .connectionString(eventHubConnectionString, eventHubName) .consumerGroup(consumerGroup) - .clientOptions(new ClientOptions().setApplicationId(SPRING_EVENT_HUB_APPLICATION_ID)) + .clientOptions(new ClientOptions().setApplicationId(AZURE_SPRING_EVENT_HUB + VERSION)) .buildAsyncConsumerClient(); } private EventHubProducerAsyncClient createProducerClient(String eventHubName) { return new EventHubClientBuilder() .connectionString(eventHubConnectionString, eventHubName) - .clientOptions(new ClientOptions().setApplicationId(SPRING_EVENT_HUB_APPLICATION_ID)) + .clientOptions(new ClientOptions().setApplicationId(AZURE_SPRING_EVENT_HUB + VERSION)) .buildAsyncProducerClient(); } @@ -93,7 +95,7 @@ private EventProcessorClient createEventProcessorClientInternal(String eventHubN BlobContainerAsyncClient blobClient = new BlobContainerClientBuilder() .connectionString(checkpointStorageConnectionString) .containerName(containerName) - .httpLogOptions(new HttpLogOptions().setApplicationId(SPRING_EVENT_HUB_APPLICATION_ID)) + .httpLogOptions(new HttpLogOptions().setApplicationId(AZURE_SPRING_EVENT_HUB + VERSION)) .buildAsyncClient(); final Boolean isContainerExist = blobClient.exists().block(); diff --git a/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/impl/EventHubRxTemplate.java b/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/impl/EventHubRxTemplate.java index 0e1b24e60e200..4aa10c4050849 100644 --- a/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/impl/EventHubRxTemplate.java +++ b/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/impl/EventHubRxTemplate.java @@ -3,7 +3,7 @@ package com.azure.spring.integration.eventhub.impl; -import com.azure.spring.cloud.context.core.util.Tuple; +import com.azure.spring.core.util.Tuple; import com.azure.spring.integration.core.api.PartitionSupplier; import com.azure.spring.integration.eventhub.api.EventHubClientFactory; import com.azure.spring.integration.eventhub.api.EventHubRxOperation; diff --git a/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/impl/EventHubTemplate.java b/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/impl/EventHubTemplate.java index cab77e09699a8..40d67bd1ffeff 100644 --- a/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/impl/EventHubTemplate.java +++ b/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/impl/EventHubTemplate.java @@ -3,7 +3,7 @@ package com.azure.spring.integration.eventhub.impl; -import com.azure.spring.cloud.context.core.util.Tuple; +import com.azure.spring.core.util.Tuple; import com.azure.spring.integration.eventhub.api.EventHubClientFactory; import com.azure.spring.integration.eventhub.api.EventHubOperation; import org.slf4j.Logger; diff --git a/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/support/RxEventHubTestOperation.java b/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/support/RxEventHubTestOperation.java index ad52b686622e3..8be28600b7121 100644 --- a/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/support/RxEventHubTestOperation.java +++ b/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/support/RxEventHubTestOperation.java @@ -4,7 +4,7 @@ package com.azure.spring.integration.eventhub.support; import com.azure.messaging.eventhubs.models.EventContext; -import com.azure.spring.cloud.context.core.util.Tuple; +import com.azure.spring.core.util.Tuple; import com.azure.spring.integration.core.api.PartitionSupplier; import com.azure.spring.integration.eventhub.api.EventHubClientFactory; import com.azure.spring.integration.eventhub.api.EventHubRxOperation; diff --git a/sdk/spring/azure-spring-integration-eventhubs/src/test/java/com/azure/spring/integration/eventhub/DefaultEventHubClientFactoryTest.java b/sdk/spring/azure-spring-integration-eventhubs/src/test/java/com/azure/spring/integration/eventhub/DefaultEventHubClientFactoryTest.java index 247acda80ea70..3b99cb2f38b79 100644 --- a/sdk/spring/azure-spring-integration-eventhubs/src/test/java/com/azure/spring/integration/eventhub/DefaultEventHubClientFactoryTest.java +++ b/sdk/spring/azure-spring-integration-eventhubs/src/test/java/com/azure/spring/integration/eventhub/DefaultEventHubClientFactoryTest.java @@ -3,13 +3,16 @@ package com.azure.spring.integration.eventhub; -import com.azure.messaging.eventhubs.*; -import com.azure.spring.integration.eventhub.factory.EventHubConnectionStringProvider; +import com.azure.messaging.eventhubs.EventHubClientBuilder; +import com.azure.messaging.eventhubs.EventHubConsumerAsyncClient; +import com.azure.messaging.eventhubs.EventHubProducerAsyncClient; +import com.azure.messaging.eventhubs.EventProcessorClient; +import com.azure.messaging.eventhubs.EventProcessorClientBuilder; +import com.azure.spring.integration.eventhub.api.EventHubClientFactory; +import com.azure.spring.integration.eventhub.factory.DefaultEventHubClientFactory; import com.azure.spring.integration.eventhub.impl.EventHubProcessor; import com.azure.storage.blob.BlobContainerAsyncClient; import com.azure.storage.blob.BlobContainerClientBuilder; -import com.azure.spring.integration.eventhub.api.EventHubClientFactory; -import com.azure.spring.integration.eventhub.factory.DefaultEventHubClientFactory; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -30,7 +33,10 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.times; import static org.mockito.Mockito.when; -import static org.powermock.api.mockito.PowerMockito.*; +import static org.powermock.api.mockito.PowerMockito.mock; +import static org.powermock.api.mockito.PowerMockito.spy; +import static org.powermock.api.mockito.PowerMockito.verifyPrivate; +import static org.powermock.api.mockito.PowerMockito.whenNew; @RunWith(PowerMockRunner.class) @PowerMockIgnore({ "com.sun.org.apache.xerces.*", "javax.xml.*", "org.xml.*" }) @@ -54,9 +60,6 @@ public class DefaultEventHubClientFactoryTest { @Mock EventHubProcessor eventHubProcessor; - @Mock - EventHubConnectionStringProvider connectionStringProvider; - private EventHubClientFactory clientFactory; private String eventHubName = "eventHub"; private String consumerGroup = "group"; diff --git a/sdk/spring/azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/factory/AbstractServiceBusSenderFactory.java b/sdk/spring/azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/factory/AbstractServiceBusSenderFactory.java index e38b9d9880584..a30f66a23acdb 100644 --- a/sdk/spring/azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/factory/AbstractServiceBusSenderFactory.java +++ b/sdk/spring/azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/factory/AbstractServiceBusSenderFactory.java @@ -3,11 +3,6 @@ package com.azure.spring.integration.servicebus.factory; -import com.azure.spring.cloud.context.core.impl.ServiceBusNamespaceManager; -import com.azure.spring.cloud.context.core.impl.ServiceBusQueueManager; -import com.azure.spring.cloud.context.core.impl.ServiceBusTopicManager; -import com.azure.spring.cloud.context.core.impl.ServiceBusTopicSubscriptionManager; - import javax.annotation.Nullable; /** @@ -20,13 +15,8 @@ abstract class AbstractServiceBusSenderFactory implements ServiceBusSenderFactor protected final String connectionString; @Nullable - protected ServiceBusNamespaceManager serviceBusNamespaceManager; - @Nullable - protected ServiceBusQueueManager serviceBusQueueManager; - @Nullable - protected ServiceBusTopicManager serviceBusTopicManager; - @Nullable - protected ServiceBusTopicSubscriptionManager serviceBusTopicSubscriptionManager; + protected ServiceBusProvisioner serviceBusProvisioner; + @Nullable protected String namespace; @@ -34,21 +24,8 @@ abstract class AbstractServiceBusSenderFactory implements ServiceBusSenderFactor this.connectionString = connectionString; } - public void setServiceBusNamespaceManager(ServiceBusNamespaceManager serviceBusNamespaceManager) { - this.serviceBusNamespaceManager = serviceBusNamespaceManager; - } - - public void setServiceBusQueueManager(ServiceBusQueueManager serviceBusQueueManager) { - this.serviceBusQueueManager = serviceBusQueueManager; - } - - public void setServiceBusTopicManager(ServiceBusTopicManager serviceBusTopicManager) { - this.serviceBusTopicManager = serviceBusTopicManager; - } - - public void setServiceBusTopicSubscriptionManager( - ServiceBusTopicSubscriptionManager serviceBusTopicSubscriptionManager) { - this.serviceBusTopicSubscriptionManager = serviceBusTopicSubscriptionManager; + public void setServiceBusProvisioner(@Nullable ServiceBusProvisioner serviceBusProvisioner) { + this.serviceBusProvisioner = serviceBusProvisioner; } public void setNamespace(String namespace) { diff --git a/sdk/spring/azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/factory/DefaultServiceBusQueueClientFactory.java b/sdk/spring/azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/factory/DefaultServiceBusQueueClientFactory.java index 574040d094b7a..591571fe4dfcd 100644 --- a/sdk/spring/azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/factory/DefaultServiceBusQueueClientFactory.java +++ b/sdk/spring/azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/factory/DefaultServiceBusQueueClientFactory.java @@ -21,7 +21,9 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.function.Consumer; -import static com.azure.spring.cloud.context.core.util.Constants.SPRING_SERVICE_BUS_APPLICATION_ID; +import static com.azure.spring.core.ApplicationId.AZURE_SPRING_SERVICE_BUS; +import static com.azure.spring.core.ApplicationId.VERSION; + /** * Default implementation of {@link ServiceBusQueueClientFactory}. Client will be cached to improve performance @@ -45,10 +47,10 @@ public DefaultServiceBusQueueClientFactory(String connectionString) { public DefaultServiceBusQueueClientFactory(String connectionString, AmqpTransportType amqpTransportType) { super(connectionString); this.serviceBusClientBuilder = new ServiceBusClientBuilder() - .connectionString(connectionString) - .transportType(amqpTransportType) - .clientOptions(new ClientOptions() - .setApplicationId(SPRING_SERVICE_BUS_APPLICATION_ID)); + .connectionString(connectionString) + .transportType(amqpTransportType) + .clientOptions(new ClientOptions() + .setApplicationId(AZURE_SPRING_SERVICE_BUS + VERSION)); } private void close(Map map, Consumer close) { diff --git a/sdk/spring/azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/factory/DefaultServiceBusTopicClientFactory.java b/sdk/spring/azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/factory/DefaultServiceBusTopicClientFactory.java index b9e7d67ff27a9..26508d094f38e 100644 --- a/sdk/spring/azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/factory/DefaultServiceBusTopicClientFactory.java +++ b/sdk/spring/azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/factory/DefaultServiceBusTopicClientFactory.java @@ -3,15 +3,15 @@ package com.azure.spring.integration.servicebus.factory; -import com.azure.core.amqp.AmqpTransportType; import com.azure.core.amqp.AmqpRetryOptions; +import com.azure.core.amqp.AmqpTransportType; import com.azure.core.util.ClientOptions; import com.azure.messaging.servicebus.ServiceBusClientBuilder; import com.azure.messaging.servicebus.ServiceBusErrorContext; import com.azure.messaging.servicebus.ServiceBusProcessorClient; import com.azure.messaging.servicebus.ServiceBusReceivedMessageContext; import com.azure.messaging.servicebus.ServiceBusSenderAsyncClient; -import com.azure.spring.cloud.context.core.util.Tuple; +import com.azure.spring.core.util.Tuple; import com.azure.spring.integration.servicebus.ServiceBusClientConfig; import com.azure.spring.integration.servicebus.ServiceBusMessageProcessor; import org.slf4j.Logger; @@ -22,7 +22,8 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.function.Consumer; -import static com.azure.spring.cloud.context.core.util.Constants.SPRING_SERVICE_BUS_APPLICATION_ID; +import static com.azure.spring.core.ApplicationId.AZURE_SPRING_SERVICE_BUS; +import static com.azure.spring.core.ApplicationId.VERSION; /** * Default implementation of {@link ServiceBusTopicClientFactory}. Client will be cached to improve performance @@ -44,10 +45,10 @@ public DefaultServiceBusTopicClientFactory(String connectionString) { public DefaultServiceBusTopicClientFactory(String connectionString, AmqpTransportType amqpTransportType) { super(connectionString); this.serviceBusClientBuilder = new ServiceBusClientBuilder() - .connectionString(connectionString) - .transportType(amqpTransportType) - .clientOptions(new ClientOptions() - .setApplicationId(SPRING_SERVICE_BUS_APPLICATION_ID)); + .connectionString(connectionString) + .transportType(amqpTransportType) + .clientOptions(new ClientOptions() + .setApplicationId(AZURE_SPRING_SERVICE_BUS + VERSION)); } private void close(Map map, Consumer close) { diff --git a/sdk/spring/azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/factory/ServiceBusProvisioner.java b/sdk/spring/azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/factory/ServiceBusProvisioner.java new file mode 100644 index 0000000000000..7fef2fdf7da59 --- /dev/null +++ b/sdk/spring/azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/factory/ServiceBusProvisioner.java @@ -0,0 +1,19 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.spring.integration.servicebus.factory; + +/** + * An interface to provision Service Bus resources. + */ +public interface ServiceBusProvisioner { + + void provisionNamespace(String namespace); + + void provisionQueue(String namespace, String queue); + + void provisionTopic(String namespace, String topic); + + void provisionSubscription(String namespace, String topic, String subscription); + +} diff --git a/sdk/spring/azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/topic/ServiceBusTopicTemplate.java b/sdk/spring/azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/topic/ServiceBusTopicTemplate.java index 73652d9cf8211..76916ab1ea693 100644 --- a/sdk/spring/azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/topic/ServiceBusTopicTemplate.java +++ b/sdk/spring/azure-spring-integration-servicebus/src/main/java/com/azure/spring/integration/servicebus/topic/ServiceBusTopicTemplate.java @@ -4,7 +4,7 @@ package com.azure.spring.integration.servicebus.topic; import com.azure.messaging.servicebus.ServiceBusProcessorClient; -import com.azure.spring.cloud.context.core.util.Tuple; +import com.azure.spring.core.util.Tuple; import com.azure.spring.integration.servicebus.DefaultServiceBusMessageProcessor; import com.azure.spring.integration.servicebus.ServiceBusClientConfig; import com.azure.spring.integration.servicebus.ServiceBusRuntimeException; diff --git a/sdk/spring/azure-spring-integration-storage-queue/src/main/java/com/azure/spring/integration/storage/queue/factory/DefaultStorageQueueClientFactory.java b/sdk/spring/azure-spring-integration-storage-queue/src/main/java/com/azure/spring/integration/storage/queue/factory/DefaultStorageQueueClientFactory.java index 0e89afbc6a1ae..549f29043808a 100644 --- a/sdk/spring/azure-spring-integration-storage-queue/src/main/java/com/azure/spring/integration/storage/queue/factory/DefaultStorageQueueClientFactory.java +++ b/sdk/spring/azure-spring-integration-storage-queue/src/main/java/com/azure/spring/integration/storage/queue/factory/DefaultStorageQueueClientFactory.java @@ -3,8 +3,9 @@ package com.azure.spring.integration.storage.queue.factory; +import com.azure.core.http.policy.HttpLogDetailLevel; import com.azure.core.http.policy.HttpLogOptions; -import com.azure.spring.cloud.context.core.util.Memoizer; +import com.azure.spring.core.util.Memoizer; import com.azure.storage.queue.QueueAsyncClient; import com.azure.storage.queue.QueueClientBuilder; import org.slf4j.Logger; @@ -13,7 +14,8 @@ import java.util.function.Function; -import static com.azure.spring.cloud.context.core.util.Constants.SPRING_INTEGRATION_STORAGE_QUEUE_APPLICATION_ID; +import static com.azure.spring.core.ApplicationId.AZURE_SPRING_STORAGE_QUEUE; +import static com.azure.spring.core.ApplicationId.VERSION; /** * Default client factory for Storage Queue. @@ -22,9 +24,15 @@ public class DefaultStorageQueueClientFactory implements StorageQueueClientFacto private static final Logger LOGGER = LoggerFactory.getLogger(DefaultStorageQueueClientFactory.class); private final String connectionString; private final Function queueClientCreator = Memoizer.memoize(this::createQueueClient); + private final HttpLogDetailLevel httpLogDetailLevel; public DefaultStorageQueueClientFactory(@NonNull String connectionString) { + this(connectionString, HttpLogDetailLevel.NONE); + } + + public DefaultStorageQueueClientFactory(@NonNull String connectionString, HttpLogDetailLevel httpLogDetailLevel) { this.connectionString = connectionString; + this.httpLogDetailLevel = httpLogDetailLevel; } @Override @@ -36,7 +44,9 @@ private QueueAsyncClient createQueueClient(String queueName) { final QueueAsyncClient queueClient = new QueueClientBuilder() .connectionString(this.connectionString) .queueName(queueName) - .httpLogOptions(new HttpLogOptions().setApplicationId(SPRING_INTEGRATION_STORAGE_QUEUE_APPLICATION_ID)) + .httpLogOptions(new HttpLogOptions() + .setApplicationId(AZURE_SPRING_STORAGE_QUEUE + VERSION) + .setLogLevel(httpLogDetailLevel)) .buildAsyncClient(); // TODO (xiada): when used with connection string, this call will throw exception diff --git a/sdk/spring/ci.yml b/sdk/spring/ci.yml index 130f1cf087c19..55f45e54c6351 100644 --- a/sdk/spring/ci.yml +++ b/sdk/spring/ci.yml @@ -121,12 +121,15 @@ extends: parameters: ServiceDirectory: spring Artifacts: - - name: azure-identity-spring + - name: azure-spring-cloud-context + groupId: com.azure.spring + safeName: azurespringcloudcontext + - name: azure-spring-cloud-autoconfigure groupId: com.azure.spring - safeName: azureidentityspring - - name: azure-spring-boot + safeName: azurespringcloudautoconfigure + - name: azure-spring-cloud-resourcemanager groupId: com.azure.spring - safeName: azurespringboot + safeName: azurespringcloudresourcemanager - name: azure-spring-boot-starter groupId: com.azure.spring safeName: azurespringbootstarter @@ -159,9 +162,6 @@ extends: groupId: com.azure.spring safeName: azurespringbootstarterstorage skipUpdatePackageJson: true - - name: azure-spring-cloud-context - groupId: com.azure.spring - safeName: azurespringcloudcontext - name: azure-spring-integration-core groupId: com.azure.spring safeName: azurespringintegrationcore @@ -177,12 +177,6 @@ extends: - name: azure-spring-integration-storage-queue groupId: com.azure.spring safeName: azurespringintegrationstoragequeue - - name: azure-spring-cloud-storage - groupId: com.azure.spring - safeName: azurespringcloudstorage - - name: azure-spring-cloud-autoconfigure - groupId: com.azure.spring - safeName: azurespringcloudautoconfigure - name: azure-spring-cloud-messaging groupId: com.azure.spring safeName: azurespringcloudmessaging diff --git a/sdk/spring/pom.xml b/sdk/spring/pom.xml index 3767a196f77c8..40dc4e2e71fd0 100644 --- a/sdk/spring/pom.xml +++ b/sdk/spring/pom.xml @@ -13,11 +13,9 @@ coverage - azure-identity-spring - azure-spring-boot azure-spring-cloud-autoconfigure azure-spring-cloud-context - azure-spring-cloud-storage + azure-spring-cloud-resourcemanager azure-spring-integration-core azure-spring-integration-eventhubs azure-spring-integration-servicebus @@ -31,13 +29,8 @@ com.azure.spring - azure-identity-spring - 1.8.0-beta.1 - - - com.azure.spring - azure-spring-boot - 3.8.0-beta.1 + azure-spring-cloud-context + 2.8.0-beta.1 com.azure.spring @@ -46,13 +39,8 @@ com.azure.spring - azure-spring-cloud-context - 2.8.0-beta.1 - - - com.azure.spring - azure-spring-cloud-storage - 2.8.0-beta.1 + azure-spring-cloud-resourcemanager + 2.8.0-beta.1 com.azure.spring @@ -129,8 +117,8 @@ true - azure-identity-spring - azure-spring-boot + azure-spring-cloud-context + azure-spring-cloud-autoconfigure azure-spring-boot-starter azure-spring-boot-starter-active-directory azure-spring-boot-starter-active-directory-b2c @@ -154,15 +142,13 @@ azure-spring-boot-test-selenium-common azure-spring-boot-test-servicebus-jms azure-spring-boot-test-storage - azure-spring-cloud-autoconfigure - azure-spring-cloud-context + azure-spring-cloud-resourcemanager azure-spring-cloud-messaging azure-spring-cloud-starter-cache azure-spring-cloud-starter-eventhubs azure-spring-cloud-starter-eventhubs-kafka azure-spring-cloud-starter-servicebus azure-spring-cloud-starter-storage-queue - azure-spring-cloud-storage azure-spring-cloud-stream-binder-eventhubs azure-spring-cloud-stream-binder-servicebus-core azure-spring-cloud-stream-binder-servicebus-queue