private void RestoreDomainsByWebSite(ServerBinding[] bindings, int packageId, int webSiteId, string itemName) { // detect all web site related domains List<string> domainNames = new List<string>(); foreach (ServerBinding binding in bindings) { string pointerName = binding.Host; if (pointerName == null) continue; pointerName = pointerName.ToLower(); if (pointerName.StartsWith("www.")) pointerName = pointerName.Substring(4); if (!domainNames.Contains(pointerName) && !String.IsNullOrEmpty(pointerName)) domainNames.Add(pointerName); } string siteName = itemName.ToLower(); if (siteName.StartsWith("www.")) siteName = siteName.Substring(4); if (!domainNames.Contains(siteName)) domainNames.Add(siteName); foreach (string domainName in domainNames) { DomainInfo domain = ServerController.GetDomain(domainName); if (domain == null) { domain = new DomainInfo(); domain.DomainName = domainName; domain.PackageId = packageId; domain.WebSiteId = webSiteId; ServerController.AddDomainItem(domain); } else { domain.WebSiteId = webSiteId; ServerController.UpdateDomain(domain); } } }
/// <summary> /// Sets ftp site bindings. /// </summary> /// <param name="siteName">Site's name to set bindings for.</param> /// <param name="bindings">Ftp bindings to set.</param> public void SetSiteBindings(string siteName, ServerBinding[] bindings) { if (this.SiteExists(siteName)) { Site site = this.GetIisSite(siteName); List<Binding> originalBindingsToRemove = new List<Binding>(); foreach (Binding binding in site.Bindings) { if (string.Equals(binding.Protocol, "ftp", StringComparison.OrdinalIgnoreCase)) { originalBindingsToRemove.Add(binding); } } // Remove all ftp bindings. foreach (Binding binding in originalBindingsToRemove) { site.Bindings.Remove(binding); } // Add new ones. foreach(ServerBinding binding in bindings) { site.Bindings.Add(binding.ToString(), "ftp"); } } else { throw new InvalidOperationException("Site doesn't exist."); } }
public void UpdateSiteBindings(string siteId, ServerBinding[] bindings) { try { Log.WriteStart("'{0}' UpdateSiteBindings", ProviderSettings.ProviderName); WebProvider.UpdateSiteBindings(siteId, bindings); Log.WriteEnd("'{0}' UpdateSiteBindings", ProviderSettings.ProviderName); } catch (Exception ex) { Log.WriteError(String.Format("'{0}' UpdateSiteBindings", ProviderSettings.ProviderName), ex); throw; } }
public static int SwitchWebSiteToDedicatedIP(int siteItemId, int ipAddressId) { // check account int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); if (accountCheck < 0) return accountCheck; // load web site item WebSite siteItem = (WebSite)PackageController.GetPackageItem(siteItemId); if (siteItem == null) return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; int addressId = 0; PackageIPAddress packageIp = ServerController.GetPackageIPAddress(ipAddressId); if (packageIp != null) { addressId = packageIp.AddressID; } List<GlobalDnsRecord> dnsRecords = ServerController.GetDnsRecordsByService(siteItem.ServiceId); foreach (GlobalDnsRecord d in dnsRecords) { if (!string.IsNullOrEmpty(d.ExternalIP)) { if (!IsValidIPAdddress(d.ExternalIP)) return BusinessErrorCodes.ERROR_GLOBALDNS_FOR_DEDICATEDIP; } } // place log record TaskManager.StartTask("WEB_SITE", "SWITCH_TO_DEDICATED_IP", siteItem.Name, siteItemId); try { IPAddressInfo ip; // remove all web site pointers DomainInfo domain = ServerController.GetDomain(siteItem.Name); DomainInfo ZoneInfo = ServerController.GetDomain(domain.DomainItemId); if (ZoneInfo == null) throw new Exception("Parent zone not found"); //cleanup certificates List<SSLCertificate> certificates = GetCertificatesForSite(siteItemId); foreach (SSLCertificate c in certificates) { DeleteCertificate(siteItemId, c); } certificates = GetPendingCertificates(siteItemId); foreach (SSLCertificate c in certificates) { DeleteCertificateRequest(siteItemId, c.id); } List<DomainInfo> pointers = GetWebSitePointers(siteItemId); foreach (DomainInfo pointer in pointers) DeleteWebSitePointer(siteItemId, pointer.DomainId, true, true, false); // remove web site main pointer if (domain != null) DeleteWebSitePointer(siteItemId, domain.DomainId, true, true, false); // clear binding left overs List<ServerBinding> newBindings = new List<ServerBinding>(); WebServer web = new WebServer(); ServiceProviderProxy.Init(web, siteItem.ServiceId); try { web.UpdateSiteBindings(siteItem.SiteId, newBindings.ToArray(), true); } catch (Exception) { } List<WebSite> sites = WebServerController.GetWebSites(domain.PackageId, false); bool oneSiteOnly = (sites.Count == 1); if (oneSiteOnly) { // load site item ip = ServerController.GetIPAddress(sites[0].SiteIPAddressId); string serviceIp = (ip != null) ? ip.ExternalIP : null; if (string.IsNullOrEmpty(serviceIp)) { StringDictionary settings = ServerController.GetServiceSettings(sites[0].ServiceId); if (settings["PublicSharedIP"] != null) serviceIp = settings["PublicSharedIP"].ToString(); } ServerController.RemoveServiceDNSRecords(domain.PackageId, ResourceGroups.Web, domain, serviceIp, true); } // update site item siteItem.SiteIPAddressId = addressId; PackageController.UpdatePackageItem(siteItem); // associate IP with web site ServerController.AddItemIPAddress(siteItemId, ipAddressId); string parentZone = domain.ZoneName; if (string.IsNullOrEmpty(parentZone)) { DomainInfo parentDomain = ServerController.GetDomain(domain.DomainItemId); parentZone = parentDomain.DomainName; } AddWebSitePointer(siteItemId, ((domain.DomainName.Replace("." + parentZone, "") == parentZone) | (domain.DomainName == parentZone)) ? "" : domain.DomainName.Replace("." + parentZone, "") , ZoneInfo.DomainId, true, true, true); foreach (DomainInfo pointer in pointers) { string pointerParentZone = pointer.ZoneName; if (string.IsNullOrEmpty(pointerParentZone)) { DomainInfo parentDomain = ServerController.GetDomain(pointer.DomainItemId); pointerParentZone = parentDomain.DomainName; } ZoneInfo = ServerController.GetDomain(pointerParentZone); AddWebSitePointer(siteItemId, ((pointer.DomainName.Replace("." + pointerParentZone, "") == pointerParentZone) | (pointer.DomainName == pointerParentZone)) ? "" : pointer.DomainName.Replace("." + pointerParentZone, "") , ZoneInfo.DomainId, true, true, true); } // load web site IP address ip = ServerController.GetIPAddress(siteItem.SiteIPAddressId); string ipAddr = "*"; if (ip != null) ipAddr = !String.IsNullOrEmpty(ip.InternalIP) ? ip.InternalIP : ip.ExternalIP; newBindings = new List<ServerBinding>(); ServerBinding srvBinding = new ServerBinding(ipAddr, "80", ""); newBindings.Add(srvBinding); foreach (ServerBinding b in web.GetSiteBindings(siteItem.SiteId)) { if (!((b.Host == srvBinding.Host) & (b.IP == srvBinding.IP) & (b.Port == srvBinding.Port))) newBindings.Add(b); } web.UpdateSiteBindings(siteItem.SiteId, newBindings.ToArray(), false); if (oneSiteOnly) { sites = WebServerController.GetWebSites(domain.PackageId, false); // load site item ip = ServerController.GetIPAddress(sites[0].SiteIPAddressId); string serviceIp = (ip != null) ? ip.ExternalIP : null; if (string.IsNullOrEmpty(serviceIp)) { StringDictionary settings = ServerController.GetServiceSettings(sites[0].ServiceId); if (settings["PublicSharedIP"] != null) serviceIp = settings["PublicSharedIP"].ToString(); } ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.Web, domain, serviceIp, true); } return 0; } catch (Exception ex) { throw TaskManager.WriteError(ex); } finally { TaskManager.CompleteTask(); } }
private static void AddBinding(List<ServerBinding> bindings, ServerBinding binding) { foreach (ServerBinding b in bindings) { if (string.Compare(b.Host, binding.Host, true) == 0) return; } bindings.Add(binding); }
private void BindListOfAvailableSslDomains(ServerBinding[] siteBindings, SSLCertificate[] siteCertificates) { lstDomains.Items.Clear(); // foreach (ServerBinding binding in siteBindings) { // lstDomains.Items.Add(new ListItem(binding.Host, binding.Host)); } }