private void OnSetCertificateConfiguration(object sender, RoutedEventArgs e)
        {
            CertificatesDataContract.DesiredProperties desiredProperties = UIToCertificateConfiguration();
            string json = desiredProperties.ToJsonString();

            Debug.WriteLine("certificates:");
            Debug.WriteLine(json);

            SetDesired(CertificatesDataContract.SectionName, json).FireAndForget();
        }
        /// <summary>
        /// Uninstall a certificate via device twin.
        /// </summary>
        private async void UninstallCertButton_ClickAsync(object sender, RoutedEventArgs e)
        {
            if (CertHashUninstallInput.Text.Length == 0)
            {
                _mainPage.ShowDialogAsync("Invaid Input", "Please enter all fields to uninstall certificate");
                return;
            }

            CertificatesDataContract.CertificateInfo certificateInfo = new CertificatesDataContract.CertificateInfo();
            certificateInfo.Hash  = CertHashUninstallInput.Text;
            certificateInfo.State = CertificatesDataContract.JsonStateUninstalled;

            CertificatesDataContract.DesiredProperties certDesiredProperties = new CertificatesDataContract.DesiredProperties();
            switch (CertPathUninstallCombobox.SelectedValue)
            {
            case CertificateStore.rootCATrustedCertificates_Root:
                certDesiredProperties.rootCATrustedCertificates_Root.Add(certificateInfo);
                break;

            case CertificateStore.rootCATrustedCertificates_CA:
                certDesiredProperties.rootCATrustedCertificates_CA.Add(certificateInfo);
                break;

            case CertificateStore.rootCATrustedCertificates_TrustedPublisher:
                certDesiredProperties.rootCATrustedCertificates_TrustedPublisher.Add(certificateInfo);
                break;

            case CertificateStore.rootCATrustedCertificates_TrustedPeople:
                certDesiredProperties.rootCATrustedCertificates_TrustedPeople.Add(certificateInfo);
                break;

            case CertificateStore.certificateStore_CA_System:
                certDesiredProperties.certificateStore_CA_System.Add(certificateInfo);
                break;

            case CertificateStore.certificateStore_Root_System:
                certDesiredProperties.certificateStore_Root_System.Add(certificateInfo);
                break;

            case CertificateStore.certificateStore_My_User:
                certDesiredProperties.certificateStore_My_User.Add(certificateInfo);
                break;

            case CertificateStore.certificateStore_My_System:
                certDesiredProperties.certificateStore_My_System.Add(certificateInfo);
                break;

            default:
                break;
            }

            string refreshingValue = "\"refreshing\"";
            string finalValue      = "{" + certDesiredProperties.ToJsonString() + "}";
            await _mainPage.UpdateTwinData(refreshingValue, finalValue);
        }
        private CertificatesDataContract.DesiredProperties UIToCertificateConfiguration()
        {
            CertificatesDataContract.DesiredProperties certificatesDesiredProperties = new CertificatesDataContract.DesiredProperties();

            PopulateCertificateList(
                Desired_RootCATrustedCertificates_Root.CertsToInstall,
                Desired_RootCATrustedCertificates_Root.CertsToUninstall,
                certificatesDesiredProperties.rootCATrustedCertificates_Root);

            PopulateCertificateList(
                Desired_RootCATrustedCertificates_CA.CertsToInstall,
                Desired_RootCATrustedCertificates_CA.CertsToUninstall,
                certificatesDesiredProperties.rootCATrustedCertificates_CA);

            PopulateCertificateList(
                Desired_RootCATrustedCertificates_TrustedPublisher.CertsToInstall,
                Desired_RootCATrustedCertificates_TrustedPublisher.CertsToUninstall,
                certificatesDesiredProperties.rootCATrustedCertificates_TrustedPublisher);

            PopulateCertificateList(
                Desired_RootCATrustedCertificates_TrustedPeople.CertsToInstall,
                Desired_RootCATrustedCertificates_TrustedPeople.CertsToUninstall,
                certificatesDesiredProperties.rootCATrustedCertificates_TrustedPeople);

            PopulateCertificateList(
                Desired_CertificateStore_CA_System.CertsToInstall,
                Desired_CertificateStore_CA_System.CertsToUninstall,
                certificatesDesiredProperties.certificateStore_CA_System);

            PopulateCertificateList(
                Desired_CertificateStore_Root_System.CertsToInstall,
                Desired_CertificateStore_Root_System.CertsToUninstall,
                certificatesDesiredProperties.certificateStore_Root_System);

            PopulateCertificateList(
                Desired_CertificateStore_My_User.CertsToInstall,
                Desired_CertificateStore_My_User.CertsToUninstall,
                certificatesDesiredProperties.certificateStore_My_User);

            PopulateCertificateList(
                Desired_CertificateStore_My_System.CertsToInstall,
                Desired_CertificateStore_My_System.CertsToUninstall,
                certificatesDesiredProperties.certificateStore_My_System);

            return(certificatesDesiredProperties);
        }
Beispiel #4
0
        public static async Task DownloadCertificates(
            ISystemConfiguratorProxy systemConfiguratorProxy,
            string connectionString,
            CertificatesDataContract.DesiredProperties desiredProperties)
        {
            HashSet <string> certificateFilesSet = new HashSet <string>();

            MergeCertificateFileNames(desiredProperties.rootCATrustedCertificates_Root, certificateFilesSet);
            MergeCertificateFileNames(desiredProperties.rootCATrustedCertificates_CA, certificateFilesSet);
            MergeCertificateFileNames(desiredProperties.rootCATrustedCertificates_TrustedPublisher, certificateFilesSet);
            MergeCertificateFileNames(desiredProperties.rootCATrustedCertificates_TrustedPeople, certificateFilesSet);

            MergeCertificateFileNames(desiredProperties.certificateStore_CA_System, certificateFilesSet);
            MergeCertificateFileNames(desiredProperties.certificateStore_Root_System, certificateFilesSet);
            MergeCertificateFileNames(desiredProperties.certificateStore_My_User, certificateFilesSet);
            MergeCertificateFileNames(desiredProperties.certificateStore_My_System, certificateFilesSet);

            await DownloadCertificates(systemConfiguratorProxy, connectionString, certificateFilesSet);
        }
Beispiel #5
0
        // IClientPropertyHandler
        public async Task <CommandStatus> OnDesiredPropertyChange(JToken desiredValue)
        {
            if (!(desiredValue is JObject))
            {
                throw new Error(ErrorCodes.INVALID_DESIRED_JSON_VALUE, "Invalid json value type for the " + PropertySectionName + " node.");
            }

            CertificatesDataContract.DesiredProperties desiredProperties = CertificatesDataContract.DesiredProperties.FromJsonObject((JObject)desiredValue);

            await IoTDMClient.CertificateManagement.DownloadCertificates(_systemConfiguratorProxy, _connectionString, desiredProperties);

            Message.CertificateConfiguration certificateConfiguration = new Message.CertificateConfiguration();
            certificateConfiguration.certificateStore_CA_System                 = DesiredToString(desiredProperties.certificateStore_CA_System);
            certificateConfiguration.certificateStore_My_System                 = DesiredToString(desiredProperties.certificateStore_My_System);
            certificateConfiguration.certificateStore_My_User                   = DesiredToString(desiredProperties.certificateStore_My_User);
            certificateConfiguration.certificateStore_Root_System               = DesiredToString(desiredProperties.certificateStore_Root_System);
            certificateConfiguration.rootCATrustedCertificates_CA               = DesiredToString(desiredProperties.rootCATrustedCertificates_CA);
            certificateConfiguration.rootCATrustedCertificates_Root             = DesiredToString(desiredProperties.rootCATrustedCertificates_Root);
            certificateConfiguration.rootCATrustedCertificates_TrustedPeople    = DesiredToString(desiredProperties.rootCATrustedCertificates_TrustedPeople);
            certificateConfiguration.rootCATrustedCertificates_TrustedPublisher = DesiredToString(desiredProperties.rootCATrustedCertificates_TrustedPublisher);

            var request = new Message.SetCertificateConfigurationRequest(certificateConfiguration);
            await _systemConfiguratorProxy.SendCommandAsync(request);

            JObject reportedProperties = await GetReportedPropertyAsync();

            Debug.WriteLine("-- Reporting Certificates -------------------------------------");
            Debug.WriteLine(reportedProperties.ToString());
            Debug.WriteLine("-- Reporting Certificates Done --------------------------------");

            // Because the section contains a list, we need to reset the parent to allow for removals...
            await _deviceManagementClient.ReportPropertiesAsync(PropertySectionName, new JValue("refreshing"));

            // Report the updated list...
            await _deviceManagementClient.ReportPropertiesAsync(PropertySectionName, reportedProperties);

            return(CommandStatus.Committed);
        }
        /// <summary>
        /// Install a certificate via device twin.
        /// </summary>
        private async void InstallCertButton_ClickAsync(object sender, RoutedEventArgs e)
        {
            if (App.STORAGECONNSTRING.Length == 0)
            {
                _mainPage.ShowDialogAsync("Missing Connection String", "Please enter the Storage Connection String in Settings");
                return;
            }

            string certHashInstall = CertHashInstallInput.Text;
            string certFileName    = CertFileNameInput.Text;

            if (certHashInstall.Length == 0 || certFileName.Length == 0)
            {
                _mainPage.ShowDialogAsync("Invaid Input", "Please enter all fields to Install certificate");
                return;
            }

            ExternalStorageDataContract.DesiredProperties desiredProperties = new ExternalStorageDataContract.DesiredProperties();
            desiredProperties.connectionString = App.STORAGECONNSTRING;

            CertificatesDataContract.CertificateInfo certificateInfo = new CertificatesDataContract.CertificateInfo();
            certificateInfo.Hash            = certHashInstall;
            certificateInfo.StorageFileName = certFileName;
            certificateInfo.State           = CertificatesDataContract.JsonStateInstalled;

            CertificatesDataContract.DesiredProperties certDesiredProperties = new CertificatesDataContract.DesiredProperties();
            switch (CertPathInstallCombobox.SelectedValue)
            {
            case CertificateStore.rootCATrustedCertificates_Root:
                certDesiredProperties.rootCATrustedCertificates_Root.Add(certificateInfo);
                break;

            case CertificateStore.rootCATrustedCertificates_CA:
                certDesiredProperties.rootCATrustedCertificates_CA.Add(certificateInfo);
                break;

            case CertificateStore.rootCATrustedCertificates_TrustedPublisher:
                certDesiredProperties.rootCATrustedCertificates_TrustedPublisher.Add(certificateInfo);
                break;

            case CertificateStore.rootCATrustedCertificates_TrustedPeople:
                certDesiredProperties.rootCATrustedCertificates_TrustedPeople.Add(certificateInfo);
                break;

            case CertificateStore.certificateStore_CA_System:
                certDesiredProperties.certificateStore_CA_System.Add(certificateInfo);
                break;

            case CertificateStore.certificateStore_Root_System:
                certDesiredProperties.certificateStore_Root_System.Add(certificateInfo);
                break;

            case CertificateStore.certificateStore_My_User:
                certDesiredProperties.certificateStore_My_User.Add(certificateInfo);
                break;

            case CertificateStore.certificateStore_My_System:
                certDesiredProperties.certificateStore_My_System.Add(certificateInfo);
                break;

            default:
                break;
            }

            string refreshingValue = "\"refreshing\"";
            string finalValue      = "{" + desiredProperties.ToJsonString() + ", " + certDesiredProperties.ToJsonString() + "}";
            await _mainPage.UpdateTwinData(refreshingValue, finalValue);
        }