示例#1
0
        /// <summary>
        /// Command Provision Device
        /// The Certificate Model must be retrieve from /Certificates/DeviceProvisioning/ endpoint
        /// </summary>
        /// <param name="deviceCertificateModel">DeviceCertificateModel certificate</param>
        /// <returns>True if autoprovisioning succeeded</returns>
        public async Task <ResultCommand> ProvisionDevice(RequestCommandProvisionDevice requestProvisionDevice)
        {
            var resultProvisionDevice = await _streamClient.SendCommand <RequestCommandProvisionDevice, ResultCommand>
                                            (CommandsEnum.ProvisionDevice, requestProvisionDevice, Common.Helpers.SharedConstants.DEFAULT_ENCRYPTION_KEY);

            return(resultProvisionDevice);
        }
 public Task <ResultCommand> ProvisionDevice(RequestCommandProvisionDevice provisionDeviceCommand)
 {
     return(Task.FromResult(new ResultCommand()
     {
         IsSuccess = true
     }));
 }
示例#3
0
        public async Task <ResultCommand> ProvisionDevice(RequestCommandProvisionDevice requestProvisionDevice, string password)
        {
            try
            {
                DeviceCertificateModel certificateInfo = requestProvisionDevice.DeviceCertificateInformation;

                //Load certificate chain
                var(deviceCertificate, collectionCertificates) =
                    LoadCertificateFromPfx(Convert.FromBase64String(certificateInfo.Certificate), password);

                //Save certificate in store
                if (!await SaveCertificateInStore(deviceCertificate))
                {
                    return(ResultCommand.CreateFailedCommand($"Error while saving User Certificate in Store."));
                }

                using (var securityProvider = new SecurityProviderX509Certificate(deviceCertificate, collectionCertificates))
                {
                    using (var transport = new ProvisioningTransportHandlerHttp())
                    {
                        ProvisioningDeviceClient provClient =
                            ProvisioningDeviceClient.Create(certificateInfo.DpsInstance, certificateInfo.DpsIdScope, securityProvider, transport);
                        DeviceRegistrationResult result = await provClient.RegisterAsync();

                        if (result.Status != ProvisioningRegistrationStatusType.Assigned)
                        {
                            DebugHelper.LogError($"ProvisioningClient AssignedHub: {result.AssignedHub}; DeviceID: {result.DeviceId}");
                            return(ResultCommand.CreateFailedCommand($"Error during registration: {result.Status}, {result.ErrorMessage}"));
                        }

                        //Test the connection
                        if (!await TestDeviceConnection(result.DeviceId, result.AssignedHub, deviceCertificate))
                        {
                            return(ResultCommand.CreateFailedCommand($"Error while testing the device connection."));
                        }

                        //Persist provision in TPM/HSM
                        SimulatedDevice.ProvisionDevice(result.AssignedHub, result.DeviceId);

                        //Provisioned!
                        SimulatedDevice.IsProvisioned = true;
                    }
                }
                if (deviceCertificate != null)
                {
                    deviceCertificate.Dispose();
                }

                return(ResultCommand.CreateSuccessCommand());
            }
            catch (Exception e)
            {
                DebugHelper.LogError($"Error ProvisionDevice: {e.Message}.");
                return(ResultCommand.CreateFailedCommand($"Error ProvisionDevice: {e.Message}."));
            }
        }
示例#4
0
        public async Task <ResultCommand> ProvisionDevice(RequestCommandProvisionDevice requestProvisionDevice)
        {
            RestRequest request = await PrepareQuery("ProvisionDevice", Method.POST);

            request.AddParameter("application/json", JsonConvert.SerializeObject(requestProvisionDevice), ParameterType.RequestBody);
            var queryResult = await _client.ExecuteTaskAsync <Command>(request);

            if (queryResult.IsSuccessful)
            {
                return(GetResultCommand <ResultCommand>(queryResult.Data));
            }
            else
            {
                Debug.WriteLine($"ProvisionDevice: {queryResult.StatusCode}");
            }
            return(ResultCommand.CreateFailedCommand <ResultCommand>($"ProvisionDevice: {queryResult.StatusCode}"));
        }
        public async Task <ResultCommand> ProvisionDevice(RequestCommandProvisionDevice provisionDeviceCommand)
        {
            try
            {
                var request     = PrepareRequest("/ProvisionDevice", Method.POST, provisionDeviceCommand);
                var queryResult = await client.ExecutePostTaskAsync <ResultCommand>(request);

                if (queryResult.IsSuccessful)
                {
                    return(queryResult.Data);
                }

                return(null);
            }
            catch (Exception e)
            {
                logger.Log(e);
                return(null);
            }
        }