public IWebServerConfigurer AssertWebsiteExists(string name)
        {
            if (!ServerManager.SiteExists(name))
            {
                throw WebExceptions.NoSiteFoundMatchingName(name);
            }

            return(this);
        }
        public IWebServerConfigurer AssertApplicationPoolExists(string name)
        {
            if (!ServerManager.ApplicationPoolExists(name))
            {
                throw WebExceptions.NoApplicationPoolFoundMatchingName(name);
            }

            return(this);
        }
        public IWebsiteConfigurer AssertVirtualDirectoryExists(string alias)
        {
            if (!_website.Application().VirtualDirectories.Exists(alias))
            {
                throw WebExceptions.VirtualDirectoryNotFoundInSite(_website, alias);
            }

            return(this);
        }
        public IWebsiteConfigurer AssertApplicationExists(string alias)
        {
            if (!_website.Applications.Exists(alias))
            {
                throw WebExceptions.ApplicationNotFoundInSite(_website, alias);
            }

            return(this);
        }
        public IWebsiteConfigurer RemoveVirtualDirectory(string alias)
        {
            return(Configure(site =>
            {
                var foundVirtualDirectory = site.Application().VirtualDirectories.FirstOrDefault(x => x.Path.Equals(alias.ToPath()));

                if (foundVirtualDirectory == null)
                {
                    throw WebExceptions.VirtualDirectoryNotFoundInSite(site, alias);
                }

                site.Application().VirtualDirectories.Remove(foundVirtualDirectory);
                Logger.Info(foundVirtualDirectory.ContructRemoveMessage);
            }));
        }
        public IWebServerConfigurer AlterWebsite(string name, Action <IWebsiteConfigurer> configurer)
        {
            var foundSite = ServerManager.Sites.FirstOrDefault(site => site.Name == name);

            if (foundSite == null)
            {
                throw WebExceptions.NoSiteFoundMatchingName(name);
            }

            configurer(new WebsiteConfigurer(Logger, foundSite));

            Logger.Info(foundSite.ContructAlterMessage);


            return(this);
        }
        public IBindingConfigurer UseCertificateWithThumbprint(string thumbprint)
        {
            if (string.IsNullOrEmpty(thumbprint))
            {
                throw new ArgumentNullException("thumbprint");
            }

            return(Configure(binding =>
            {
                var result = CertificateFinder.Find(X509FindType.FindByThumbprint, thumbprint);

                if (!result.Found)
                {
                    throw WebExceptions.NoCertificateFoundMatchingThumbprint(thumbprint);
                }

                binding.Protocol = "https";
                binding.CertificateStoreName = result.StoreName.ToString();
                binding.CertificateHash = result.Certificate.GetCertHash();
            }));
        }