diff --git a/.changelog/3d0e99b328234ac884bc58cfed344b21.json b/.changelog/3d0e99b328234ac884bc58cfed344b21.json new file mode 100644 index 00000000000..ec79bc74eee --- /dev/null +++ b/.changelog/3d0e99b328234ac884bc58cfed344b21.json @@ -0,0 +1,8 @@ +{ + "id": "3d0e99b3-2823-4ac8-84bc-58cfed344b21", + "type": "feature", + "description": "Add presign functionality for sts:AssumeRole operation", + "modules": [ + "service/sts" + ] +} \ No newline at end of file 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 2422a7410c7..7d13ae09467 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 @@ -100,7 +100,9 @@ public class AwsHttpPresignURLClientGenerator implements GoIntegration { ShapeId.from("com.amazonaws.s3#DeleteBucket") ), ShapeId.from("com.amazonaws.sts#AWSSecurityTokenServiceV20110615"), SetUtils.of( - ShapeId.from("com.amazonaws.sts#GetCallerIdentity")) + ShapeId.from("com.amazonaws.sts#GetCallerIdentity"), + ShapeId.from("com.amazonaws.sts#AssumeRole") + ) ); // map of service to list of operations for which presignedURL client and operation should diff --git a/service/sts/api_op_AssumeRole.go b/service/sts/api_op_AssumeRole.go index 7d00b6bd7fa..9ae61e72c3c 100644 --- a/service/sts/api_op_AssumeRole.go +++ b/service/sts/api_op_AssumeRole.go @@ -415,3 +415,27 @@ func newServiceMetadataMiddleware_opAssumeRole(region string) *awsmiddleware.Reg OperationName: "AssumeRole", } } + +// PresignAssumeRole is used to generate a presigned HTTP Request which contains +// presigned URL, signed headers and HTTP method used. +func (c *PresignClient) PresignAssumeRole(ctx context.Context, params *AssumeRoleInput, optFns ...func(*PresignOptions)) (*v4.PresignedHTTPRequest, error) { + if params == nil { + params = &AssumeRoleInput{} + } + options := c.options.copy() + for _, fn := range optFns { + fn(&options) + } + clientOptFns := append(options.ClientOptions, withNopHTTPClientAPIOption) + + result, _, err := c.client.invokeOperation(ctx, "AssumeRole", params, clientOptFns, + c.client.addOperationAssumeRoleMiddlewares, + presignConverter(options).convertToPresignMiddleware, + ) + if err != nil { + return nil, err + } + + out := result.(*v4.PresignedHTTPRequest) + return out, nil +}