public static int AddWebSite(int packageId, int domainId, int packageAddressId, bool addInstantAlias) { // check account int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); if (accountCheck < 0) return accountCheck; // check package int packageCheck = SecurityContext.CheckPackage(packageId, DemandPackage.IsActive); if (packageCheck < 0) return packageCheck; // check quota QuotaValueInfo sitesQuota = PackageController.GetPackageQuota(packageId, Quotas.WEB_SITES); if (sitesQuota.QuotaExhausted) return BusinessErrorCodes.ERROR_WEB_SITES_QUOTA_LIMIT; // load domain name DomainInfo domain = ServerController.GetDomain(domainId); string domainName = domain.DomainName; // check if the web site already exists if (PackageController.GetPackageItemByName(packageId, domainName, typeof(WebSite)) != null) return BusinessErrorCodes.ERROR_WEB_SITE_ALREADY_EXISTS; // place log record TaskManager.StartTask("WEB_SITE", "ADD", domainName); try { // get service int serviceId = PackageController.GetPackageServiceId(packageId, ResourceGroups.Web); if (serviceId == 0) return BusinessErrorCodes.ERROR_WEB_SITE_SERVICE_UNAVAILABLE; #region Fix for bug #587 // Initialize IIS provider webservice proxy WebServer web = new WebServer(); ServiceProviderProxy.Init(web, serviceId); // Ensure the web site is being created doesn't exist on the server if (web.SiteExists(domainName)) { // PackageInfo packageInfo = PackageController.GetPackage(packageId); // ServerInfo serverInfo = ServerController.GetServerById(packageInfo.ServerId); // Give as much clues for the issue to an administrator as possible TaskManager.WriteError("Web site '{0}' could not be created because site with the name requested already " + "exists on '{1}' server.", domainName, serverInfo.ServerName); // Return generic operation failed error return BusinessErrorCodes.FAILED_EXECUTE_SERVICE_OPERATION; } #endregion // load web settings StringDictionary webSettings = ServerController.GetServiceSettings(serviceId); int addressId = Utils.ParseInt(webSettings["SharedIP"], 0); bool dedicatedIp = false; if (packageAddressId != 0) { // dedicated IP PackageIPAddress packageIp = ServerController.GetPackageIPAddress(packageAddressId); if (packageIp != null) { addressId = packageIp.AddressID; dedicatedIp = true; } } // load assigned IP address string ipAddr = "*"; IPAddressInfo ip = ServerController.GetIPAddress(addressId); if (ip != null) ipAddr = !String.IsNullOrEmpty(ip.InternalIP) ? ip.InternalIP : ip.ExternalIP; // load domain instant alias string instantAlias = ServerController.GetDomainAlias(packageId, domainName); DomainInfo instantDomain = ServerController.GetDomain(instantAlias); if (instantDomain == null || instantDomain.WebSiteId > 0) instantAlias = ""; // load web DNS records List<GlobalDnsRecord> dnsRecords = ServerController.GetDnsRecordsByService(serviceId); // prepare site bindings List<ServerBinding> bindings = new List<ServerBinding>(); if (!dedicatedIp) { // SHARED IP // fill main domain bindings FillWebServerBindings(bindings, dnsRecords, ipAddr, domain.DomainName); // fill alias bindings if required if (addInstantAlias && !String.IsNullOrEmpty(instantAlias)) { // fill bindings from DNS "A" records FillWebServerBindings(bindings, dnsRecords, ipAddr, instantAlias); } } else { // DEDICATED IP bindings.Add(new ServerBinding(ipAddr, "80", "")); } UserInfo user = PackageController.GetPackageOwner(packageId); UserSettings webPolicy = UserController.GetUserSettings(user.UserId, UserSettings.WEB_POLICY); // craete web site string siteId = null; WebSite site = new WebSite(); // web site name and bindings site.Name = domainName; site.Bindings = bindings.ToArray(); site.AnonymousUsername = GetWebSiteUsername(webPolicy, domainName); site.AnonymousUserPassword = Guid.NewGuid().ToString("P"); // folders string packageHome = FilesController.GetHomeFolder(packageId); // add random string to the domain if specified string randDomainName = domainName; if (!String.IsNullOrEmpty(webPolicy["AddRandomDomainString"]) && Utils.ParseBool(webPolicy["AddRandomDomainString"], false)) randDomainName += "_" + Utils.GetRandomString(DOMAIN_RANDOM_LENGTH); // ROOT folder site.ContentPath = GetWebFolder(packageId, WEBSITE_ROOT_FOLDER_PATTERN, randDomainName); if (!String.IsNullOrEmpty(webPolicy["WebRootFolder"])) site.ContentPath = GetWebFolder(packageId, webPolicy["WebRootFolder"], randDomainName); // LOGS folder site.LogsPath = GetWebFolder(packageId, WEBSITE_LOGS_FOLDER_PATTERN, randDomainName); if (!String.IsNullOrEmpty(webPolicy["WebLogsFolder"])) site.LogsPath = GetWebFolder(packageId, webPolicy["WebLogsFolder"], randDomainName); // DATA folder site.DataPath = GetWebFolder(packageId, WEBSITE_DATA_FOLDER_PATTERN, randDomainName); if (!String.IsNullOrEmpty(webPolicy["WebDataFolder"])) site.DataPath = GetWebFolder(packageId, webPolicy["WebDataFolder"], randDomainName); // default documents site.DefaultDocs = null; // inherit from service if (!String.IsNullOrEmpty(webPolicy["DefaultDocuments"])) site.DefaultDocs = webPolicy["DefaultDocuments"]; if (!String.IsNullOrEmpty(webPolicy["EnableWritePermissions"])) { // security settings site.EnableWritePermissions = Utils.ParseBool(webPolicy["EnableWritePermissions"], false); site.EnableDirectoryBrowsing = Utils.ParseBool(webPolicy["EnableDirectoryBrowsing"], false); site.EnableParentPaths = Utils.ParseBool(webPolicy["EnableParentPaths"], false); site.DedicatedApplicationPool = Utils.ParseBool(webPolicy["EnableDedicatedPool"], false); #region Fix for bug: #1556 // Ensure the website meets hosting plan quotas QuotaValueInfo quotaInfo = PackageController.GetPackageQuota(packageId, Quotas.WEB_APPPOOLS); site.DedicatedApplicationPool = site.DedicatedApplicationPool && (quotaInfo.QuotaAllocatedValue > 0); #endregion site.EnableAnonymousAccess = Utils.ParseBool(webPolicy["EnableAnonymousAccess"], false); site.EnableWindowsAuthentication = Utils.ParseBool(webPolicy["EnableWindowsAuthentication"], false); site.EnableBasicAuthentication = Utils.ParseBool(webPolicy["EnableBasicAuthentication"], false); // extensions site.AspInstalled = Utils.ParseBool(webPolicy["AspInstalled"], false); site.AspNetInstalled = webPolicy["AspNetInstalled"]; site.PhpInstalled = webPolicy["PhpInstalled"]; site.PerlInstalled = Utils.ParseBool(webPolicy["PerlInstalled"], false); site.PythonInstalled = Utils.ParseBool(webPolicy["PythonInstalled"], false); site.CgiBinInstalled = Utils.ParseBool(webPolicy["CgiBinInstalled"], false); site.ColdFusionInstalled = false; } else { // security settings site.EnableWritePermissions = false; site.EnableDirectoryBrowsing = false; site.EnableParentPaths = false; site.DedicatedApplicationPool = false; site.EnableAnonymousAccess = true; site.EnableWindowsAuthentication = true; site.EnableBasicAuthentication = false; // extensions site.AspInstalled = true; site.AspNetInstalled = "1"; site.PhpInstalled = ""; site.PerlInstalled = false; site.PythonInstalled = false; site.CgiBinInstalled = false; site.ColdFusionInstalled = false; } site.HttpRedirect = ""; site.HttpErrors = null; site.MimeMaps = null; // CREATE WEB SITE siteId = web.CreateSite(site); // register item site.ServiceId = serviceId; site.PackageId = packageId; site.Name = domainName; site.SiteIPAddressId = addressId; site.SiteId = siteId; int siteItemId = PackageController.AddPackageItem(site); // associate IP with web site if (packageAddressId != 0) ServerController.AddItemIPAddress(siteItemId, packageAddressId); // update domain // add main pointer AddWebSitePointer(siteItemId, domain.DomainId, false); // add instant pointer if (addInstantAlias && !String.IsNullOrEmpty(instantAlias)) AddWebSitePointer(siteItemId, instantDomain.DomainId, false); // add parking page // load package if (webPolicy["AddParkingPage"] != null) { bool addParkingPage = Utils.ParseBool(webPolicy["AddParkingPage"], false); if (addParkingPage) { // add page string pageName = webPolicy["ParkingPageName"]; string pageContent = webPolicy["ParkingPageContent"]; if (!String.IsNullOrEmpty(pageName) && pageContent != null) { string path = Path.Combine( FilesController.GetVirtualPackagePath(packageId, site.ContentPath), pageName); if (!FilesController.FileExists(packageId, path)) { FilesController.CreateFile(packageId, path); byte[] content = Encoding.UTF8.GetBytes(pageContent); byte[] fileContent = new byte[content.Length + 3]; fileContent[0] = 0xEF; fileContent[1] = 0xBB; fileContent[2] = 0xBF; content.CopyTo(fileContent, 3); FilesController.UpdateFileBinaryContent(packageId, path, fileContent); } } } } TaskManager.ItemId = siteItemId; return siteItemId; } catch (Exception ex) { throw TaskManager.WriteError(ex); } finally { TaskManager.CompleteTask(); } }
public static WebSite GetWebSite(int siteItemId) { // load site item WebSite siteItem = (WebSite)PackageController.GetPackageItem(siteItemId); if (siteItem == null) return null; // load live site from service WebServer web = new WebServer(); ServiceProviderProxy.Init(web, siteItem.ServiceId); WebSite site = web.GetSite(siteItem.SiteId); // set other properties site.Id = siteItem.Id; site.Name = siteItem.Name; site.ServiceId = siteItem.ServiceId; site.PackageId = siteItem.PackageId; // load IP address site.SiteIPAddressId = siteItem.SiteIPAddressId; IPAddressInfo ip = ServerController.GetIPAddress(siteItem.SiteIPAddressId); if(ip != null) site.SiteIPAddress = ip.ExternalIP; // truncate home folder site.ContentPath = FilesController.GetVirtualPackagePath(siteItem.PackageId, site.ContentPath); //check if Coldfusion is available //site.ColdFusionAvailable = siteItem.ColdFusionAvailable; // set FrontPage account site.FrontPageAccount = siteItem.FrontPageAccount; if (String.IsNullOrEmpty(site.FrontPageAccount)) site.FrontPageAccount = GetFrontPageUsername(site.Name); #region Restore Web Deploy publishing persistent properties // Set Web Deploy publishing account site.WebDeployPublishingAccount = siteItem.WebDeployPublishingAccount; // Set Web Deploy site publishing enabled site.WebDeploySitePublishingEnabled = siteItem.WebDeploySitePublishingEnabled; // Set Web Deploy site publishing profile site.WebDeploySitePublishingProfile = siteItem.WebDeploySitePublishingProfile; #endregion return site; }
public static int ChangeFrontPagePassword(int siteItemId, string password) { // check account int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); if (accountCheck < 0) return accountCheck; // load site item WebSite siteItem = (WebSite)PackageController.GetPackageItem(siteItemId); if (siteItem == null) return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; // place log record TaskManager.StartTask("WEB_SITE", "CHANGE_FP_PASSWORD", siteItem.Name); TaskManager.ItemId = siteItemId; TaskManager.WriteParameter("FrontPage username", siteItem.FrontPageAccount); try { if (String.IsNullOrEmpty(siteItem.FrontPageAccount)) siteItem.FrontPageAccount = GetFrontPageUsername(siteItem.Name); WebServer web = new WebServer(); ServiceProviderProxy.Init(web, siteItem.ServiceId); web.ChangeFrontPagePassword(siteItem.FrontPageAccount, password); // update site with FP account siteItem.FrontPagePassword = CryptoUtils.Encrypt(password); PackageController.UpdatePackageItem(siteItem); return 0; } catch (Exception ex) { throw TaskManager.WriteError(ex); } finally { TaskManager.CompleteTask(); } }
public static WebVirtualDirectory GetVirtualDirectory(int siteItemId, string vdirName) { // load site item WebSite siteItem = (WebSite)PackageController.GetPackageItem(siteItemId); if (siteItem == null) return null; // create directory WebServer web = new WebServer(); ServiceProviderProxy.Init(web, siteItem.ServiceId); WebVirtualDirectory vdir = web.GetVirtualDirectory(siteItem.SiteId, vdirName); // truncate home folder vdir.ContentPath = FilesController.GetVirtualPackagePath(siteItem.PackageId, vdir.ContentPath); // set name vdir.ParentSiteName = siteItem.Name; vdir.PackageId = siteItem.PackageId; return vdir; }
public static int DeleteWebSitePointer(int siteItemId, int domainId, bool updateWebSite) { // check account int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); if (accountCheck < 0) return accountCheck; // load site item WebSite siteItem = (WebSite)PackageController.GetPackageItem(siteItemId); if (siteItem == null) return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; // load domain item DomainInfo domain = ServerController.GetDomain(domainId); if (domain == null) return BusinessErrorCodes.ERROR_DOMAIN_PACKAGE_ITEM_NOT_FOUND; // load appropriate zone DnsZone zone = (DnsZone)PackageController.GetPackageItem(domain.ZoneItemId); //if (zone == null) // return BusinessErrorCodes.ERROR_DNS_PACKAGE_ITEM_NOT_FOUND; // get zone records for the service List<GlobalDnsRecord> dnsRecords = ServerController.GetDnsRecordsByService(siteItem.ServiceId); // change DNS zone IPAddressInfo ip = ServerController.GetIPAddress(siteItem.SiteIPAddressId); if (ip == null) return BusinessErrorCodes.ERROR_WEB_SITE_IP_ADDRESS_NOT_SPECIFIED; List<DnsRecord> resourceRecords = DnsServerController.BuildDnsResourceRecords( dnsRecords, domain.DomainName, ip.ExternalIP); // place log record TaskManager.StartTask("WEB_SITE", "DELETE_POINTER", siteItem.Name); TaskManager.ItemId = siteItemId; TaskManager.WriteParameter("Domain pointer", domain.DomainName); try { if (zone != null) { try { DNSServer dns = new DNSServer(); ServiceProviderProxy.Init(dns, zone.ServiceId); dns.DeleteZoneRecords(zone.Name, resourceRecords.ToArray()); } catch(Exception ex1) { TaskManager.WriteError(ex1, "Error deleting DNS records"); } } // load web settings StringDictionary webSettings = ServerController.GetServiceSettings(siteItem.ServiceId); int sharedIpId = Utils.ParseInt(webSettings["SharedIP"], 0); bool dedicatedIp = (siteItem.SiteIPAddressId != sharedIpId); if (updateWebSite && !dedicatedIp) { // update host headers WebServer web = new WebServer(); ServiceProviderProxy.Init(web, siteItem.ServiceId); List<ServerBinding> bindings = new List<ServerBinding>(); bindings.AddRange(web.GetSiteBindings(siteItem.SiteId)); // remove host headers List<ServerBinding> domainBindings = new List<ServerBinding>(); FillWebServerBindings(domainBindings, dnsRecords, "", domain.DomainName); // fill to remove list List<string> headersToRemove = new List<string>(); foreach (ServerBinding domainBinding in domainBindings) { headersToRemove.Add(domainBinding.Host); } int pos = 0; while (pos < bindings.Count) { if (headersToRemove.Contains(bindings[pos].Host)) { bindings.RemoveAt(pos); continue; } else { pos++; } } web.UpdateSiteBindings(siteItem.SiteId, bindings.ToArray()); } // update domain domain.WebSiteId = 0; ServerController.UpdateDomain(domain); return 0; } catch (Exception ex) { throw TaskManager.WriteError(ex); } finally { TaskManager.CompleteTask(); } }
public static int DeleteWebSite(int siteItemId) { // 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; // place log record TaskManager.StartTask("WEB_SITE", "DELETE", siteItem.Name); TaskManager.ItemId = siteItemId; // delete web site try { // remove all web site pointers List<DomainInfo> pointers = GetWebSitePointers(siteItemId); foreach (DomainInfo pointer in pointers) DeleteWebSitePointer(siteItemId, pointer.DomainId, false); // remove web site main pointer DomainInfo domain = ServerController.GetDomain(siteItem.Name); if(domain != null) DeleteWebSitePointer(siteItemId, domain.DomainId, false); // delete web site WebServer web = new WebServer(); ServiceProviderProxy.Init(web, siteItem.ServiceId); #region Fix for bug #710 // if (web.IsFrontPageSystemInstalled() && web.IsFrontPageInstalled(siteItem.SiteId)) { web.UninstallFrontPage(siteItem.SiteId, siteItem.FrontPageAccount); } #endregion // web.DeleteSite(siteItem.SiteId); // delete service item PackageController.DeletePackageItem(siteItemId); return 0; } catch (Exception ex) { throw TaskManager.WriteError(ex); } finally { TaskManager.CompleteTask(); } }
public static int DeleteWebSitePointer(int siteItemId, int domainId, bool updateWebSite) { // check account int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); if (accountCheck < 0) return accountCheck; // load site item WebSite siteItem = (WebSite)PackageController.GetPackageItem(siteItemId); if (siteItem == null) return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; // load domain item DomainInfo domain = ServerController.GetDomain(domainId); if (domain == null) return BusinessErrorCodes.ERROR_DOMAIN_PACKAGE_ITEM_NOT_FOUND; // load appropriate zone DnsZone zone = (DnsZone)PackageController.GetPackageItem(domain.ZoneItemId); // get zone records for the service List<GlobalDnsRecord> dnsRecords = ServerController.GetDnsRecordsByService(siteItem.ServiceId); // load web site IP address IPAddressInfo ip = ServerController.GetIPAddress(siteItem.SiteIPAddressId); // place log record TaskManager.StartTask("WEB_SITE", "DELETE_POINTER", siteItem.Name); TaskManager.ItemId = siteItemId; TaskManager.WriteParameter("Domain pointer", domain.DomainName); try { if (zone != null) { // change DNS zone string serviceIp = (ip != null) ? ip.ExternalIP : null; List<DnsRecord> resourceRecords = DnsServerController.BuildDnsResourceRecords( dnsRecords, domain.DomainName, serviceIp); try { DNSServer dns = new DNSServer(); ServiceProviderProxy.Init(dns, zone.ServiceId); dns.DeleteZoneRecords(zone.Name, resourceRecords.ToArray()); } catch(Exception ex1) { TaskManager.WriteError(ex1, "Error deleting DNS records"); } } if (updateWebSite) { // get existing web site bindings WebServer web = new WebServer(); ServiceProviderProxy.Init(web, siteItem.ServiceId); List<ServerBinding> bindings = new List<ServerBinding>(); bindings.AddRange(web.GetSiteBindings(siteItem.SiteId)); // check if web site has dedicated IP assigned bool dedicatedIp = bindings.Exists(binding => { return String.IsNullOrEmpty(binding.Host) && binding.IP != "*"; }); // update binding only for "shared" ip addresses if (!dedicatedIp) { // remove host headers List<ServerBinding> domainBindings = new List<ServerBinding>(); FillWebServerBindings(domainBindings, dnsRecords, "", domain.DomainName); // fill to remove list List<string> headersToRemove = new List<string>(); foreach (ServerBinding domainBinding in domainBindings) headersToRemove.Add(domainBinding.Host); // remove bndings bindings.RemoveAll(b => { return headersToRemove.Contains(b.Host) && b.Port == "80"; } ); // update bindings web.UpdateSiteBindings(siteItem.SiteId, bindings.ToArray()); } } // update domain domain.WebSiteId = 0; ServerController.UpdateDomain(domain); return 0; } catch (Exception ex) { throw TaskManager.WriteError(ex); } finally { TaskManager.CompleteTask(); } }
public static AppPoolState GetAppPoolState(int siteItemId) { AppPoolState state = AppPoolState.Unknown; // check account int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); if (accountCheck < 0) return state; // load site item WebSite siteItem = (WebSite)PackageController.GetPackageItem(siteItemId); if (siteItem == null) return state; // check package int packageCheck = SecurityContext.CheckPackage(siteItem.PackageId, DemandPackage.IsActive); if (packageCheck < 0) return state; // place log record TaskManager.StartTask("WEB_SITE", "GET_STATE", siteItem.Name); TaskManager.ItemId = siteItemId; try { // get state WebServer web = new WebServer(); ServiceProviderProxy.Init(web, siteItem.ServiceId); state = web.GetAppPoolState(siteItem.SiteId); } catch (Exception ex) { throw TaskManager.WriteError(ex); } finally { TaskManager.CompleteTask(); } return state; }
public static int DeleteWebSite(int siteItemId, bool deleteWebsiteDirectory) { // 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; // place log record TaskManager.StartTask("WEB_SITE", "DELETE", siteItem.Name, siteItemId); // delete web site try { //cleanup certificates //cleanup certificates List<SSLCertificate> certificates = GetCertificatesForSite(siteItemId); foreach (SSLCertificate c in certificates) { DeleteCertificate(siteItemId, c); } // remove all web site pointers List<DomainInfo> pointers = GetWebSitePointers(siteItemId); foreach (DomainInfo pointer in pointers) DeleteWebSitePointer(siteItemId, pointer.DomainId, false, true, true); // remove web site main pointer DomainInfo domain = ServerController.GetDomain(siteItem.Name); if(domain != null) DeleteWebSitePointer(siteItemId, domain.DomainId, false, true, true); List<WebSite> sites = WebServerController.GetWebSites(domain.PackageId, false); bool oneSiteOnly = (sites.Count == 1); if (oneSiteOnly) { // load site item IPAddressInfo 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); } // delete web site WebServer web = new WebServer(); ServiceProviderProxy.Init(web, siteItem.ServiceId); // if (web.IsFrontPageSystemInstalled() && web.IsFrontPageInstalled(siteItem.SiteId)) { web.UninstallFrontPage(siteItem.SiteId, siteItem.FrontPageAccount); } // web.DeleteSite(siteItem.SiteId); // Delete WebManagementAccess Account WebServerController.RevokeWebManagementAccess(siteItemId); if (deleteWebsiteDirectory) { // Delete website directory from file server // This will remove the hard quota as well FilesController.DeleteDirectoryRecursive(siteItem.PackageId, new DirectoryInfo(siteItem.DataPath).Parent.FullName); } // delete service item PackageController.DeletePackageItem(siteItemId); return 0; } catch (Exception ex) { throw TaskManager.WriteError(ex); } finally { TaskManager.CompleteTask(); } }
public static StringResultObject SetZooConsoleDisabled(int siteItemId, string appName) { StringResultObject result = new StringResultObject { IsSuccess = false }; // load site item WebSite siteItem = (WebSite)PackageController.GetPackageItem(siteItemId); if (siteItem == null) return result; WebServer web = new WebServer(); ServiceProviderProxy.Init(web, siteItem.ServiceId); return web.SetZooConsoleDisabled(siteItem.SiteId, appName); }
public static int ImporHostHeader(int userId, int packageId, int siteId) { WebSite siteItem = (WebSite)PackageController.GetPackageItem(siteId); if (siteItem == null) return -1; // load live site from service WebServer web = new WebServer(); ServiceProviderProxy.Init(web, siteItem.ServiceId); // Verify if already exists List<DomainInfo> domains = ServerController.GetDomains(packageId); // Get hostheader foreach (ServerBinding b in web.GetSiteBindings(siteItem.SiteId)) { if ((!DoesHeaderExistInDomains(b.Host.ToLower(), domains)) && (!string.IsNullOrEmpty(b.Host))) { // If not get domain info and add to domains int domainId = FindDomainForHeader(b.Host.ToLower(), domains); if (domainId > 0) { DomainInfo domain = ServerController.GetDomain(domainId); DomainInfo newDomain = new DomainInfo(); newDomain.DomainName = b.Host.ToLower(); newDomain.PackageId = domain.PackageId; newDomain.IsDomainPointer = true; int newDomainID = ServerController.AddDomain(newDomain, domain.IsInstantAlias, false); if (newDomainID > 0) { newDomain = ServerController.GetDomain(newDomainID); if (newDomain != null) { newDomain.WebSiteId = siteId; newDomain.ZoneItemId = domain.ZoneItemId; newDomain.DomainItemId = domain.DomainId; ServerController.UpdateDomain(newDomain); } } } } } return 0; }
internal static int AddWebSitePointer(int siteItemId, string hostName, int domainId, bool updateWebSite, bool ignoreGlobalDNSRecords, bool rebuild) { // check account int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); if (accountCheck < 0) return accountCheck; // load site item WebSite siteItem = (WebSite)PackageController.GetPackageItem(siteItemId); if (siteItem == null) return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; // load domain item DomainInfo domain = ServerController.GetDomain(domainId); if (domain == null) return BusinessErrorCodes.ERROR_DOMAIN_PACKAGE_ITEM_NOT_FOUND; // check if the web site already exists if (!rebuild) { if (DataProvider.CheckDomain(domain.PackageId, string.IsNullOrEmpty(hostName) ? domain.DomainName : hostName + "." + domain.DomainName, true) != 0) return BusinessErrorCodes.ERROR_WEB_SITE_ALREADY_EXISTS; } // get zone records for the service List<GlobalDnsRecord> dnsRecords = ServerController.GetDnsRecordsByService(siteItem.ServiceId); // load web site IP address IPAddressInfo ip = ServerController.GetIPAddress(siteItem.SiteIPAddressId); // place log record TaskManager.StartTask("WEB_SITE", "ADD_POINTER", siteItem.Name, siteItemId); TaskManager.WriteParameter("Domain pointer", domain.DomainName); TaskManager.WriteParameter("Host name", hostName); TaskManager.WriteParameter("updateWebSite", updateWebSite.ToString()); try { // load appropriate zone DnsZone zone = (DnsZone)PackageController.GetPackageItem(domain.ZoneItemId); if (zone != null) { // change DNS zone List<GlobalDnsRecord> tmpDnsRecords = new List<GlobalDnsRecord>(); string serviceIp = (ip != null) ? ip.ExternalIP : null; if (string.IsNullOrEmpty(serviceIp)) { StringDictionary settings = ServerController.GetServiceSettings(siteItem.ServiceId); if (settings["PublicSharedIP"] != null) serviceIp = settings["PublicSharedIP"].ToString(); } //filter initiat GlobaDNSRecords list if (ignoreGlobalDNSRecords) { //ignore all other except the host_name record foreach (GlobalDnsRecord r in dnsRecords) { if (r.RecordName == "[host_name]") { tmpDnsRecords.Add(r); break; } } } else tmpDnsRecords = dnsRecords; List<DnsRecord> resourceRecords = DnsServerController.BuildDnsResourceRecords(tmpDnsRecords, hostName, domain.DomainName, serviceIp); if (!rebuild) { foreach (DnsRecord r in resourceRecords) { if (r.RecordName != "*") { // check if the web site already exists if (DataProvider.CheckDomain(domain.PackageId, string.IsNullOrEmpty(r.RecordName) ? domain.DomainName : r.RecordName + "." + domain.DomainName, true) != 0) return BusinessErrorCodes.ERROR_WEB_SITE_ALREADY_EXISTS; } } } try { DNSServer dns = new DNSServer(); ServiceProviderProxy.Init(dns, zone.ServiceId); DnsRecord[] domainRecords = dns.GetZoneRecords(zone.Name); var duplicateRecords = (from zoneRecord in domainRecords from resRecord in resourceRecords where zoneRecord.RecordName == resRecord.RecordName where zoneRecord.RecordType == resRecord.RecordType select zoneRecord).ToArray(); if (duplicateRecords != null && duplicateRecords.Count() > 0) { dns.DeleteZoneRecords(zone.Name, duplicateRecords); } // add new resource records dns.AddZoneRecords(zone.Name, resourceRecords.ToArray()); } catch (Exception ex1) { TaskManager.WriteError(ex1, "Error updating DNS records"); } } // update host headers List<ServerBinding> bindings = new List<ServerBinding>(); // get existing web site bindings WebServer web = new WebServer(); ServiceProviderProxy.Init(web, siteItem.ServiceId); bindings.AddRange(web.GetSiteBindings(siteItem.SiteId)); // check if web site has dedicated IP assigned bool dedicatedIp = bindings.Exists(binding => { return String.IsNullOrEmpty(binding.Host) && binding.IP != "*"; }); // update binding only for "shared" ip addresses // add new host headers string ipAddr = "*"; if (ip != null) ipAddr = !String.IsNullOrEmpty(ip.InternalIP) ? ip.InternalIP : ip.ExternalIP; // fill bindings FillWebServerBindings(bindings, dnsRecords, ipAddr, hostName, domain.DomainName, ignoreGlobalDNSRecords); //for logging purposes foreach (ServerBinding b in bindings) { string header = string.Format("{0} {1} {2}", b.Host, b.IP, b.Port); TaskManager.WriteParameter("Add Binding", header); } // update bindings if (updateWebSite) web.UpdateSiteBindings(siteItem.SiteId, bindings.ToArray(), false); // update domain if (!rebuild) { domain.WebSiteId = siteItemId; domain.IsDomainPointer = true; foreach (ServerBinding b in bindings) { //add new domain record if (!string.IsNullOrEmpty(b.Host)) { domain.DomainName = b.Host; DomainInfo domainTmp = ServerController.GetDomain(domain.DomainName); if (!((domainTmp != null) && (domainTmp.WebSiteId == siteItemId))) { int domainID = ServerController.AddDomain(domain, domain.IsInstantAlias, false); domainTmp = ServerController.GetDomain(domainID); if (domainTmp != null) { domainTmp.WebSiteId = siteItemId; domainTmp.ZoneItemId = domain.ZoneItemId; domainTmp.DomainItemId = domainId; ServerController.UpdateDomain(domainTmp); } } } } } else { if (domain.ZoneItemId > 0) { DomainInfo domainTmp = ServerController.GetDomain(string.IsNullOrEmpty(hostName) ? domain.DomainName : hostName + "." + domain.DomainName, true, true); if (domainTmp != null) { domainTmp.ZoneItemId = domain.ZoneItemId; ServerController.UpdateDomain(domainTmp); } } } return 0; } catch (Exception ex) { throw TaskManager.WriteError(ex); } finally { TaskManager.CompleteTask(); } }
public static WebSite GetWebSite(int siteItemId) { // load site item WebSite siteItem = (WebSite)PackageController.GetPackageItem(siteItemId); if (siteItem == null) return null; // load live site from service WebServer web = new WebServer(); ServiceProviderProxy.Init(web, siteItem.ServiceId); WebSite site = web.GetSite(siteItem.SiteId); // set other properties site.Id = siteItem.Id; site.Name = siteItem.Name; site.ServiceId = siteItem.ServiceId; site.PackageId = siteItem.PackageId; // load IP address site.SiteIPAddressId = siteItem.SiteIPAddressId; IPAddressInfo ip = ServerController.GetIPAddress(siteItem.SiteIPAddressId); if(ip != null) site.SiteIPAddress = ip.ExternalIP; // check if site has dedicated IP assigned var siteIpAddresses = ServerController.GetItemIPAddresses(siteItemId, IPAddressPool.None); foreach (var siteIp in siteIpAddresses) { var packageIpAddress = ServerController.GetPackageIPAddress(siteIp.AddressID); if (packageIpAddress != null && packageIpAddress.ExternalIP == site.SiteIPAddress) { site.IsDedicatedIP = true; break; } } // truncate home folder site.ContentPath = FilesController.GetVirtualPackagePath(siteItem.PackageId, site.ContentPath); //check if Coldfusion is available //site.ColdFusionAvailable = siteItem.ColdFusionAvailable; // set FrontPage account site.FrontPageAccount = siteItem.FrontPageAccount; if (String.IsNullOrEmpty(site.FrontPageAccount)) site.FrontPageAccount = GetFrontPageUsername(site.Name); // Set Web Deploy publishing account site.WebDeployPublishingAccount = siteItem.WebDeployPublishingAccount; // Set Web Deploy site publishing enabled site.WebDeploySitePublishingEnabled = siteItem.WebDeploySitePublishingEnabled; // Set Web Deploy site publishing profile site.WebDeploySitePublishingProfile = siteItem.WebDeploySitePublishingProfile; return site; }
public static int AddSite(StatsSite item) { // check account int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); if (accountCheck < 0) return accountCheck; // check package int packageCheck = SecurityContext.CheckPackage(item.PackageId, DemandPackage.IsActive); if (packageCheck < 0) return packageCheck; // check quota QuotaValueInfo quota = PackageController.GetPackageQuota(item.PackageId, Quotas.STATS_SITES); if (quota.QuotaExhausted) return BusinessErrorCodes.ERROR_STATS_RESOURCE_QUOTA_LIMIT; // check if stats resource is available int serviceId = PackageController.GetPackageServiceId(item.PackageId, ResourceGroups.Statistics); if (serviceId == 0) return BusinessErrorCodes.ERROR_STATS_RESOURCE_UNAVAILABLE; // check package items if (PackageController.GetPackageItemByName(item.PackageId, item.Name, typeof(StatsSite)) != null) return BusinessErrorCodes.ERROR_STATS_PACKAGE_ITEM_EXISTS; // place log record TaskManager.StartTask("STATS_SITE", "ADD", item.Name); try { // load web site WebSite siteItem = (WebSite)PackageController.GetPackageItemByName(item.PackageId, item.Name, typeof(WebSite)); if (siteItem == null) return BusinessErrorCodes.ERROR_WEB_SITE_SERVICE_UNAVAILABLE; // get service web site WebServer web = new WebServer(); ServiceProviderProxy.Init(web, siteItem.ServiceId); WebSite site = web.GetSite(siteItem.SiteId); List<DomainInfo> pointers = WebServerController.GetWebSitePointers(siteItem.Id); List<string> aliases = new List<string>(); foreach(DomainInfo pointer in pointers) aliases.Add(pointer.DomainName); StatisticsServer stats = new StatisticsServer(); ServiceProviderProxy.Init(stats, serviceId); string siteNumber = (site.IIs7) ? site[WebSite.IIS7_SITE_ID] : siteItem.SiteId.Replace("/", ""); string logsCommonFolder = site.LogsPath; string logsFolder = Path.Combine(logsCommonFolder, siteNumber); // get service settings StringDictionary settings = ServerController.GetServiceSettings(serviceId); if (Utils.ParseBool(settings["BuildUncLogsPath"], false)) { logsFolder = FilesController.ConvertToUncPath(siteItem.ServiceId, logsFolder); } item.LogDirectory = logsFolder; item.DomainAliases = aliases.ToArray(); // install statistics item.SiteId = stats.AddSite(item); // save statistics item item.ServiceId = serviceId; int itemId = PackageController.AddPackageItem(item); TaskManager.ItemId = itemId; return itemId; } catch (Exception ex) { throw TaskManager.WriteError(ex); } finally { TaskManager.CompleteTask(); } }
public static int UpdateWebSite(WebSite site) { // check account int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); if (accountCheck < 0) return accountCheck; // load web site item WebSite siteItem = (WebSite)PackageController.GetPackageItem(site.Id); if (siteItem == null) return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; // place log record TaskManager.StartTask("WEB_SITE", "UPDATE", siteItem.Name); TaskManager.ItemId = site.Id; try { // update home folder string origPath = site.ContentPath; site.ContentPath = FilesController.GetFullPackagePath(site.PackageId, site.ContentPath); // build data folder path site.DataPath = siteItem.DataPath; // update site on the service WebServer web = new WebServer(); ServiceProviderProxy.Init(web, siteItem.ServiceId); web.UpdateSite(site); // Restore settings back #region Web Deploy Settings site.WebDeployPublishingAccount = siteItem.WebDeployPublishingAccount; site.WebDeployPublishingPassword = siteItem.WebDeployPublishingPassword; site.WebDeploySitePublishingEnabled = siteItem.WebDeploySitePublishingEnabled; site.WebDeploySitePublishingProfile = siteItem.WebDeploySitePublishingProfile; #endregion // update service item PackageController.UpdatePackageItem(site); // set origpath site.ContentPath = origPath; return 0; } catch (Exception ex) { throw TaskManager.WriteError(ex); } finally { TaskManager.CompleteTask(); } }
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(); } }
public static int ChangeSiteState(int siteItemId, ServerState state) { // check account int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); if (accountCheck < 0) return accountCheck; // load site item WebSite siteItem = (WebSite)PackageController.GetPackageItem(siteItemId); if (siteItem == null) return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; // check package int packageCheck = SecurityContext.CheckPackage(siteItem.PackageId, DemandPackage.IsActive); if (packageCheck < 0) return packageCheck; // place log record TaskManager.StartTask("WEB_SITE", "CHANGE_STATE", siteItem.Name); TaskManager.ItemId = siteItemId; TaskManager.WriteParameter("New state", state); try { // change state WebServer web = new WebServer(); ServiceProviderProxy.Init(web, siteItem.ServiceId); web.ChangeSiteState(siteItem.SiteId, state); return 0; } catch (Exception ex) { throw TaskManager.WriteError(ex); } finally { TaskManager.CompleteTask(); } }
public static int SwitchWebSiteToSharedIP(int siteItemId) { // 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; // place log record TaskManager.StartTask("WEB_SITE", "SWITCH_TO_SHARED_IP", siteItem.Name, siteItemId); try { IPAddressInfo ip; DomainInfo domain = ServerController.GetDomain(siteItem.Name); DomainInfo ZoneInfo = ServerController.GetDomain(domain.DomainItemId); if (ZoneInfo == null) throw new Exception("Parent zone not found"); if (ZoneInfo.ZoneItemId > 0) { StringDictionary settings = ServerController.GetServiceSettings(siteItem.ServiceId); if (string.IsNullOrEmpty(settings["PublicSharedIP"])) return BusinessErrorCodes.ERROR_PUBLICSHAREDIP_FOR_SHAREDIP; } //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); } // remove all web site pointers 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 WebServer web = new WebServer(); ServiceProviderProxy.Init(web, siteItem.ServiceId); List<ServerBinding> newBindings = new List<ServerBinding>(); 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); } //figure out the PackageAddressId PackageIPAddress packageIpAddress = null; var siteIpAddresses = ServerController.GetItemIPAddresses(siteItemId, IPAddressPool.None); foreach (var siteIp in siteIpAddresses) { packageIpAddress = ServerController.GetPackageIPAddress(siteIp.AddressID); if (packageIpAddress != null && packageIpAddress.AddressID == siteItem.SiteIPAddressId) { break; } } //Deallocate IP Address if (packageIpAddress != null) ServerController.DeleteItemIPAddress(siteItemId, packageIpAddress.PackageAddressID); // update site item siteItem.SiteIPAddressId = 0; PackageController.UpdatePackageItem(siteItem); 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); } 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(); } }
public static WebServer GetWebServer(int serviceId) { WebServer ws = new WebServer(); ServiceProviderProxy.Init(ws, serviceId); return ws; }
public static int DeleteVirtualDirectory(int siteItemId, string vdirName) { // check account int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); if (accountCheck < 0) return accountCheck; // load site item WebSite siteItem = (WebSite)PackageController.GetPackageItem(siteItemId); if (siteItem == null) return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; // place log record // place log record TaskManager.StartTask("WEB_SITE", "DELETE_VDIR", vdirName); TaskManager.ItemId = siteItemId; TaskManager.WriteParameter("Web site", siteItem.Name); try { // create directory WebServer web = new WebServer(); ServiceProviderProxy.Init(web, siteItem.ServiceId); web.DeleteVirtualDirectory(siteItem.SiteId, vdirName); return 0; } catch (Exception ex) { throw TaskManager.WriteError(ex); } finally { TaskManager.CompleteTask(); } }
public static List<WebVirtualDirectory> GetVirtualDirectories(int siteItemId) { List<WebVirtualDirectory> dirs = new List<WebVirtualDirectory>(); // load site item WebSite siteItem = (WebSite)PackageController.GetPackageItem(siteItemId); if (siteItem == null) return dirs; // truncate home folders WebServer web = new WebServer(); ServiceProviderProxy.Init(web, siteItem.ServiceId); WebVirtualDirectory[] vdirs = web.GetVirtualDirectories(siteItem.SiteId); foreach (WebVirtualDirectory vdir in vdirs) { vdir.ContentPath = FilesController.GetVirtualPackagePath(siteItem.PackageId, vdir.ContentPath); dirs.Add(vdir); } return dirs; }
public static int InstallFrontPage(int siteItemId, string username, string password) { // check account int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); if (accountCheck < 0) return accountCheck; // load site item WebSite siteItem = (WebSite)PackageController.GetPackageItem(siteItemId); if (siteItem == null) return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; // check package int packageCheck = SecurityContext.CheckPackage(siteItem.PackageId, DemandPackage.IsActive); if (packageCheck < 0) return packageCheck; // place log record TaskManager.StartTask("WEB_SITE", "INSTALL_FP", siteItem.Name); TaskManager.ItemId = siteItemId; TaskManager.WriteParameter("FrontPage username", username); try { WebServer web = new WebServer(); ServiceProviderProxy.Init(web, siteItem.ServiceId); // load original site //WebSite origSite = GetWebSite(siteItemId); // install FP bool success = web.InstallFrontPage(siteItem.SiteId, username, password); if (!success) { TaskManager.WriteWarning("Account exists"); return BusinessErrorCodes.ERROR_FP_ACCOUNT_EXISTS; } // update site with FP account siteItem.FrontPageAccount = username; siteItem.FrontPagePassword = CryptoUtils.Encrypt(password); PackageController.UpdatePackageItem(siteItem); // restore original site //UpdateWebSite(origSite); return 0; } catch (Exception ex) { throw TaskManager.WriteError(ex); } finally { TaskManager.CompleteTask(); } }
public static int AddVirtualDirectory(int siteItemId, string vdirName, string vdirPath) { // check account int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); if (accountCheck < 0) return accountCheck; // load site item WebSite siteItem = (WebSite)PackageController.GetPackageItem(siteItemId); if (siteItem == null) return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; // check package int packageCheck = SecurityContext.CheckPackage(siteItem.PackageId, DemandPackage.IsActive); if (packageCheck < 0) return packageCheck; // place log record TaskManager.StartTask("WEB_SITE", "ADD_VDIR", vdirName); TaskManager.ItemId = siteItemId; TaskManager.WriteParameter("Web site", siteItem.Name); try { // create virtual directory WebVirtualDirectory dir = new WebVirtualDirectory(); dir.Name = vdirName; dir.ContentPath = FilesController.GetFullPackagePath(siteItem.PackageId, vdirPath); dir.EnableAnonymousAccess = true; dir.EnableWindowsAuthentication = true; dir.EnableBasicAuthentication = false; //dir.InstalledDotNetFramework = aspNet; dir.DefaultDocs = null; // inherit from service dir.HttpRedirect = ""; dir.HttpErrors = null; dir.MimeMaps = null; // create directory WebServer web = new WebServer(); ServiceProviderProxy.Init(web, siteItem.ServiceId); if (web.VirtualDirectoryExists(siteItem.SiteId, vdirName)) return BusinessErrorCodes.ERROR_VDIR_ALREADY_EXISTS; web.CreateVirtualDirectory(siteItem.SiteId, dir); return 0; } catch (Exception ex) { throw TaskManager.WriteError(ex); } finally { TaskManager.CompleteTask(); } }
internal static int AddWebSitePointer(int siteItemId, int domainId, bool updateWebSite) { // check account int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); if (accountCheck < 0) return accountCheck; // load site item WebSite siteItem = (WebSite)PackageController.GetPackageItem(siteItemId); if (siteItem == null) return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; // load domain item DomainInfo domain = ServerController.GetDomain(domainId); if (domain == null) return BusinessErrorCodes.ERROR_DOMAIN_PACKAGE_ITEM_NOT_FOUND; // load appropriate zone DnsZone zone = (DnsZone)PackageController.GetPackageItem(domain.ZoneItemId); //if (zone == null) // return BusinessErrorCodes.ERROR_DNS_PACKAGE_ITEM_NOT_FOUND; // get zone records for the service List<GlobalDnsRecord> dnsRecords = ServerController.GetDnsRecordsByService(siteItem.ServiceId); // change DNS zone IPAddressInfo ip = ServerController.GetIPAddress(siteItem.SiteIPAddressId); if (ip == null) return BusinessErrorCodes.ERROR_WEB_SITE_IP_ADDRESS_NOT_SPECIFIED; List<DnsRecord> resourceRecords = DnsServerController.BuildDnsResourceRecords( dnsRecords, domain.DomainName, ip.ExternalIP); // place log record TaskManager.StartTask("WEB_SITE", "ADD_POINTER", siteItem.Name); TaskManager.ItemId = siteItemId; TaskManager.WriteParameter("Domain pointer", domain.DomainName); try { if (zone != null) { try { DNSServer dns = new DNSServer(); ServiceProviderProxy.Init(dns, zone.ServiceId); // add new resource records dns.AddZoneRecords(zone.Name, resourceRecords.ToArray()); } catch(Exception ex1) { TaskManager.WriteError(ex1, "Error updating DNS records"); } } // update host headers if (updateWebSite) { // load web settings StringDictionary webSettings = ServerController.GetServiceSettings(siteItem.ServiceId); int sharedIpId = Utils.ParseInt(webSettings["SharedIP"], 0); bool dedicatedIp = (siteItem.SiteIPAddressId != sharedIpId); if (!dedicatedIp) { WebServer web = new WebServer(); ServiceProviderProxy.Init(web, siteItem.ServiceId); List<ServerBinding> bindings = new List<ServerBinding>(); ServerBinding[] siteBindings = web.GetSiteBindings(siteItem.SiteId); if(siteBindings != null) bindings.AddRange(siteBindings); // add new host headers string ipAddr = ip.InternalIP; if (ipAddr == null || ipAddr == "") ipAddr = ip.ExternalIP; // fill bindings FillWebServerBindings(bindings, dnsRecords, ipAddr, domain.DomainName); // update bindings web.UpdateSiteBindings(siteItem.SiteId, bindings.ToArray()); } } // update domain domain.WebSiteId = siteItemId; ServerController.UpdateDomain(domain); return 0; } catch (Exception ex) { throw TaskManager.WriteError(ex); } finally { TaskManager.CompleteTask(); } }