private static RenewalParameters GetRenewalParameters(CliOptions parsed, AzureEnvironmentParams webAppEnvironmentParams, AzureEnvironmentParams azureDnsEnvironmentParams, GoDaddyEnvironmentParams goDaddyEnvironmentParams)
 {
     return(new RenewalParameters(
                webAppEnvironmentParams,
                parsed.WebApp,
                parsed.Hosts,
                parsed.Email,
                parsed.FromEmail,
                parsed.ServicePlanResourceGroup,
                null,
                parsed.SiteSlotName,
                azureDnsEnvironmentParams,
                parsed.AzureDnsZoneName,
                parsed.AzureDnsRelativeRecordSetName,
                goDaddyEnvironmentParams,
                parsed.UseIpBasedSsl,
                parsed.RsaKeyLength,
                parsed.AcmeBaseUri,
                parsed.WebRootPath,
                parsed.RenewXNumberOfDaysBeforeExpiration,
                parsed.AzureAuthenticationEndpoint,
                parsed.AzureTokenAudience,
                parsed.AzureManagementEndpoint,
                parsed.AzureDefaultWebsiteDomainName));
 }
        private SharedRenewalParameters GetSharedParams()
        {
            AzureEnvironmentParams sharedWebAppEnvironment;

            try
            {
                sharedWebAppEnvironment = new AzureEnvironmentParams(
                    GetCommonSetting(Constants.TenantIdKey),
                    GetCommonGuidSetting(Constants.SubscriptionIdKey),
                    GetCommonGuidSetting(Constants.ClientIdKey),
                    GetCommonConnectionString(Constants.ClientSecretKey),
                    GetCommonSetting(Constants.ResourceGroupKey),
                    true);
            }
            catch (ArgumentException e)
            {
                throw new ConfigurationErrorsException("Error parsing shared Web App environment parameters", e);
            }

            AzureEnvironmentParams sharedAzureDnsEnvironment;

            try
            {
                sharedAzureDnsEnvironment = new AzureEnvironmentParams(
                    GetCommonSetting(Constants.AzureDnsTenantIdKey),
                    GetCommonGuidSetting(Constants.AzureDnsSubscriptionIdKey),
                    GetCommonGuidSetting(Constants.AzureDnsClientIdKey),
                    GetCommonConnectionString(Constants.AzureDnsClientSecretKey),
                    GetCommonSetting(Constants.AzureDnsResourceGroupKey),
                    true);
            }
            catch (ArgumentException e)
            {
                throw new ConfigurationErrorsException("Error parsing shared Azure DNS environment parameters", e);
            }

            try
            {
                return(new SharedRenewalParameters(
                           sharedWebAppEnvironment,
                           GetCommonSetting(Constants.EmailKey),
                           GetCommonSetting(Constants.ServicePlanResourceGroupKey),
                           sharedAzureDnsEnvironment,
                           GetCommonSetting(Constants.AzureDnsZoneNameKey),
                           GetCommonSetting(Constants.AzureDnsRelativeRecordSetNameKey),
                           GetCommonBooleanSetting(Constants.UseIpBasedSslKey),
                           GetCommonInt32Setting(Constants.RsaKeyLengthKey),
                           GetCommonUriSetting(Constants.AcmeBaseUriKey),
                           GetCommonSetting(Constants.WebRootPathKey),
                           GetCommonInt32Setting(Constants.RenewXNumberOfDaysBeforeExpirationKey),
                           GetCommonUriSetting(Constants.AzureAuthenticationEndpointKey),
                           GetCommonUriSetting(Constants.AzureTokenAudienceKey),
                           GetCommonUriSetting(Constants.AzureManagementEndpointKey),
                           GetCommonSetting(Constants.AzureDefaultWebSiteDomainNameKey)));
            }
            catch (ArgumentException e)
            {
                throw new ConfigurationErrorsException("Error parsing shared renewal parameters", e);
            }
        }
        private RenewalParameters GetWebAppRenewalInfo(string webApp, SharedRenewalParameters sharedRenewalParams)
        {
            Trace.TraceInformation("Parsing SSL renewal parameters for web app '{0}'...", webApp);
            ParseWebAppToken(webApp, out var webAppName, out var siteSlotName, out var groupName);

            AzureEnvironmentParams webAppEnvironment;

            try
            {
                webAppEnvironment = new AzureEnvironmentParams(
                    ResolveSetting(Constants.TenantIdKey, webApp, sharedRenewalParams.WebAppEnvironment.TenantId),
                    ResolveGuidSetting(Constants.SubscriptionIdKey, webApp, sharedRenewalParams.WebAppEnvironment.SubscriptionId),
                    ResolveGuidSetting(Constants.ClientIdKey, webApp, sharedRenewalParams.WebAppEnvironment.ClientId),
                    ResolveConnectionString(Constants.ClientSecretKey, webApp, sharedRenewalParams.WebAppEnvironment.ClientSecret),
                    ResolveSetting(Constants.ResourceGroupKey, webApp, sharedRenewalParams.WebAppEnvironment.ResourceGroup));
            }
            catch (ArgumentException e)
            {
                throw new ConfigurationErrorsException("Error parsing Web App environment parameters for web app: " + webApp, e);
            }

            AzureEnvironmentParams   azureDnsEnvironment;
            GoDaddyEnvironmentParams goDaddyDnsEnvironment = null;

            try
            {
                azureDnsEnvironment = new AzureEnvironmentParams(
                    ResolveOptionalSetting(Constants.AzureDnsTenantIdKey, webApp, sharedRenewalParams.AzureDnsEnvironment.TenantId ?? webAppEnvironment.TenantId),
                    ResolveGuidSetting(Constants.AzureDnsSubscriptionIdKey, webApp, sharedRenewalParams.AzureDnsEnvironment.SubscriptionId ?? webAppEnvironment.SubscriptionId),
                    ResolveGuidSetting(Constants.AzureDnsClientIdKey, webApp, sharedRenewalParams.AzureDnsEnvironment.ClientId ?? webAppEnvironment.ClientId),
                    ResolveConnectionString(Constants.AzureDnsClientSecretKey, webApp, sharedRenewalParams.AzureDnsEnvironment.ClientSecret ?? webAppEnvironment.ClientSecret),
                    ResolveSetting(Constants.AzureDnsResourceGroupKey, webApp, sharedRenewalParams.AzureDnsEnvironment.ResourceGroup ?? webAppEnvironment.ResourceGroup));

                var goDaddyDnsApiKey    = ResolveOptionalSetting(Constants.GoDaddyDnsApiKey, webApp);
                var goDaddyDnsApiSecret = ResolveOptionalSetting(Constants.GoDaddyDnsApiSecret, webApp);
                var goDaddyDnsDomain    = ResolveOptionalSetting(Constants.GoDaddyDnsDomain, webApp);
                var goDaddyDnsShopperId = ResolveOptionalSetting(Constants.GoDaddyDnsShopperId, webApp);

                if (!string.IsNullOrEmpty(goDaddyDnsApiKey) &&
                    !string.IsNullOrEmpty(goDaddyDnsApiSecret) &&
                    !string.IsNullOrEmpty(goDaddyDnsDomain) &&
                    !string.IsNullOrEmpty(goDaddyDnsShopperId))
                {
                    goDaddyDnsEnvironment = new GoDaddyEnvironmentParams(
                        goDaddyDnsApiKey,
                        goDaddyDnsApiSecret,
                        goDaddyDnsDomain,
                        goDaddyDnsShopperId);
                }
            }
            catch (ArgumentException e)
            {
                throw new ConfigurationErrorsException("Error parsing Azure or GoDaddy DNS environment parameters for web app: " + webApp, e);
            }

            try
            {
                return(new RenewalParameters(
                           webAppEnvironment,
                           webAppName,
                           m_appSettings.GetDelimitedList(BuildConfigKey(Constants.HostsKey, webApp)),
                           ResolveSetting(Constants.EmailKey, webApp, sharedRenewalParams.Email),
                           ResolveSetting(Constants.FromEmailKey, webApp, sharedRenewalParams.FromEmail),
                           ResolveOptionalSetting(Constants.ServicePlanResourceGroupKey, webApp, sharedRenewalParams.ServicePlanResourceGroup),
                           groupName,
                           siteSlotName,
                           azureDnsEnvironment,
                           ResolveOptionalSetting(Constants.AzureDnsZoneNameKey, webApp, sharedRenewalParams.AzureDnsZoneName),
                           ResolveOptionalSetting(Constants.AzureDnsRelativeRecordSetNameKey, webApp, sharedRenewalParams.AzureDnsRelativeRecordSetName),
                           goDaddyDnsEnvironment,
                           ResolveOptionalBooleanSetting(Constants.UseIpBasedSslKey, webApp, sharedRenewalParams.UseIpBasedSsl, false),
                           ResolveOptionalInt32Setting(Constants.RsaKeyLengthKey, webApp, sharedRenewalParams.RsaKeyLength, 2048),
                           ResolveOptionalUriSetting(Constants.AcmeBaseUriKey, webApp, sharedRenewalParams.AcmeBaseUri),
                           ResolveOptionalSetting(Constants.WebRootPathKey, webApp, sharedRenewalParams.WebRootPath),
                           ResolveOptionalInt32Setting(Constants.RenewXNumberOfDaysBeforeExpirationKey, webApp, sharedRenewalParams.RenewXNumberOfDaysBeforeExpiration, -1),
                           ResolveOptionalUriSetting(Constants.AzureAuthenticationEndpointKey, webApp, sharedRenewalParams.AuthenticationUri),
                           ResolveOptionalUriSetting(Constants.AzureTokenAudienceKey, webApp, sharedRenewalParams.AzureTokenAudience),
                           ResolveOptionalUriSetting(Constants.AzureManagementEndpointKey, webApp, sharedRenewalParams.AzureManagementEndpoint),
                           ResolveOptionalSetting(Constants.AzureDefaultWebSiteDomainNameKey, webApp, sharedRenewalParams.AzureDefaultWebsiteDomainName)));
            }
            catch (ArgumentException e)
            {
                throw new ConfigurationErrorsException("Error parsing SSL renewal parameters for web app: " + webApp, e);
            }
        }