8000 Fix SRA auth trailing checksum retry bug (#2438) · aws/aws-sdk-go-v2@0f8ad11 · GitHub
[go: up one dir, main page]

Skip to content

Commit 0f8ad11

Browse files
authored
Fix SRA auth trailing checksum retry bug (#2438)
1 parent efbc5aa commit 0f8ad11

30 files changed

+325
-16
lines changed

aws/retry/middleware.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -328,10 +328,12 @@ func AddRetryMiddlewares(stack *smithymiddle.Stack, options AddRetryMiddlewaresO
328328
middleware.LogAttempts = options.LogRetryAttempts
329329
})
330330

331-
if err := stack.Finalize.Add(attempt, smithymiddle.After); err != nil {
331+
// index retry to before signing, if signing exists
332+
if err := stack.Finalize.Insert(attempt, "Signing", smithymiddle.Before); err != nil {
332333
return err
333334
}
334-
if err := stack.Finalize.Add(&MetricsHeader{}, smithymiddle.After); err != nil {
335+
336+
if err := stack.Finalize.Insert(&MetricsHeader{}, attempt.ID(), smithymiddle.After); err != nil {
335337
return err
336338
}
337339
return nil

codegen/smithy-aws-go-codegen/src/main/java/software/amazon/smithy/aws/go/codegen/AwsHttpPresignURLClientGenerator.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,14 @@ private void writeConvertToPresignMiddleware(
375375
if _, ok := stack.Finalize.Get(($1P)(nil).ID()); ok {
376376
stack.Finalize.Remove(($1P)(nil).ID())
377377
}""", SdkGoTypes.ServiceInternal.AcceptEncoding.DisableGzip);
378+
writer.write("""
379+
if _, ok := stack.Finalize.Get(($1P)(nil).ID()); ok {
380+
stack.Finalize.Remove(($1P)(nil).ID())
381+
}""", SdkGoTypes.Aws.Retry.Attempt);
382+
writer.write("""
383+
if _, ok := stack.Finalize.Get(($1P)(nil).ID()); ok {
384+
stack.Finalize.Remove(($1P)(nil).ID())
385+
}""", SdkGoTypes.Aws.Retry.MetricsHeader);
378386
writer.write("stack.Deserialize.Clear()");
379387
writer.write("stack.Build.Remove(($P)(nil).ID())", requestInvocationID);
380388
writer.write("stack.Build.Remove($S)", "UserAgent");

codegen/smithy-aws-go-codegen/src/main/java/software/amazon/smithy/aws/go/codegen/SdkGoTypes.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,20 @@ public static final class Aws {
3434
public static final Symbol IsCredentialsProvider = AwsGoDependency.AWS_CORE.valueSymbol("IsCredentialsProvider");
3535
public static final Symbol AnonymousCredentials = AwsGoDependency.AWS_CORE.pointableSymbol("AnonymousCredentials");
3636

37+
3738
public static final class Middleware {
3839
public static final Symbol GetRequiresLegacyEndpoints = AwsGoDependency.AWS_MIDDLEWARE.valueSymbol("GetRequiresLegacyEndpoints");
3940
public static final Symbol GetSigningName = AwsGoDependency.AWS_MIDDLEWARE.valueSymbol("GetSigningName");
4041
public static final Symbol GetSigningRegion = AwsGoDependency.AWS_MIDDLEWARE.valueSymbol("GetSigningRegion");
4142
public static final Symbol SetSigningName = AwsGoDependency.AWS_MIDDLEWARE.valueSymbol("SetSigningName");
4243
public static final Symbol SetSigningRegion = AwsGoDependency.AWS_MIDDLEWARE.valueSymbol("SetSigningRegion");
4344
}
45+
46+
47+
public static final class Retry {
48+
public static final Symbol Attempt = AwsGoDependency.AWS_RETRY.pointableSymbol("Attempt");
49+
public static final Symbol MetricsHeader = AwsGoDependency.AWS_RETRY.pointableSymbol("MetricsHeader");
50+
}
4451
}
4552

4653
public static final class Internal {
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package client
2+
3+
import (
4+
"context"
5+
"github.com/aws/smithy-go/middleware"
6+
)
7+
8+
type getIdentityMiddleware struct {
9+
options Options
10+
}
11+
12+
func (*getIdentityMiddleware) ID() string {
13+
return "GetIdentity"
14+
}
15+
16+
func (m *getIdentityMiddleware) HandleFinalize(ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler) (
17+
out middleware.FinalizeOutput, metadata middleware.Metadata, err error,
18+
) {
19+
return next.HandleFinalize(ctx, in)
20+
}
21+
22+
type signRequestMiddleware struct {
23+
}
24+
25+
func (*signRequestMiddleware) ID() string {
26+
return "Signing"
27+
}
28+
29+
func (m *signRequestMiddleware) HandleFinalize(ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler) (
30+
out middleware.FinalizeOutput, metadata middleware.Metadata, err error,
31+
) {
32+
return next.HandleFinalize(ctx, in)
33+
}
34+
35+
type resolveAuthSchemeMiddleware struct {
36+
operation string
37+
options Options
38+
}
39+
40+
func (*resolveAuthSchemeMiddleware) ID() string {
41+
return "ResolveAuthScheme"
42+
}
43+
44+
func (m *resolveAuthSchemeMiddleware) HandleFinalize(ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler) (
45+
out middleware.FinalizeOutput, metadata middleware.Metadata, err error,
46+
) {
47+
return next.HandleFinalize(ctx, in)
48+
}

credentials/endpointcreds/internal/client/client.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ func (c *Client) GetCredentials(ctx context.Context, params *GetCredentialsInput
101101
stack.Serialize.Add(&serializeOpGetCredential{}, smithymiddleware.After)
102102
stack.Build.Add(&buildEndpoint{Endpoint: options.Endpoint}, smithymiddleware.After)
103103
stack.Deserialize.Add(&deserializeOpGetCredential{}, smithymiddleware.After)
104+
addProtocolFinalizerMiddlewares(stack, options, "GetCredentials")
104105
retry.AddRetryMiddlewares(stack, retry.AddRetryMiddlewaresOptions{Retryer: options.Retryer})
105106
middleware.AddSDKAgentKey(middleware.FeatureMetadata, ServiceID)
106107
smithyhttp.AddErrorCloseResponseBodyMiddleware(stack)
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package client
2+
3+
import (
4+
"context"
5+
"github.com/aws/smithy-go/middleware"
6+
)
7+
8+
type resolveEndpointV2Middleware struct {
9+
options Options
10+
}
11+
12+
func (*resolveEndpointV2Middleware) ID() string {
13+
return "ResolveEndpointV2"
14+
}
15+
16+
func (m *resolveEndpointV2Middleware) HandleFinalize(ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler) (
17+
out middleware.FinalizeOutput, metadata middleware.Metadata, err error,
18+
) {
19+
return next.HandleFinalize(ctx, in)
20+
}

credentials/endpointcreds/internal/client/middleware.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,3 +146,19 @@ func stof(code int) smithy.ErrorFault {
146146
}
147147
return smithy.FaultClient
148148
}
149+
150+
func addProtocolFinalizerMiddlewares(stack *smithymiddleware.Stack, options Options, operation string) error {
151+
if err := stack.Finalize.Add(&resolveAuthSchemeMiddleware{operation: operation, options: options}, smithymiddleware.Before); err != nil {
152+
return fmt.Errorf("add ResolveAuthScheme: %w", err)
153+
}
154+
if err := stack.Finalize.Insert(&getIdentityMiddleware{options: options}, "ResolveAuthScheme", smithymiddleware.After); err != nil {
155+
return fmt.Errorf("add GetIdentity: %w", err)
156+
}
157+
if err := stack.Finalize.Insert(&resolveEndpointV2Middleware{options: options}, "GetIdentity", smithymiddleware.After); err != nil {
158+
return fmt.Errorf("add ResolveEndpointV2: %w", err)
159+
}
160+
if err := stack.Finalize.Insert(&signRequestMiddleware{}, "ResolveEndpointV2", smithymiddleware.After); err != nil {
161+
return fmt.Errorf("add Signing: %w", err)
162+
}
163+
return nil
164+
}

feature/ec2/imds/api_op_GetDynamicData.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ type GetDynamicDataOutput struct {
5656
func addGetDynamicDataMiddleware(stack *middleware.Stack, options Options) error {
5757
return addAPIRequestMiddleware(stack,
5858
options,
59+
"GetDynamicData",
5960
buildGetDynamicDataPath,
6061
buildGetDynamicDataOutput)
6162
}

feature/ec2/imds/api_op_GetIAMInfo.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ type GetIAMInfoOutput struct {
5353
func addGetIAMInfoMiddleware(stack *middleware.Stack, options Options) error {
5454
return addAPIRequestMiddleware(stack,
5555
options,
56+
"GetIAMInfo",
5657
buildGetIAMInfoPath,
5758
buildGetIAMInfoOutput,
5859
)

feature/ec2/imds/api_op_GetInstanceIdentityDocument.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ type GetInstanceIdentityDocumentOutput struct {
5454
func addGetInstanceIdentityDocumentMiddleware(stack *middleware.Stack, options Options) error {
5555
return addAPIRequestMiddleware(stack,
5656
options,
57+
"GetInstanceIdentityDocument",
5758
buildGetInstanceIdentityDocumentPath,
5859
buildGetInstanceIdentityDocumentOutput,
5960
)

0 commit comments

Comments
 (0)
0