/// <summary>
        /// Handles the Click event of the lbAccountRegisterSave control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        protected void lbAccountRegisterSave_Click(object sender, EventArgs e)
        {
            var email = tbAccountEmail.Text;

            if (!cbTOSAgree.Checked)
            {
                divTOS.Attributes["class"] = "alert alert-danger";
                return;
            }

            var account = AcmeHelper.LoadAccountData();

            account.Email    = email;
            account.TestMode = cbTestMode.Checked;

            var acme = new AcmeService(account.TestMode);

            acme.Register(email, hlTOS.NavigateUrl);
            account.Key = Convert.ToBase64String(acme.RSA);

            AcmeHelper.SaveAccountData(account);

            ltAccountEmail.Text = email;

            pnlAccountRegister.Visible = false;
            pnlAccountDetail.Visible   = true;
            HideSecondaryBlocks(false);

            ShowDetails();
        }
        public async Task RequestCertificate_Success()
        {
            AcmeService acmeService = Services.GetService <AcmeService>();

            var cetInfo = Settings.Certificates[0];

            byte[] certPfx = await acmeService.RequestCertificateAsync(cetInfo);
        }
        public async Task RequestAndUploadCertificate_Success()
        {
            AcmeService     acmeService     = Services.GetService <AcmeService>();
            KeyVaultService keyVaultService = Services.GetService <KeyVaultService>();

            var cetInfo = Settings.Certificates[0];

            byte[] certPfx = await acmeService.RequestCertificateAsync(cetInfo);

            await keyVaultService.UploadCertificateAsync(cetInfo.KvCertName,
                                                         cetInfo.KeyVault.Uri, certPfx, cetInfo.PfxPassword);
        }
        internal async Task <CertificateInstallModel> RequestInternalAsync(IAcmeConfig config)
        {
            var service = new AcmeService(config, this.challengeProvider);

            var cert = await service.RequestCertificate();

            var model = new CertificateInstallModel()
            {
                CertificateInfo   = cert,
                AllDnsIdentifiers = config.Hostnames.ToList(),
                Host = config.Host,
            };

            return(model);
        }
        /// <summary>
        /// Handles the Click event of the lbRegister control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        protected void lbRegister_Click(object sender, EventArgs e)
        {
            HideSecondaryBlocks(true);

            pnlAccountDetail.Visible   = false;
            pnlAccountRegister.Visible = true;

            var account = AcmeHelper.LoadAccountData();

            tbAccountEmail.Text = account.Email;
            cbTestMode.Checked  = account.TestMode;

            nbExistingAccount.Visible = !string.IsNullOrWhiteSpace(account.Email);

            var acme = new AcmeService(false);

            hlTOS.NavigateUrl          = hlTOS.Text = acme.TermsOfServiceUrl;
            divTOS.Attributes["class"] = "alert alert-info";
        }
        internal async Task <string> RequestAndInstallInternalAsync(IAcmeConfig config)
        {
            try
            {
                Trace.TraceInformation("RequestAndInstallInternal");
                var service = new AcmeService(config, this.challengeProvider);

                var cert = await service.RequestCertificate();

                this.certificateService.Install(new CertificateInstallModel()
                {
                    CertificateInfo   = cert,
                    AllDnsIdentifiers = config.Hostnames.ToList(),
                    Host = config.Host,
                });
                return(cert.Certificate.Thumbprint);
            }
            catch (Exception ex)
            {
                Trace.TraceError("Unabled to create Azure Web Site Management client " + ex.ToString());
                throw;
            }
        }