Skip to content

Commit

Permalink
fix: pr feedback
Browse files Browse the repository at this point in the history
  • Loading branch information
0marperez committed Jan 9, 2025
1 parent 7cbe93d commit 8f65c72
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 42 deletions.
4 changes: 2 additions & 2 deletions aws-runtime/aws-config/api/aws-config.api
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -212,14 +214,14 @@ public object AwsSdkSetting {
/**
* Configures request checksum calculation
*/
public val AwsRequestChecksumCalculation: EnvironmentSetting<String> =
strEnvSetting("aws.requestChecksumCalculation", "AWS_REQUEST_CHECKSUM_CALCULATION")
public val AwsRequestChecksumCalculation: EnvironmentSetting<RequestHttpChecksumConfig> =
enumEnvSetting<RequestHttpChecksumConfig>("aws.requestChecksumCalculation", "AWS_REQUEST_CHECKSUM_CALCULATION")

/**
* Configures response checksum validation
*/
public val AwsResponseChecksumValidation: EnvironmentSetting<String> =
strEnvSetting("aws.responseChecksumValidation", "AWS_RESPONSE_CHECKSUM_VALIDATION")
public val AwsResponseChecksumValidation: EnvironmentSetting<ResponseHttpChecksumConfig> =
enumEnvSetting<ResponseHttpChecksumConfig>("aws.responseChecksumValidation", "AWS_RESPONSE_CHECKSUM_VALIDATION")
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -20,20 +19,8 @@ import aws.smithy.kotlin.runtime.util.PlatformProvider
public suspend fun resolveRequestChecksumCalculation(
platform: PlatformProvider = PlatformProvider.System,
profile: LazyAsyncValue<AwsProfile>,
): 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.
Expand All @@ -43,17 +30,5 @@ private fun parseRequestHttpChecksumConfig(unparsedString: String?): RequestHttp
public suspend fun resolveResponseChecksumValidation(
platform: PlatformProvider = PlatformProvider.System,
profile: LazyAsyncValue<AwsProfile>,
): 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
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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 {
Expand Down
2 changes: 1 addition & 1 deletion aws-runtime/aws-http/api/aws-http.api
Original file line number Diff line number Diff line change
Expand Up @@ -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 <init> (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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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" }
}
}

/**
Expand Down

0 comments on commit 8f65c72

Please sign in to comment.