Skip to content

Commit 0c9d105

Browse files
authored
Pass new request into signer for canonical_request (#434)
1 parent 05b8ce6 commit 0c9d105

File tree

2 files changed

+37
-2
lines changed

2 files changed

+37
-2
lines changed

packages/aws-sdk-signers/src/aws_sdk_signers/signers.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,7 @@ async def sign(
442442
# Construct core signing components
443443
canonical_request = await self.canonical_request(
444444
signing_properties=signing_properties,
445-
request=http_request,
445+
request=new_request,
446446
)
447447
string_to_sign = await self.string_to_sign(
448448
canonical_request=canonical_request,
@@ -454,7 +454,7 @@ async def sign(
454454
signing_properties=new_signing_properties,
455455
)
456456

457-
signing_fields = await self._normalize_signing_fields(request=http_request)
457+
signing_fields = await self._normalize_signing_fields(request=new_request)
458458
credential_scope = await self._scope(signing_properties=new_signing_properties)
459459
credential = f"{identity.access_key_id}/{credential_scope}"
460460
authorization = await self.generate_authorization_field(

packages/aws-sdk-signers/tests/unit/test_signers.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
22
# SPDX-License-Identifier: Apache-2.0
33

4+
import copy
45
import re
56
import typing
67
from datetime import UTC, datetime
@@ -76,6 +77,23 @@ def test_sign(
7677
authorization_field = signed_request.fields["authorization"]
7778
assert SIGV4_RE.match(authorization_field.as_string())
7879

80+
def test_sign_doesnt_modify_original_request(
81+
self,
82+
aws_identity: AWSCredentialIdentity,
83+
aws_request: AWSRequest,
84+
signing_properties: SigV4SigningProperties,
85+
) -> None:
86+
original_request = copy.deepcopy(aws_request)
87+
signed_request = self.SIGV4_SYNC_SIGNER.sign(
88+
signing_properties=signing_properties,
89+
http_request=aws_request,
90+
identity=aws_identity,
91+
)
92+
assert isinstance(signed_request, AWSRequest)
93+
assert signed_request is not aws_request
94+
assert aws_request.fields == original_request.fields
95+
assert signed_request.fields != aws_request.fields
96+
7997
@typing.no_type_check
8098
def test_sign_with_invalid_identity(
8199
self, aws_request: AWSRequest, signing_properties: SigV4SigningProperties
@@ -127,6 +145,23 @@ async def test_sign(
127145
authorization_field = signed_request.fields["authorization"]
128146
assert SIGV4_RE.match(authorization_field.as_string())
129147

148+
async def test_sign_doesnt_modify_original_request(
149+
self,
150+
aws_identity: AWSCredentialIdentity,
151+
aws_request: AWSRequest,
152+
signing_properties: SigV4SigningProperties,
153+
) -> None:
154+
original_request = copy.deepcopy(aws_request)
155+
signed_request = await self.SIGV4_ASYNC_SIGNER.sign(
156+
signing_properties=signing_properties,
157+
http_request=aws_request,
158+
identity=aws_identity,
159+
)
160+
assert isinstance(signed_request, AWSRequest)
161+
assert signed_request is not aws_request
162+
assert aws_request.fields == original_request.fields
163+
assert signed_request.fields != aws_request.fields
164+
130165
@typing.no_type_check
131166
async def test_sign_with_invalid_identity(
132167
self, aws_request: AWSRequest, signing_properties: SigV4SigningProperties

0 commit comments

Comments
 (0)