From 8f65c72d836825d278aa7a860f25adbd44567259 Mon Sep 17 00:00:00 2001 From: 0marperez Date: Thu, 9 Jan 2025 18:33:26 -0500 Subject: [PATCH] fix: pr feedback --- aws-runtime/aws-config/api/aws-config.api | 4 +-- .../kotlin/runtime/config/AwsSdkSetting.kt | 10 +++--- .../ResolveFlexibleChecksumsConfig.kt | 33 +++-------------- .../runtime/config/profile/AwsProfile.kt | 36 ++++++++++++++++--- aws-runtime/aws-http/api/aws-http.api | 2 +- ...siteFlexibleChecksumResponseInterceptor.kt | 7 ++-- 6 files changed, 50 insertions(+), 42 deletions(-) diff --git a/aws-runtime/aws-config/api/aws-config.api b/aws-runtime/aws-config/api/aws-config.api index 1d5c135a3ae..5f95b5c120d 100644 --- a/aws-runtime/aws-config/api/aws-config.api +++ b/aws-runtime/aws-config/api/aws-config.api @@ -476,9 +476,9 @@ public final class aws/sdk/kotlin/runtime/config/profile/AwsProfileKt { public static synthetic fun getLongOrNull$default (Laws/sdk/kotlin/runtime/config/profile/ConfigSection;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Ljava/lang/Long; public static final fun getMaxAttempts (Laws/sdk/kotlin/runtime/config/profile/ConfigSection;)Ljava/lang/Integer; public static final fun getRegion (Laws/sdk/kotlin/runtime/config/profile/ConfigSection;)Ljava/lang/String; - public static final fun getRequestChecksumCalculation (Laws/sdk/kotlin/runtime/config/profile/ConfigSection;)Ljava/lang/String; + public static final fun getRequestChecksumCalculation (Laws/sdk/kotlin/runtime/config/profile/ConfigSection;)Laws/smithy/kotlin/runtime/client/config/RequestHttpChecksumConfig; public static final fun getRequestMinCompressionSizeBytes (Laws/sdk/kotlin/runtime/config/profile/ConfigSection;)Ljava/lang/Long; - public static final fun getResponseChecksumValidation (Laws/sdk/kotlin/runtime/config/profile/ConfigSection;)Ljava/lang/String; + public static final fun getResponseChecksumValidation (Laws/sdk/kotlin/runtime/config/profile/ConfigSection;)Laws/smithy/kotlin/runtime/client/config/ResponseHttpChecksumConfig; public static final fun getRetryMode (Laws/sdk/kotlin/runtime/config/profile/ConfigSection;)Laws/smithy/kotlin/runtime/client/config/RetryMode; public static final fun getRoleArn (Laws/sdk/kotlin/runtime/config/profile/ConfigSection;)Ljava/lang/String; public static final fun getSdkUserAgentAppId (Laws/sdk/kotlin/runtime/config/profile/ConfigSection;)Ljava/lang/String; diff --git a/aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/config/AwsSdkSetting.kt b/aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/config/AwsSdkSetting.kt index edbfe7cd92c..cbab4aeccfd 100644 --- a/aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/config/AwsSdkSetting.kt +++ b/aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/config/AwsSdkSetting.kt @@ -9,6 +9,8 @@ import aws.sdk.kotlin.runtime.InternalSdkApi import aws.sdk.kotlin.runtime.config.endpoints.AccountIdEndpointMode import aws.sdk.kotlin.runtime.http.AWS_APP_ID_ENV import aws.sdk.kotlin.runtime.http.AWS_APP_ID_PROP +import aws.smithy.kotlin.runtime.client.config.RequestHttpChecksumConfig +import aws.smithy.kotlin.runtime.client.config.ResponseHttpChecksumConfig import aws.smithy.kotlin.runtime.client.config.RetryMode import aws.smithy.kotlin.runtime.config.* import aws.smithy.kotlin.runtime.net.url.Url @@ -212,14 +214,14 @@ public object AwsSdkSetting { /** * Configures request checksum calculation */ - public val AwsRequestChecksumCalculation: EnvironmentSetting = - strEnvSetting("aws.requestChecksumCalculation", "AWS_REQUEST_CHECKSUM_CALCULATION") + public val AwsRequestChecksumCalculation: EnvironmentSetting = + enumEnvSetting("aws.requestChecksumCalculation", "AWS_REQUEST_CHECKSUM_CALCULATION") /** * Configures response checksum validation */ - public val AwsResponseChecksumValidation: EnvironmentSetting = - strEnvSetting("aws.responseChecksumValidation", "AWS_RESPONSE_CHECKSUM_VALIDATION") + public val AwsResponseChecksumValidation: EnvironmentSetting = + enumEnvSetting("aws.responseChecksumValidation", "AWS_RESPONSE_CHECKSUM_VALIDATION") } /** diff --git a/aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/config/checksums/ResolveFlexibleChecksumsConfig.kt b/aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/config/checksums/ResolveFlexibleChecksumsConfig.kt index bbbbd241e28..5925fb858f0 100644 --- a/aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/config/checksums/ResolveFlexibleChecksumsConfig.kt +++ b/aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/config/checksums/ResolveFlexibleChecksumsConfig.kt @@ -1,6 +1,5 @@ package aws.sdk.kotlin.runtime.config.checksums -import aws.sdk.kotlin.runtime.ConfigurationException import aws.sdk.kotlin.runtime.InternalSdkApi import aws.sdk.kotlin.runtime.config.AwsSdkSetting import aws.sdk.kotlin.runtime.config.profile.AwsProfile @@ -20,20 +19,8 @@ import aws.smithy.kotlin.runtime.util.PlatformProvider public suspend fun resolveRequestChecksumCalculation( platform: PlatformProvider = PlatformProvider.System, profile: LazyAsyncValue, -): RequestHttpChecksumConfig { - val unparsedString = AwsSdkSetting.AwsRequestChecksumCalculation.resolve(platform) ?: profile.get().requestChecksumCalculation - return parseRequestHttpChecksumConfig(unparsedString) -} - -private fun parseRequestHttpChecksumConfig(unparsedString: String?): RequestHttpChecksumConfig = - when (unparsedString?.uppercase()) { - null -> RequestHttpChecksumConfig.WHEN_SUPPORTED - "WHEN_SUPPORTED" -> RequestHttpChecksumConfig.WHEN_SUPPORTED - "WHEN_REQUIRED" -> RequestHttpChecksumConfig.WHEN_REQUIRED - else -> throw ConfigurationException( - "'$unparsedString' is not a valid value for 'requestChecksumCalculation'. Valid values are: ${RequestHttpChecksumConfig.entries}", - ) - } +): RequestHttpChecksumConfig = + AwsSdkSetting.AwsRequestChecksumCalculation.resolve(platform) ?: profile.get().requestChecksumCalculation ?: RequestHttpChecksumConfig.WHEN_SUPPORTED /** * Attempts to resolve responseChecksumValidation from the specified sources. @@ -43,17 +30,5 @@ private fun parseRequestHttpChecksumConfig(unparsedString: String?): RequestHttp public suspend fun resolveResponseChecksumValidation( platform: PlatformProvider = PlatformProvider.System, profile: LazyAsyncValue, -): ResponseHttpChecksumConfig { - val unparsedString = AwsSdkSetting.AwsResponseChecksumValidation.resolve(platform) ?: profile.get().responseChecksumValidation - return parseResponseHttpChecksumConfig(unparsedString) -} - -private fun parseResponseHttpChecksumConfig(unparsedString: String?): ResponseHttpChecksumConfig = - when (unparsedString?.uppercase()) { - null -> ResponseHttpChecksumConfig.WHEN_SUPPORTED - "WHEN_SUPPORTED" -> ResponseHttpChecksumConfig.WHEN_SUPPORTED - "WHEN_REQUIRED" -> ResponseHttpChecksumConfig.WHEN_REQUIRED - else -> throw ConfigurationException( - "'$unparsedString' is not a valid value for 'responseChecksumValidation'. Valid values are: ${ResponseHttpChecksumConfig.entries}", - ) - } +): ResponseHttpChecksumConfig = + AwsSdkSetting.AwsResponseChecksumValidation.resolve(platform) ?: profile.get().responseChecksumValidation ?: ResponseHttpChecksumConfig.WHEN_SUPPORTED diff --git a/aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/config/profile/AwsProfile.kt b/aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/config/profile/AwsProfile.kt index 119420a09e3..e0cdf445f1a 100644 --- a/aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/config/profile/AwsProfile.kt +++ b/aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/config/profile/AwsProfile.kt @@ -8,6 +8,8 @@ package aws.sdk.kotlin.runtime.config.profile import aws.sdk.kotlin.runtime.ConfigurationException import aws.sdk.kotlin.runtime.InternalSdkApi import aws.sdk.kotlin.runtime.config.endpoints.AccountIdEndpointMode +import aws.smithy.kotlin.runtime.client.config.RequestHttpChecksumConfig +import aws.smithy.kotlin.runtime.client.config.ResponseHttpChecksumConfig import aws.smithy.kotlin.runtime.client.config.RetryMode import aws.smithy.kotlin.runtime.net.url.Url @@ -171,15 +173,15 @@ public val AwsProfile.sigV4aSigningRegionSet: String? * Configures request checksum calculation */ @InternalSdkApi -public val AwsProfile.requestChecksumCalculation: String? - get() = getOrNull("request_checksum_calculation") +public val AwsProfile.requestChecksumCalculation: RequestHttpChecksumConfig? + get() = getOrNull("request_checksum_calculation")?.parseRequestHttpChecksumConfig() /** * Configures response checksum validation */ @InternalSdkApi -public val AwsProfile.responseChecksumValidation: String? - get() = getOrNull("response_checksum_validation") +public val AwsProfile.responseChecksumValidation: ResponseHttpChecksumConfig? + get() = getOrNull("response_checksum_validation")?.parseResponseHttpChecksumConfig() /** * Parse a config value as a boolean, ignoring case. @@ -214,6 +216,32 @@ public fun AwsProfile.getLongOrNull(key: String, subKey: String? = null): Long? ) } +/** + * Parse a string value as [ResponseHttpChecksumConfig] + */ +private fun String?.parseResponseHttpChecksumConfig(): ResponseHttpChecksumConfig? = + when (this?.uppercase()) { + null -> null + "WHEN_SUPPORTED" -> ResponseHttpChecksumConfig.WHEN_SUPPORTED + "WHEN_REQUIRED" -> ResponseHttpChecksumConfig.WHEN_REQUIRED + else -> throw ConfigurationException( + "'$this' is not a valid value for 'response_checksum_validation'. Valid values are: ${ResponseHttpChecksumConfig.entries}", + ) + } + +/** + * Parse a string value as [RequestHttpChecksumConfig] + */ +private fun String?.parseRequestHttpChecksumConfig(): RequestHttpChecksumConfig? = + when (this?.uppercase()) { + null -> null + "WHEN_SUPPORTED" -> RequestHttpChecksumConfig.WHEN_SUPPORTED + "WHEN_REQUIRED" -> RequestHttpChecksumConfig.WHEN_REQUIRED + else -> throw ConfigurationException( + "'$this' is not a valid value for 'request_checksum_calculation'. Valid values are: ${RequestHttpChecksumConfig.entries}", + ) + } + internal fun AwsProfile.getUrlOrNull(key: String, subKey: String? = null): Url? = getOrNull(key, subKey)?.let { try { diff --git a/aws-runtime/aws-http/api/aws-http.api b/aws-runtime/aws-http/api/aws-http.api index c9aadd34375..d7f994bc485 100644 --- a/aws-runtime/aws-http/api/aws-http.api +++ b/aws-runtime/aws-http/api/aws-http.api @@ -198,7 +198,7 @@ public final class aws/sdk/kotlin/runtime/http/interceptors/BusinessMetricsInter public final class aws/sdk/kotlin/runtime/http/interceptors/IgnoreCompositeFlexibleChecksumResponseInterceptor : aws/smithy/kotlin/runtime/http/interceptors/FlexibleChecksumsResponseInterceptor { public fun (ZLaws/smithy/kotlin/runtime/client/config/ResponseHttpChecksumConfig;)V - public fun ignoreChecksum (Ljava/lang/String;)Z + public fun ignoreChecksum (Ljava/lang/String;Laws/smithy/kotlin/runtime/telemetry/logging/Logger;)Z } public final class aws/sdk/kotlin/runtime/http/interceptors/UnsupportedSigningAlgorithmInterceptor : aws/smithy/kotlin/runtime/client/Interceptor { diff --git a/aws-runtime/aws-http/common/src/aws/sdk/kotlin/runtime/http/interceptors/IgnoreCompositeFlexibleChecksumResponseInterceptor.kt b/aws-runtime/aws-http/common/src/aws/sdk/kotlin/runtime/http/interceptors/IgnoreCompositeFlexibleChecksumResponseInterceptor.kt index 834924d5081..4b6dcd5f563 100644 --- a/aws-runtime/aws-http/common/src/aws/sdk/kotlin/runtime/http/interceptors/IgnoreCompositeFlexibleChecksumResponseInterceptor.kt +++ b/aws-runtime/aws-http/common/src/aws/sdk/kotlin/runtime/http/interceptors/IgnoreCompositeFlexibleChecksumResponseInterceptor.kt @@ -2,6 +2,7 @@ package aws.sdk.kotlin.runtime.http.interceptors import aws.smithy.kotlin.runtime.client.config.ResponseHttpChecksumConfig import aws.smithy.kotlin.runtime.http.interceptors.FlexibleChecksumsResponseInterceptor +import aws.smithy.kotlin.runtime.telemetry.logging.Logger /** * Variant of the [FlexibleChecksumsResponseInterceptor] where composite checksums are not validated @@ -13,8 +14,10 @@ public class IgnoreCompositeFlexibleChecksumResponseInterceptor( responseValidationRequired, responseChecksumValidation, ) { - override fun ignoreChecksum(checksum: String): Boolean = - checksum.isCompositeChecksum() + override fun ignoreChecksum(checksum: String, logger: Logger): Boolean = + checksum.isCompositeChecksum().also { compositeChecksum -> + if (compositeChecksum) logger.info { "Checksum validation was skipped because it was a composite checksum" } + } } /**