in awsiot/mqtt_connection_builder.py [0:0]
def websockets_with_default_aws_signing(
region,
credentials_provider,
websocket_proxy_options=None,
**kwargs) -> awscrt.mqtt.Connection:
"""
This builder creates an :class:`awscrt.mqtt.Connection`, configured for an MQTT connection over websockets to AWS IoT.
The websocket handshake is signed using credentials from the credentials_provider.
This function takes all :mod:`common arguments<awsiot.mqtt_connection_builder>`
described at the top of this doc, as well as...
Keyword Args:
region (str): AWS region to use when signing.
credentials_provider (awscrt.auth.AwsCredentialsProvider): Source of AWS credentials to use when signing.
websocket_proxy_options (awscrt.http.HttpProxyOptions): Deprecated,
for proxy settings use `http_proxy_options` (described in
:mod:`common arguments<awsiot.mqtt_connection_builder>`)
"""
_check_required_kwargs(**kwargs)
def _sign_websocket_handshake_request(transform_args, **kwargs):
# transform_args need to know when transform is done
try:
signing_config = awscrt.auth.AwsSigningConfig(
algorithm=awscrt.auth.AwsSigningAlgorithm.V4,
signature_type=awscrt.auth.AwsSignatureType.HTTP_REQUEST_QUERY_PARAMS,
credentials_provider=credentials_provider,
region=region,
service='iotdevicegateway',
omit_session_token=True, # IoT is weird and does not sign X-Amz-Security-Token
)
signing_future = awscrt.auth.aws_sign_request(transform_args.http_request, signing_config)
signing_future.add_done_callback(lambda x: transform_args.set_done(x.exception()))
except Exception as e:
transform_args.set_done(e)
return websockets_with_custom_handshake(_sign_websocket_handshake_request, websocket_proxy_options, **kwargs)