private async Task NewCertificate(ManagedCertificate original = null) { // save or discard site changes before creating a new site/certificate if (!await _itemViewModel.ConfirmDiscardUnsavedChanges()) { return; } if (!_appViewModel.IsRegisteredVersion && _appViewModel.NumManagedCerts >= NUM_ITEMS_FOR_REMINDER) { MessageBox.Show(SR.MainWindow_TrialLimitationReached); if (_appViewModel.NumManagedCerts >= NUM_ITEMS_FOR_LIMIT) { return; } } else { if (_appViewModel.IsRegisteredVersion && _appViewModel.NumManagedCerts >= 1) { if (await _appViewModel.CheckLicenseIsActive() == false) { MessageBox.Show(Certify.Locales.SR.MainWindow_KeyExpired); if (_appViewModel.NumManagedCerts >= NUM_ITEMS_FOR_LIMIT) { return; } } } } // check user has registered a contact with ACME CA first if (EnsureContactRegistered()) { //present new managed item (certificate request) UI //select tab Managed Items _appViewModel.MainUITabIndex = (int)PrimaryUITabs.ManagedCertificates; _appViewModel.SelectedItem = null; // deselect site list item if (original != null) { // start new from duplicate var duplicate = original.CopyAsTemplate(preserveAttributes: true); duplicate.Id = null; _appViewModel.SelectedItem = duplicate; } else { // start new _appViewModel.SelectedItem = new Certify.Models.ManagedCertificate(); //default to auto deploy for new managed certs _appViewModel.SelectedItem.RequestConfig.DeploymentSiteOption = Models.DeploymentOption.Auto; } } }
/// <summary> /// Add identifiers to a managed cert e.g. certify add 89ccaf11-d7c4-427a-b491-9d3582835c48 test1.test.com;test2.test.com (optionally with --perform-request and 'new' instead of id) /// </summary> /// <param name="args"></param> /// <returns></returns> internal async Task AddIdentifiers(string[] args) { if (args.Length < 3) { Console.WriteLine("Not enough arguments"); return; } var managedCertId = args[1]; var domains = args[2]?.Split(";, ".ToCharArray()); var performRequestNow = false; if (args.Contains("--perform-request")) { performRequestNow = true; } if (domains != null && domains.Any()) { ManagedCertificate managedCert = null; if (managedCertId == "new") { InitPlugins(); if (!IsRegistered()) { Console.WriteLine("CLI automation is only available in the registered version of this application."); return; } // optional load a single managed certificate tempalte from json ManagedCertificate templateCert = null; var jsonArgIndex = Array.IndexOf(args, "--template"); if (jsonArgIndex != -1) { if (args.Length + 1 >= jsonArgIndex + 1) { var pathArg = args[jsonArgIndex + 1]; try { var jsonTemplate = System.IO.File.ReadAllText(pathArg); templateCert = JsonConvert.DeserializeObject <ManagedCertificate>(jsonTemplate); } catch (Exception) { Console.WriteLine($"Failed to read or parse managed certificate template json. " + pathArg); } } else { Console.WriteLine($"Input file path argument is required for json template."); } } // create a new managed cert with http validation and auto deployment if (templateCert == null) { managedCert = new ManagedCertificate { Id = Guid.NewGuid().ToString(), Name = domains[0], IncludeInAutoRenew = true, ItemType = ManagedCertificateType.SSL_ACME }; managedCert.RequestConfig.Challenges = new System.Collections.ObjectModel.ObservableCollection <CertRequestChallengeConfig>( new List <CertRequestChallengeConfig> { new CertRequestChallengeConfig { ChallengeType = SupportedChallengeTypes.CHALLENGE_TYPE_HTTP } }); managedCert.RequestConfig.DeploymentSiteOption = DeploymentOption.Auto; } else { managedCert = templateCert.CopyAsTemplate(); // if no managed cert name specifed, use first domain if (string.IsNullOrEmpty(managedCert.Name)) { managedCert.Name = domains[0]; } } } else { // update an existing managed cert managedCert = await _certifyClient.GetManagedCertificate(managedCertId); } foreach (var d in domains.Where(i => !string.IsNullOrEmpty(i)).Select(i => i.Trim().ToLower())) { var domainOption = managedCert.DomainOptions.FirstOrDefault(o => o.Domain == d); if (domainOption != null) { domainOption.IsSelected = true; } else { managedCert.DomainOptions.Add(new DomainOption { Domain = d, IsManualEntry = true, IsSelected = true, Type = "dns" }); } if (!managedCert.RequestConfig.SubjectAlternativeNames.Contains(d)) { var newSanList = managedCert.RequestConfig.SubjectAlternativeNames.ToList(); newSanList.Add(d); managedCert.RequestConfig.SubjectAlternativeNames = newSanList.ToArray(); } } // check we still have a primary domain, if not selected a default one if (!managedCert.DomainOptions.Any(o => o.IsPrimaryDomain)) { var defaultIdentifier = managedCert.DomainOptions.FirstOrDefault(o => o.IsSelected); if (defaultIdentifier != null) { defaultIdentifier.IsPrimaryDomain = true; managedCert.RequestConfig.PrimaryDomain = defaultIdentifier.Domain; } } var updatedManagedCert = await _certifyClient.UpdateManagedCertificate(managedCert); if (updatedManagedCert != null && performRequestNow) { await _certifyClient.BeginCertificateRequest(updatedManagedCert.Id, true, false); } } }