diff --git a/CHANGELOG.next.toml b/CHANGELOG.next.toml index 31f396ac92..bc37fcab3e 100644 --- a/CHANGELOG.next.toml +++ b/CHANGELOG.next.toml @@ -264,6 +264,12 @@ references = ["smithy-rs#2437", "aws-sdk-rust#600"] meta = { "breaking" = false, "tada" = false, "bug" = false, "target" = "client" } author = "ysaito1001" +[[aws-sdk-rust]] +message = "Enable presigning for S3's `HeadObject` operation." +references = ["aws-sdk-rust#753", "smithy-rs#2451"] +meta = { "breaking" = false, "tada" = true, "bug" = false } +author = "Velfi" + [[smithy-rs]] message = "Smithy members named `send` were previously renamed to `send_value` at codegen time. These will now be called `send` in the generated code." references = ["smithy-rs#2382"] diff --git a/aws/sdk-codegen/src/main/kotlin/software/amazon/smithy/rustsdk/AwsPresigningDecorator.kt b/aws/sdk-codegen/src/main/kotlin/software/amazon/smithy/rustsdk/AwsPresigningDecorator.kt index 1ecca4651e..7e359f40e3 100644 --- a/aws/sdk-codegen/src/main/kotlin/software/amazon/smithy/rustsdk/AwsPresigningDecorator.kt +++ b/aws/sdk-codegen/src/main/kotlin/software/amazon/smithy/rustsdk/AwsPresigningDecorator.kt @@ -62,6 +62,7 @@ internal val PRESIGNABLE_OPERATIONS by lazy { mapOf( // S3 // TODO(https://github.com/awslabs/aws-sdk-rust/issues/488) Technically, all S3 operations support presigning + ShapeId.from("com.amazonaws.s3#HeadObject") to PresignableOperation(PayloadSigningType.UNSIGNED_PAYLOAD), ShapeId.from("com.amazonaws.s3#GetObject") to PresignableOperation(PayloadSigningType.UNSIGNED_PAYLOAD), ShapeId.from("com.amazonaws.s3#PutObject") to PresignableOperation(PayloadSigningType.UNSIGNED_PAYLOAD), ShapeId.from("com.amazonaws.s3#UploadPart") to PresignableOperation(PayloadSigningType.UNSIGNED_PAYLOAD), diff --git a/aws/sdk/integration-tests/s3/tests/presigning.rs b/aws/sdk/integration-tests/s3/tests/presigning.rs index c68424a594..f2f0dcacc4 100644 --- a/aws/sdk/integration-tests/s3/tests/presigning.rs +++ b/aws/sdk/integration-tests/s3/tests/presigning.rs @@ -142,3 +142,18 @@ async fn test_presigning_object_lambda() -> Result<(), Box> { assert_eq!(presigned.uri().to_string(), "https://my-banner-ap-name-123456789012.s3-object-lambda.us-west-2.amazonaws.com/test2.txt?x-id=GetObject&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ANOTREAL%2F20090213%2Fus-west-2%2Fs3-object-lambda%2Faws4_request&X-Amz-Date=20090213T233131Z&X-Amz-Expires=30&X-Amz-SignedHeaders=host&X-Amz-Signature=027976453050b6f9cca7af80a59c05ee572b462e0fc1ef564c59412b903fcdf2&X-Amz-Security-Token=notarealsessiontoken"); Ok(()) } + +#[tokio::test] +async fn test_presigned_head_object() -> Result<(), Box> { + let presigned = presign_input!(s3::input::HeadObjectInput::builder() + .bucket("bucket") + .key("key") + .build()?); + + assert_eq!("HEAD", presigned.method().as_str()); + assert_eq!( + presigned.uri().to_string(), + "https://bucket.s3.us-east-1.amazonaws.com/key?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ANOTREAL%2F20090213%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20090213T233131Z&X-Amz-Expires=30&X-Amz-SignedHeaders=host&X-Amz-Signature=6b97012e70d5ee3528b5591e0e90c0f45e0fa303506f854eff50ff922751a193&X-Amz-Security-Token=notarealsessiontoken", + ); + Ok(()) +}