From 399cc3c76728ac7405b2c123449a6ea1e79d5285 Mon Sep 17 00:00:00 2001 From: matejnedic Date: Thu, 10 Oct 2024 20:25:15 +0200 Subject: [PATCH] Test --- .../autoconfigure/s3/S3AutoConfiguration.java | 57 +++++++++++-------- .../s3/S3AutoConfigurationTests.java | 14 ++--- 2 files changed, 37 insertions(+), 34 deletions(-) diff --git a/spring-cloud-aws-autoconfigure/src/main/java/io/awspring/cloud/autoconfigure/s3/S3AutoConfiguration.java b/spring-cloud-aws-autoconfigure/src/main/java/io/awspring/cloud/autoconfigure/s3/S3AutoConfiguration.java index b05f52b89..f6d8d5a78 100644 --- a/spring-cloud-aws-autoconfigure/src/main/java/io/awspring/cloud/autoconfigure/s3/S3AutoConfiguration.java +++ b/spring-cloud-aws-autoconfigure/src/main/java/io/awspring/cloud/autoconfigure/s3/S3AutoConfiguration.java @@ -52,6 +52,8 @@ import software.amazon.awssdk.services.s3.S3ClientBuilder; import software.amazon.awssdk.services.s3.presigner.S3Presigner; import software.amazon.encryption.s3.S3EncryptionClient; +import software.amazon.encryption.s3.materials.AesKeyring; +import software.amazon.encryption.s3.materials.DefaultCryptoMaterialsManager; /** * {@link EnableAutoConfiguration} for {@link S3Client} and {@link S3ProtocolResolver}. @@ -105,15 +107,19 @@ S3EncryptionClient.Builder s3EncrpytionClientBuilder(AwsClientBuilderConfigurer ObjectProvider> configurer, ObjectProvider connectionDetails, ObjectProvider s3ClientCustomizers, - ObjectProvider awsSyncClientCustomizers) { + ObjectProvider awsSyncClientCustomizers, + ObjectProvider rsaProvider, ObjectProvider aesProvider) { S3EncryptionClient.Builder builder = awsClientBuilderConfigurer.configureSyncClient(S3EncryptionClient.builder(), this.properties, connectionDetails.getIfAvailable(), configurer. getIfAvailable(), s3ClientCustomizers.orderedStream(), awsSyncClientCustomizers.orderedStream()); + Optional.ofNullable(this.properties.getCrossRegionEnabled()).ifPresent(builder::crossRegionAccessEnabled); builder.serviceConfiguration(this.properties.toS3Configuration()); + + configureEncryptionProperties(rsaProvider, aesProvider, builder); return builder; } - + @Bean @ConditionalOnMissingBean(S3Operations.class) @ConditionalOnBean(S3ObjectConverter.class) @@ -152,29 +158,8 @@ S3Client s3Client(S3Properties properties, S3ClientBuilder s3ClientBuilder) { @Bean @ConditionalOnMissingBean @ConditionalOnClass(name = {"software.amazon.encryption.s3.S3EncryptionClient"}) - S3Client s3EncryptionClient(S3Properties properties,S3EncryptionClient.Builder s3EncryptionBuilder, S3ClientBuilder s3ClientBuilder, - ObjectProvider rsaProvider, ObjectProvider aesProvider) { - PropertyMapper propertyMapper = PropertyMapper.get(); - S3EncryptionProperties encryptionProperties = properties.getEncryption(); - + S3Client s3EncryptionClient(S3EncryptionClient.Builder s3EncryptionBuilder, S3ClientBuilder s3ClientBuilder) { s3EncryptionBuilder.wrappedClient(s3ClientBuilder.build()); - propertyMapper.from(encryptionProperties::isEnableDelayedAuthenticationMode) - .to(s3EncryptionBuilder::enableDelayedAuthenticationMode); - propertyMapper.from(encryptionProperties::isEnableLegacyUnauthenticatedModes) - .to(s3EncryptionBuilder::enableLegacyUnauthenticatedModes); - propertyMapper.from(encryptionProperties::isEnableMultipartPutObject) - .to(s3EncryptionBuilder::enableMultipartPutObject); - - if (!StringUtils.hasText(encryptionProperties.getKeyId())) { - if (aesProvider.getIfAvailable() != null) { - s3EncryptionBuilder.aesKey(aesProvider.getObject().generateSecretKey()); - } - else { - s3EncryptionBuilder.rsaKeyPair(rsaProvider.getObject().generateKeyPair()); - } - return s3EncryptionBuilder.build(); - } - propertyMapper.from(encryptionProperties::getKeyId).to(s3EncryptionBuilder::kmsKeyId); return s3EncryptionBuilder.build(); } @@ -197,4 +182,28 @@ S3OutputStreamProvider inMemoryBufferingS3StreamProvider(S3Client s3Client, contentTypeResolver.orElseGet(PropertiesS3ObjectContentTypeResolver::new)); } + + private void configureEncryptionProperties(ObjectProvider rsaProvider, ObjectProvider aesProvider, S3EncryptionClient.Builder builder) { + PropertyMapper propertyMapper = PropertyMapper.get(); + var encryptionProperties = properties.getEncryption(); + + propertyMapper.from(encryptionProperties::isEnableDelayedAuthenticationMode) + .to(builder::enableDelayedAuthenticationMode); + propertyMapper.from(encryptionProperties::isEnableLegacyUnauthenticatedModes) + .to(builder::enableLegacyUnauthenticatedModes); + propertyMapper.from(encryptionProperties::isEnableMultipartPutObject) + .to(builder::enableMultipartPutObject); + + if (!StringUtils.hasText(properties.getEncryption().getKeyId())) { + if (aesProvider.getIfAvailable() != null) { + builder.aesKey(aesProvider.getObject().generateSecretKey()); + } + else { + builder.rsaKeyPair(rsaProvider.getObject().generateKeyPair()); + } + } else { + propertyMapper.from(encryptionProperties::getKeyId).to(builder::kmsKeyId); + } + } + } diff --git a/spring-cloud-aws-autoconfigure/src/test/java/io/awspring/cloud/autoconfigure/s3/S3AutoConfigurationTests.java b/spring-cloud-aws-autoconfigure/src/test/java/io/awspring/cloud/autoconfigure/s3/S3AutoConfigurationTests.java index fcbe68394..9d082c4f8 100644 --- a/spring-cloud-aws-autoconfigure/src/test/java/io/awspring/cloud/autoconfigure/s3/S3AutoConfigurationTests.java +++ b/spring-cloud-aws-autoconfigure/src/test/java/io/awspring/cloud/autoconfigure/s3/S3AutoConfigurationTests.java @@ -36,8 +36,11 @@ import io.awspring.cloud.s3.S3Template; import java.io.IOException; import java.net.URI; +import java.security.KeyPair; import java.time.Duration; import java.util.Objects; + +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; @@ -137,7 +140,7 @@ void autoconfigurationIsNotTriggeredWhenS3ModuleIsNotOnClasspath() { class S3ClientTests { @Test void s3ClientCanBeOverwritten() { - contextRunnerEncryption.withUserConfiguration(CustomS3ClientConfiguration.class).run(context -> { + contextRunnerEncryption.withPropertyValues("spring.cloud.aws.s3.encryption.keyId:234abcd-12ab-34cd-56ef-1234567890ab").withUserConfiguration(CustomS3ClientConfiguration.class).run(context -> { assertThat(context).hasSingleBean(S3Client.class); }); } @@ -150,15 +153,6 @@ void createsStandardClientWhenCrossRegionAndEncryptionModuleIsNotInClasspath() { }); } - @Test - void createsEncryptionClientWhenCrossRegionModuleIsNotInClasspath() { - contextRunnerEncryption - .withPropertyValues("spring.cloud.aws.s3.encryption.keyId:234abcd-12ab-34cd-56ef-1234567890ab") - .run(context -> { - assertThat(context).hasSingleBean(S3EncryptionClient.class); - }); - } - @Test void createsEncryptionClientBackedByRsa() { contextRunnerEncryption.withPropertyValues().withUserConfiguration(CustomRsaProvider.class).run(context -> {