From 0dcd502c700ffabbd26ab8b7b77102625d46abee Mon Sep 17 00:00:00 2001 From: Sean McGrail Date: Mon, 19 Jul 2021 09:46:51 -0700 Subject: [PATCH] S3 PresignHeadObject Support (#1346) * Add HeadObject Presign Support * Regenerated Client --- .../AwsHttpPresignURLClientGenerator.java | 3 +- service/s3/api_op_HeadObject.go | 31 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/codegen/smithy-aws-go-codegen/src/main/java/software/amazon/smithy/aws/go/codegen/AwsHttpPresignURLClientGenerator.java b/codegen/smithy-aws-go-codegen/src/main/java/software/amazon/smithy/aws/go/codegen/AwsHttpPresignURLClientGenerator.java index b16af253523..87b1b0640d4 100644 --- a/codegen/smithy-aws-go-codegen/src/main/java/software/amazon/smithy/aws/go/codegen/AwsHttpPresignURLClientGenerator.java +++ b/codegen/smithy-aws-go-codegen/src/main/java/software/amazon/smithy/aws/go/codegen/AwsHttpPresignURLClientGenerator.java @@ -84,7 +84,8 @@ public class AwsHttpPresignURLClientGenerator implements GoIntegration { ShapeId.from("com.amazonaws.s3#AmazonS3"), SetUtils.of( ShapeId.from("com.amazonaws.s3#GetObject"), ShapeId.from("com.amazonaws.s3#PutObject"), - ShapeId.from("com.amazonaws.s3#UploadPart") + ShapeId.from("com.amazonaws.s3#UploadPart"), + ShapeId.from("com.amazonaws.s3#HeadObject") ), ShapeId.from("com.amazonaws.sts#AWSSecurityTokenServiceV20110615"), SetUtils.of( ShapeId.from("com.amazonaws.sts#GetCallerIdentity")) diff --git a/service/s3/api_op_HeadObject.go b/service/s3/api_op_HeadObject.go index 73688ddf3b1..c38d520b6c9 100644 --- a/service/s3/api_op_HeadObject.go +++ b/service/s3/api_op_HeadObject.go @@ -786,3 +786,34 @@ func addHeadObjectUpdateEndpoint(stack *middleware.Stack, options Options) error UseARNRegion: options.UseARNRegion, }) } + +// PresignHeadObject is used to generate a presigned HTTP Request which contains +// presigned URL, signed headers and HTTP method used. +func (c *PresignClient) PresignHeadObject(ctx context.Context, params *HeadObjectInput, optFns ...func(*PresignOptions)) (*v4.PresignedHTTPRequest, error) { + if params == nil { + params = &HeadObjectInput{} + } + options := c.options.copy() + for _, fn := range optFns { + fn(&options) + } + clientOptFns := append(options.ClientOptions, withNopHTTPClientAPIOption) + + result, _, err := c.client.invokeOperation(ctx, "HeadObject", params, clientOptFns, + c.client.addOperationHeadObjectMiddlewares, + presignConverter(options).convertToPresignMiddleware, + addHeadObjectPayloadAsUnsigned, + ) + if err != nil { + return nil, err + } + + out := result.(*v4.PresignedHTTPRequest) + return out, nil +} + +func addHeadObjectPayloadAsUnsigned(stack *middleware.Stack, options Options) error { + v4.RemoveContentSHA256HeaderMiddleware(stack) + v4.RemoveComputePayloadSHA256Middleware(stack) + return v4.AddUnsignedPayloadMiddleware(stack) +}