Skip to content

Commit 0b3a713

Browse files
committed
Temporary wiring for event signer
1 parent 0106d5e commit 0b3a713

File tree

4 files changed

+18
-1
lines changed

4 files changed

+18
-1
lines changed

codegen/core/src/main/java/software/amazon/smithy/python/codegen/ClientGenerator.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -496,6 +496,8 @@ async def _handle_attempt(
496496
"Signer properties: %s",
497497
auth_option.signer_properties
498498
)
499+
context._identity = identity
500+
context._signer_properties = auth_option.signer_properties
499501
context._transport_request = await signer.sign(
500502
http_request=context.transport_request,
501503
identity=identity,

codegen/core/src/main/java/software/amazon/smithy/python/codegen/integrations/RestJsonProtocolGenerator.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -402,11 +402,21 @@ public void wrapEventStream(GenerationContext context, PythonWriter writer) {
402402
writer.addImport("smithy_json", "JSONCodec");
403403
writer.addImport("smithy_core.aio.types", "AsyncBytesReader");
404404
writer.addImport("smithy_core.types", "TimestampFormat");
405+
writer.addImport("aws_sdk_signers", "AsyncEventSigner");
405406
writer.addStdlibImport("typing", "Any");
406407

407408
writer.write("""
408409
codec = JSONCodec(default_timestamp_format=TimestampFormat.EPOCH_SECONDS)
409410
if has_input_stream:
411+
# TODO - Move this out of the RestJSON generator
412+
authorization_header = context.transport_request.fields.get("Authorization", "")
413+
signature = re.split("Signature=", authorization_header)[-1]
414+
signer = AsyncEventSigner(
415+
signer_properties=context._signer_properties
416+
identity=context._identity,
417+
prior_signature=hexlify(signature)
418+
)
419+
410420
if event_deserializer is not None:
411421
return AWSDuplexEventStream[Any, Any, Any](
412422
payload_codec=codec,
@@ -416,12 +426,14 @@ public void wrapEventStream(GenerationContext context, PythonWriter writer) {
416426
execution_context.transport_response.body # type: ignore
417427
),
418428
deserializer=event_deserializer, # type: ignore
429+
signer=signer, # type: ignore
419430
)
420431
else:
421432
return AWSInputEventStream[Any, Any](
422433
payload_codec=codec,
423434
initial_response=operation_output,
424435
async_writer=execution_context.transport_request.body, # type: ignore
436+
signer=signer, # type: ignore
425437
)
426438
else:
427439
return AWSOutputEventStream[Any, Any](

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
__all__ = (
2323
"AsyncBytesReader",
2424
"AsyncSigV4Signer",
25+
"AsyncEventSigner",
2526
"AWSCredentialIdentity",
2627
"AWSRequest",
2728
"Field",

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -780,16 +780,18 @@ async def _compute_payload_hash(
780780

781781

782782
class AsyncEventSigner:
783+
783784
def __init__(
784785
self,
785786
*,
786787
signing_properties: SigV4SigningProperties,
787788
identity: AWSCredentialIdentity,
789+
intial_signature: bytes,
788790
):
789791
self._signing_properties = signing_properties
790792
self._identity = identity
791793
self._prior_signature = initial_signature
792-
self._signing_lock: asyncio.Lock = asyncio.Lock()
794+
self._signing_lock = asyncio.Lock()
793795

794796
async def sign_event(
795797
self,

0 commit comments

Comments
 (0)