def _bind_sdk(target, sdk_type, device_id=None): from azext_iot.device_sdk.iot_hub_gateway_device_apis import IotHubGatewayDeviceAPIs from azext_iot.service_sdk.iot_hub_gateway_service_apis import IotHubGatewayServiceAPIs from azext_iot.custom_sdk.custom_api import CustomClient from azext_iot.dps_sdk import ProvisioningServiceClient sas_uri = target['entity'] endpoint = "https://{}".format(sas_uri) if device_id: sas_uri = '{}/devices/{}'.format(sas_uri, device_id) if sdk_type is SdkType.device_sdk: return ( IotHubGatewayDeviceAPIs( SasTokenAuthentication( sas_uri, target['policy'], target['primarykey']), endpoint), _get_sdk_exception_type(sdk_type) ) if sdk_type is SdkType.service_sdk: return ( IotHubGatewayServiceAPIs( SasTokenAuthentication( sas_uri, target['policy'], target['primarykey']), endpoint), _get_sdk_exception_type(sdk_type) ) if sdk_type is SdkType.custom_sdk: return ( CustomClient( SasTokenAuthentication( sas_uri, target['policy'], target['primarykey']), endpoint), _get_sdk_exception_type(sdk_type) ) if sdk_type is SdkType.dps_sdk: return ( ProvisioningServiceClient( SasTokenAuthentication( sas_uri, target['policy'], target['primarykey']), endpoint), _get_sdk_exception_type(sdk_type) ) return None
def fixture_sas(mocker): r = SasTokenAuthentication( mock_target["entity"], mock_target["policy"], mock_target["primarykey"] ) sas = mocker.patch(path_sas) sas.return_value = r return sas
def __init__(self, target, device_id): self.target = target self.device_id = device_id sas = SasTokenAuthentication(target['entity'], target['policy'], target['primarykey'], time() + 360).generate_sas_token() cwd = EXTENSION_ROOT cert_path = os.path.join(cwd, 'digicert.pem') auth = { 'username': '******'.format(target['entity'], device_id), 'password': sas } tls = {'ca_certs': cert_path, 'tls_version': ssl.PROTOCOL_SSLv23} self.topic_publish = 'devices/{}/messages/events/'.format(device_id) self.topic_receive = 'devices/{}/messages/devicebound/#'.format( device_id) self.connected = False self.client = mqtt.Client(protocol=mqtt.MQTTv311, client_id=device_id) self.client.on_connect = self.on_connect self.client.on_message = self.on_message self.client.on_publish = self.on_publish self.client.tls_set(ca_certs=tls['ca_certs'], tls_version=tls['tls_version']) self.client.username_pw_set(username=auth['username'], password=sas) self.client.connect(host=self.target['entity'], port=8883)
def __init__(self, target, device_id, properties=None, sas_duration=3600): self.target = target self.device_id = device_id sas = SasTokenAuthentication( target["entity"], target["policy"], target["primarykey"], sas_duration, ).generate_sas_token() cwd = EXTENSION_ROOT cert_path = os.path.join(cwd, "digicert.pem") tls = {"ca_certs": cert_path, "tls_version": ssl.PROTOCOL_SSLv23} self.topic_publish = "devices/{}/messages/events/{}".format( device_id, url_encode_dict(properties) if properties else "") self.topic_receive = "devices/{}/messages/devicebound/#".format( device_id) self.connected = False self.client = mqtt.Client(protocol=mqtt.MQTTv311, client_id=device_id) self.client.on_connect = self.on_connect self.client.on_message = self.on_message self.client.on_publish = self.on_publish self.client.tls_set(ca_certs=tls["ca_certs"], tls_version=tls["tls_version"]) self.client.username_pw_set(username=build_mqtt_device_username( target["entity"], device_id), password=sas) self.client.connect(host=self.target["entity"], port=8883)
def _bind_sdk(target, sdk_type, device_id=None, auth=None): from azext_iot.sdk.service.iot_hub_gateway_service_apis import IotHubGatewayServiceAPIs from azext_iot.sdk.dps import ProvisioningServiceClient from azext_iot.sdk.pnp.digital_twin_repository_service import DigitalTwinRepositoryService sas_uri = target['entity'] endpoint = "https://{}".format(sas_uri) if device_id: sas_uri = '{}/devices/{}'.format(sas_uri, device_id) if sdk_type is SdkType.pnp_sdk: return (DigitalTwinRepositoryService(endpoint), _get_sdk_exception_type(sdk_type)) if not auth: auth = SasTokenAuthentication(sas_uri, target['policy'], target['primarykey']) if sdk_type is SdkType.service_sdk: return (IotHubGatewayServiceAPIs(auth, endpoint), _get_sdk_exception_type(sdk_type)) if sdk_type is SdkType.dps_sdk: return (ProvisioningServiceClient(auth, endpoint), _get_sdk_exception_type(sdk_type)) return None
def build_iothub_amqp_endpoint_from_target(self, target, duration=360): hub_name = target['entity'].split('.')[0] user = "******".format(target['policy'], hub_name) sas_token = SasTokenAuthentication( target['entity'], target['policy'], target['primarykey'], time() + duration).generate_sas_token() return url_encode_str(user) + ":{}@{}".format( url_encode_str(sas_token), target['entity'])
def build_iothub_amqp_endpoint_from_target(cls, target, duration=360): hub_name = target["entity"].split(".")[0] user = "******".format(target["policy"], hub_name) sas_token = SasTokenAuthentication(target["entity"], target["policy"], target["primarykey"], duration).generate_sas_token() return url_encode_str(user) + ":{}@{}".format( url_encode_str(sas_token), target["entity"])
def _get_iothub_service_sdk(self): from azext_iot.sdk.iothub.service import IotHubGatewayServiceAPIs credentials = SasTokenAuthentication( uri=self.sas_uri, shared_access_policy_name=self.target['policy'], shared_access_key=self.target['primarykey']) return IotHubGatewayServiceAPIs(credentials=credentials, base_url=self.endpoint)
def _get_dps_service_sdk(self): from azext_iot.sdk.dps.service import ProvisioningServiceClient credentials = SasTokenAuthentication( uri=self.sas_uri, shared_access_policy_name=self.target["policy"], shared_access_key=self.target["primarykey"], ) return ProvisioningServiceClient(credentials=credentials, base_url=self.endpoint)
def test_generate_sas_token_from_cs(self, mocker, fixture_cmd, duration, req): patched_time = mocker.patch( "azext_iot.common.sas_token_auth.time" ) patched_time.return_value = 0 result = subject.iot_get_sas_token( cmd=fixture_cmd, connection_string=req["connection_string"], duration=duration ) duration = duration if duration else 3600 expected_sas = SasTokenAuthentication( req["uri"], req["policy"], req["key"], duration ).generate_sas_token() assert result["sas"] == expected_sas
def _bind_sdk(target, sdk_type, device_id=None): from azext_iot.device_query_sdk.device_identities_api import DeviceIdentitiesAPI from azext_iot.device_twin_sdk.device_twin_api import DeviceTwinAPI from azext_iot.modules_sdk.iot_hub_client import IotHubClient from azext_iot.device_msg_sdk.iot_hub_device_client import IotHubDeviceClient from azext_iot.custom_sdk.custom_api import CustomClient from azext_iot.dps_sdk import DeviceProvisioningServiceServiceRuntimeClient sas_uri = target['entity'] endpoint = "https://{}".format(sas_uri) if device_id: sas_uri = '{}/devices/{}'.format(sas_uri, device_id) subscription_id = target.get('subscription', None) if sdk_type is SdkType.device_query_sdk: return (DeviceIdentitiesAPI( SasTokenAuthentication(sas_uri, target['policy'], target['primarykey']), endpoint), _get_sdk_exception_type(sdk_type)) elif sdk_type is SdkType.device_twin_sdk: return (DeviceTwinAPI( SasTokenAuthentication(sas_uri, target['policy'], target['primarykey']), endpoint), _get_sdk_exception_type(sdk_type)) elif sdk_type is SdkType.modules_sdk: return (IotHubClient( SasTokenAuthentication(sas_uri, target['policy'], target['primarykey']), subscription_id, endpoint), _get_sdk_exception_type(sdk_type)) elif sdk_type is SdkType.device_msg_sdk: return (IotHubDeviceClient( SasTokenAuthentication(sas_uri, target['policy'], target['primarykey']), subscription_id, base_url=endpoint), _get_sdk_exception_type(sdk_type)) elif sdk_type is SdkType.custom_sdk: return (CustomClient( SasTokenAuthentication(sas_uri, target['policy'], target['primarykey']), endpoint), _get_sdk_exception_type(sdk_type)) elif sdk_type is SdkType.dps_sdk: return (DeviceProvisioningServiceServiceRuntimeClient( SasTokenAuthentication(sas_uri, target['policy'], target['primarykey']), endpoint), _get_sdk_exception_type(sdk_type)) return None
def _get_iothub_service_sdk(self): from azext_iot.sdk.iothub.service import IotHubGatewayServiceAPIs credentials = None if self.auth_override: credentials = self.auth_override elif self.target["policy"] == AuthenticationTypeDataplane.login.value: credentials = IoTHubOAuth(cmd=self.target["cmd"], resource_id=IOTHUB_RESOURCE_ID) else: credentials = SasTokenAuthentication( uri=self.sas_uri, shared_access_policy_name=self.target["policy"], shared_access_key=self.target["primarykey"], ) return IotHubGatewayServiceAPIs(credentials=credentials, base_url=self.endpoint)
def fixture_sas(mocker): r = SasTokenAuthentication(mock_target['entity'], mock_target['policy'], mock_target['primarykey']) sas = mocker.patch(path_sas) sas.return_value = r