예제 #1
0
        /// <summary>
        /// Builds the Google Analytics JavaScript block.
        /// </summary>
        /// <returns>Google Analytics JavaScript block.</returns>
        private string GetGoogleAnalyticsJavaScript()
        {
            if (_googleAnalyticsJavaScript.Length == 0)
            {
                ValidatePropertySettings();

                StringBuilder bldr = new StringBuilder();

                bldr.AppendLine(@"<script type=" + Quote + "text/javascript" + Quote + ">");
                bldr.AppendLine(@"    var _gaq = _gaq || [];");
                bldr.AppendLine(@"    _gaq.push(['_setAccount', '" + AccountId + "']);");

                if (DomainOption.Equals(DomainOptions.SingleDomainMultipleSubDomains))
                {
                    bldr.AppendLine(@"    _gaq.push(['_setDomainName', '" + DomainName + "']);");
                }
                else if (DomainOption.Equals(DomainOptions.MultipleTopLevelDomains))
                {
                    bldr.AppendLine(@"    _gaq.push(['_setDomainName', 'none']);");
                    bldr.AppendLine(@"    _gaq.push(['_setAllowLinker', true]);");
                }

                bldr.AppendLine(@"    _gaq.push(['_trackPageview']);");
                bldr.AppendLine(@"    (function() {");
                bldr.AppendLine(@"        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;");
                bldr.AppendLine(@"        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';");
                bldr.AppendLine(@"        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);");
                bldr.AppendLine(@"    })();");
                bldr.AppendLine(@"</script>");

                lock (_lockObject) { _googleAnalyticsJavaScript = bldr.ToString(); }
            }

            return(_googleAnalyticsJavaScript);
        }
예제 #2
0
        public List <DomainOption> GetDomainOptionsFromSite(string siteId)
        {
            var defaultNoDomainHost = "(default binding)";
            var domainOptions       = new List <DomainOption>();

            var matchingSites   = new IISManager().GetSiteBindingList(Certify.Properties.Settings.Default.IgnoreStoppedSites, siteId);
            var siteBindingList = matchingSites.Where(s => s.SiteId == siteId);

            foreach (var siteDetails in siteBindingList)
            {
                //if domain not currently in the list of options, add it
                if (!domainOptions.Any(item => item.Domain == siteDetails.Host))
                {
                    DomainOption opt = new DomainOption
                    {
                        Domain          = siteDetails.Host,
                        IsPrimaryDomain = false,
                        IsSelected      = true,
                        Title           = ""
                    };

                    if (String.IsNullOrEmpty(opt.Domain))
                    {
                        //binding has no hostname/domain set - user will need to specify
                        opt.Title         = defaultNoDomainHost;
                        opt.Domain        = defaultNoDomainHost;
                        opt.IsManualEntry = true;
                    }
                    else
                    {
                        opt.Title = siteDetails.Protocol + "://" + opt.Domain;
                    }

                    if (siteDetails.IP != null && siteDetails.IP != "0.0.0.0")
                    {
                        opt.Title += " : " + siteDetails.IP;
                    }

                    domainOptions.Add(opt);
                }
            }

            //TODO: if one or more binding is to a specific IP, how to manage in UI?

            if (domainOptions.Any(d => !String.IsNullOrEmpty(d.Domain)))
            {
                // mark first domain as primary, if we have no other settings
                if (!domainOptions.Any(d => d.IsPrimaryDomain == true))
                {
                    var electableDomains = domainOptions.Where(d => !String.IsNullOrEmpty(d.Domain) && d.Domain != defaultNoDomainHost);
                    if (electableDomains.Any())
                    {
                        // promote first domain in list to primary by default
                        electableDomains.First().IsPrimaryDomain = true;
                    }
                }
            }

            return(domainOptions);
        }
예제 #3
0
        private void PopulateManagedSiteSettings(string siteId)
        {
            ValidationError = null;
            var managedSite = SelectedItem;

            managedSite.Name = SelectedWebSite.SiteName;

            //TODO: if this site would be a duplicate need to increment the site name

            //set defaults first
            managedSite.RequestConfig.PerformExtensionlessConfigChecks = true;
            managedSite.RequestConfig.PerformChallengeFileCopy         = true;
            managedSite.RequestConfig.PerformAutomatedCertBinding      = true;
            managedSite.RequestConfig.PerformAutoConfig          = true;
            managedSite.RequestConfig.EnableFailureNotifications = true;
            managedSite.RequestConfig.ChallengeType = "http-01";
            managedSite.IncludeInAutoRenew          = true;
            managedSite.DomainOptions = new List <DomainOption>();

            //for the given selected web site, allow the user to choose which domains to combine into one certificate
            var allSites = new IISManager().GetSiteBindingList(false, siteId);
            var domains  = new List <DomainOption>();

            foreach (var d in allSites)
            {
                if (d.SiteId == siteId)
                {
                    DomainOption opt = new DomainOption {
                        Domain = d.Host, IsPrimaryDomain = false, IsSelected = true
                    };
                    domains.Add(opt);
                }
            }

            if (domains.Any())
            {
                //mark first domain as primary, if we have no other settings
                if (!domains.Any(d => d.IsPrimaryDomain == true))
                {
                    domains[0].IsPrimaryDomain = true;
                }

                managedSite.DomainOptions = domains;

                //MainViewModel.EnsureNotifyPropertyChange(nameof(MainViewModel.PrimarySubjectDomain));
            }
            else
            {
                //TODO: command to show error in UI
                ValidationError = "The selected site has no domain bindings setup. Configure the domains first using Edit Bindings in IIS.";
            }

            //TODO: load settings from previously saved managed site?
            RaisePropertyChanged(nameof(PrimarySubjectDomain));
        }
예제 #4
0
        /// <summary>
        /// Validates control's property settings to ensure proper configuration.
        /// </summary>
        private void ValidatePropertySettings()
        {
            if (AccountId.Length == 0)
            {
                throw new ArgumentException(Exceptions.GoogleAnalytics_AccountIdNullOrEmpty);
            }

            if (!DomainOptions.ValidOptions.Contains(DomainOption))
            {
                throw new ArgumentException(Exceptions.GoogleAnalytics_DomainOptionInvalid);
            }

            if (DomainOption.Equals(DomainOptions.SingleDomainMultipleSubDomains))
            {
                if (DomainName.Length == 0)
                {
                    throw new ArgumentException(Exceptions.GoogleAnalytics_DomainNameMissing);
                }
            }
        }
예제 #5
0
        private void PopulateManagedSiteSettings(string siteId, ManagedSite managedSite = null)
        {
            //set defaults first
            this.chkSkipConfigCheck.Checked     = false;
            this.chkAutoBindings.Checked        = true;
            this.chkEnableNotifications.Checked = true;
            this.chkIncludeInAutoRenew.Checked  = true;
            //this.txtManagedSiteName.Text = "";
            this.chkListSAN.Items.Clear();

            //for the given selected web site, allow the user to choose which domains to combine into one certificate
            var allSites = iisManager.GetSiteBindingList(false);

            this.domains = new List <DomainOption>();
            foreach (var d in allSites)
            {
                if (d.SiteId == siteId)
                {
                    DomainOption opt = new DomainOption {
                        Domain = d.Host, IsPrimaryDomain = false, IsSelected = true
                    };
                    domains.Add(opt);
                }
            }

            if (managedSite != null && managedSite.DomainOptions != null)
            {
                //carry over settings from saved managed site
                txtManagedSiteName.Text = managedSite.Name;

                chkIncludeInAutoRenew.Checked = managedSite.IncludeInAutoRenew;
                if (managedSite.RequestConfig != null)
                {
                    chkSkipConfigCheck.Checked     = !managedSite.RequestConfig.PerformExtensionlessConfigChecks;
                    chkAutoBindings.Checked        = managedSite.RequestConfig.PerformAutomatedCertBinding;
                    chkEnableNotifications.Checked = managedSite.RequestConfig.EnableFailureNotifications;
                }

                foreach (var d in domains)
                {
                    var opt = managedSite.DomainOptions.FirstOrDefault(o => o.Domain == d.Domain);
                    if (opt != null)
                    {
                        d.IsPrimaryDomain = opt.IsPrimaryDomain;
                        d.IsSelected      = opt.IsSelected;
                    }
                }
            }

            if (domains.Any())
            {
                //mark first domain as primary, if we have no other settings
                if (!domains.Any(d => d.IsPrimaryDomain == true))
                {
                    domains[0].IsPrimaryDomain = true;
                }

                this.domainListBindingSource.DataSource = domains;

                this.lstPrimaryDomain.DataSource    = this.domainListBindingSource;
                this.lstPrimaryDomain.DisplayMember = "Domain";

                //create filtered view of domains for the san list
                this.PopulateSANList();
            }
            else
            {
                MessageBox.Show("The selected site has no domain bindings setup. Configure the domains first using Edit Bindings in IIS.");
            }
        }
예제 #6
0
        private void PopulateManagedSiteSettings(string siteId)
        {
            ValidationError = null;
            var managedSite = SelectedItem;

            managedSite.Name = SelectedWebSite.SiteName;

            //TODO: if this site would be a duplicate need to increment the site name

            //set defaults first
            managedSite.RequestConfig.PerformExtensionlessConfigChecks = true;
            managedSite.RequestConfig.PerformChallengeFileCopy         = true;
            managedSite.RequestConfig.PerformAutomatedCertBinding      = true;
            managedSite.RequestConfig.PerformAutoConfig          = true;
            managedSite.RequestConfig.EnableFailureNotifications = true;
            managedSite.RequestConfig.ChallengeType = "http-01";
            managedSite.IncludeInAutoRenew          = true;
            managedSite.DomainOptions = new List <DomainOption>();

            //for the given selected web site, allow the user to choose which domains to combine into one certificate

            var defaultNoDomainHost = "(default binding)";
            var allSites            = new IISManager().GetSiteBindingList(Certify.Properties.Settings.Default.IgnoreStoppedSites, siteId);
            var domains             = new List <DomainOption>();

            foreach (var d in allSites)
            {
                if (d.SiteId == siteId)
                {
                    //if domain not currently in the list of options, add it
                    if (!domains.Any(item => item.Domain == d.Host))
                    {
                        DomainOption opt = new DomainOption
                        {
                            Domain          = d.Host,
                            IsPrimaryDomain = false,
                            IsSelected      = true
                        };
                        if (String.IsNullOrEmpty(opt.Domain))
                        {
                            opt.Domain = defaultNoDomainHost;
                        }

                        domains.Add(opt);
                    }
                }
            }

            //TODO: if one or more binding is to a specific IP, how to manage in UI?

            if (domains.Any(d => !String.IsNullOrEmpty(d.Domain)))
            {
                // mark first domain as primary, if we have no other settings
                if (!domains.Any(d => d.IsPrimaryDomain == true))
                {
                    var electableDomains = domains.Where(d => !String.IsNullOrEmpty(d.Domain) && d.Domain != defaultNoDomainHost);
                    if (electableDomains.Any())
                    {
                        // promote first domain in list to primary by default
                        electableDomains.First().IsPrimaryDomain = true;
                    }
                }

                managedSite.DomainOptions = domains;

                //MainViewModel.EnsureNotifyPropertyChange(nameof(MainViewModel.PrimarySubjectDomain));
            }

            if (!domains.Any(d => d.Domain != defaultNoDomainHost))
            {
                ValidationError = "The selected site has no domain bindings setup. Configure the domains first using Edit Bindings in IIS.";
            }
            //TODO: load settings from previously saved managed site?
            RaisePropertyChanged(nameof(PrimarySubjectDomain));
        }
        public async Task <List <DomainOption> > GetDomainOptionsFromSite(string siteId)
        {
            var defaultNoDomainHost = "";
            var domainOptions       = new List <DomainOption>();

            var matchingSites =
                await _serverProvider.GetSiteBindingList(CoreAppSettings.Current.IgnoreStoppedSites, siteId);

            var siteBindingList = matchingSites.Where(s => s.SiteId == siteId);

            var includeEmptyHostnameBindings = false;

            foreach (var siteDetails in siteBindingList)
            {
                //if domain not currently in the list of options, add it
                if (!domainOptions.Any(item => item.Domain == siteDetails.Host))
                {
                    var opt = new DomainOption
                    {
                        Domain          = siteDetails.Host,
                        IsPrimaryDomain = false,
                        IsSelected      = true,
                        Title           = ""
                    };

                    if (string.IsNullOrWhiteSpace(opt.Domain))
                    {
                        //binding has no hostname/domain set - user will need to specify
                        opt.Title         = defaultNoDomainHost;
                        opt.Domain        = defaultNoDomainHost;
                        opt.IsManualEntry = true;
                    }
                    else
                    {
                        opt.Title = siteDetails.Protocol + "://" + opt.Domain;
                    }

                    if (siteDetails.IP != null && siteDetails.IP != "0.0.0.0")
                    {
                        opt.Title += " : " + siteDetails.IP;
                    }

                    if (!opt.IsManualEntry || (opt.IsManualEntry && includeEmptyHostnameBindings))
                    {
                        domainOptions.Add(opt);
                    }
                }
            }

            //TODO: if one or more binding is to a specific IP, how to manage in UI?

            if (domainOptions.Any(d => !string.IsNullOrEmpty(d.Domain)))
            {
                // mark first domain as primary, if we have no other settings
                if (!domainOptions.Any(d => d.IsPrimaryDomain == true))
                {
                    var electableDomains = domainOptions.Where(d =>
                                                               !string.IsNullOrEmpty(d.Domain) && d.Domain != defaultNoDomainHost);
                    if (electableDomains.Any())
                    {
                        // promote first domain in list to primary by default
                        electableDomains.First().IsPrimaryDomain = true;
                    }
                }
            }

            return(domainOptions.OrderByDescending(d => d.IsPrimaryDomain).ThenBy(d => d.Domain).ToList());
        }