Loading CHANGELOG.next.toml +7 −1 Original line number Diff line number Diff line Loading @@ -10,3 +10,9 @@ # references = ["smithy-rs#920"] # meta = { "breaking" = false, "tada" = false, "bug" = false, "target" = "client | server | all"} # author = "rcoh" [[aws-sdk-rust]] message = "Fix aws-sdk-rust#930 (PutSnapshotBlock)" references = ["smithy-rs#3126", "aws-sdk-rust#930"] meta = { "breaking" = false, "tada" = false, "bug" = true } author = "rcoh" aws/sdk-codegen/src/main/kotlin/software/amazon/smithy/rustsdk/SigV4AuthDecorator.kt +1 −1 Original line number Diff line number Diff line Loading @@ -226,7 +226,7 @@ private class AuthOperationCustomization(private val codegenContext: ClientCodeg if (authSchemes.containsKey(SigV4Trait.ID)) { val unsignedPayload = section.operationShape.hasTrait<UnsignedPayloadTrait>() val doubleUriEncode = unsignedPayload || !disableDoubleEncode(codegenContext.serviceShape) val contentSha256Header = needsAmzSha256(codegenContext.serviceShape) val contentSha256Header = needsAmzSha256(codegenContext.serviceShape) || unsignedPayload val normalizeUrlPath = !disableUriPathNormalization(codegenContext.serviceShape) rustTemplate( """ Loading aws/sdk-codegen/src/test/kotlin/software/amazon/smithy/rustsdk/SigV4AuthDecoratorTest.kt 0 → 100644 +64 −0 Original line number Diff line number Diff line /* * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ package software.amazon.smithy.rustsdk import org.junit.jupiter.api.Test import software.amazon.smithy.rust.codegen.core.testutil.asSmithyModel class SigV4AuthDecoratorTest { private val modelWithSigV4AuthScheme = """ namespace test use aws.auth#sigv4 use aws.api#service use aws.protocols#restJson1 use smithy.rules#endpointRuleSet use aws.auth#unsignedPayload use smithy.test#httpRequestTests @auth([sigv4]) @sigv4(name: "dontcare") @restJson1 @endpointRuleSet({ "version": "1.0", "rules": [{ "type": "endpoint", "conditions": [], "endpoint": { "url": "https://example.com" } }], "parameters": { "endpoint": { "required": true, "type": "string", "builtIn": "SDK::Endpoint" }, } }) @service(sdkId: "dontcare") service TestService { version: "2023-01-01", operations: [SomeOperation] } structure SomeOutput { something: String } structure SomeInput { @httpPayload something: Bytestream } @streaming blob Bytestream @httpRequestTests([{ id: "unsignedPayload", protocol: restJson1, method: "POST", uri: "/", params: { something: "hello" }, headers: { "x-amz-content-sha256": "UNSIGNED-PAYLOAD", }, }]) @unsignedPayload @http(uri: "/", method: "POST") operation SomeOperation { input: SomeInput, output: SomeOutput } """.asSmithyModel() @Test fun unsignedPayloadSetsCorrectHeader() { awsSdkIntegrationTest(modelWithSigV4AuthScheme) { _, _ -> } } } Loading
CHANGELOG.next.toml +7 −1 Original line number Diff line number Diff line Loading @@ -10,3 +10,9 @@ # references = ["smithy-rs#920"] # meta = { "breaking" = false, "tada" = false, "bug" = false, "target" = "client | server | all"} # author = "rcoh" [[aws-sdk-rust]] message = "Fix aws-sdk-rust#930 (PutSnapshotBlock)" references = ["smithy-rs#3126", "aws-sdk-rust#930"] meta = { "breaking" = false, "tada" = false, "bug" = true } author = "rcoh"
aws/sdk-codegen/src/main/kotlin/software/amazon/smithy/rustsdk/SigV4AuthDecorator.kt +1 −1 Original line number Diff line number Diff line Loading @@ -226,7 +226,7 @@ private class AuthOperationCustomization(private val codegenContext: ClientCodeg if (authSchemes.containsKey(SigV4Trait.ID)) { val unsignedPayload = section.operationShape.hasTrait<UnsignedPayloadTrait>() val doubleUriEncode = unsignedPayload || !disableDoubleEncode(codegenContext.serviceShape) val contentSha256Header = needsAmzSha256(codegenContext.serviceShape) val contentSha256Header = needsAmzSha256(codegenContext.serviceShape) || unsignedPayload val normalizeUrlPath = !disableUriPathNormalization(codegenContext.serviceShape) rustTemplate( """ Loading
aws/sdk-codegen/src/test/kotlin/software/amazon/smithy/rustsdk/SigV4AuthDecoratorTest.kt 0 → 100644 +64 −0 Original line number Diff line number Diff line /* * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ package software.amazon.smithy.rustsdk import org.junit.jupiter.api.Test import software.amazon.smithy.rust.codegen.core.testutil.asSmithyModel class SigV4AuthDecoratorTest { private val modelWithSigV4AuthScheme = """ namespace test use aws.auth#sigv4 use aws.api#service use aws.protocols#restJson1 use smithy.rules#endpointRuleSet use aws.auth#unsignedPayload use smithy.test#httpRequestTests @auth([sigv4]) @sigv4(name: "dontcare") @restJson1 @endpointRuleSet({ "version": "1.0", "rules": [{ "type": "endpoint", "conditions": [], "endpoint": { "url": "https://example.com" } }], "parameters": { "endpoint": { "required": true, "type": "string", "builtIn": "SDK::Endpoint" }, } }) @service(sdkId: "dontcare") service TestService { version: "2023-01-01", operations: [SomeOperation] } structure SomeOutput { something: String } structure SomeInput { @httpPayload something: Bytestream } @streaming blob Bytestream @httpRequestTests([{ id: "unsignedPayload", protocol: restJson1, method: "POST", uri: "/", params: { something: "hello" }, headers: { "x-amz-content-sha256": "UNSIGNED-PAYLOAD", }, }]) @unsignedPayload @http(uri: "/", method: "POST") operation SomeOperation { input: SomeInput, output: SomeOutput } """.asSmithyModel() @Test fun unsignedPayloadSetsCorrectHeader() { awsSdkIntegrationTest(modelWithSigV4AuthScheme) { _, _ -> } } }