From 5c239f09337f1e67c42dfb4b764dd48a6d98c721 Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Tue, 18 Nov 2014 00:59:01 -0800 Subject: [PATCH] removed orig files --- .../Servers/ServerController.cs.orig | 2907 ----------------- 1 file changed, 2907 deletions(-) delete mode 100644 WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs.orig diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs.orig b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs.orig deleted file mode 100644 index f1b2cb07..00000000 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs.orig +++ /dev/null @@ -1,2907 +0,0 @@ -// Copyright (c) 2014, Outercurve Foundation. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// - Redistributions of source code must retain the above copyright notice, this -// list of conditions and the following disclaimer. -// -// - Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// - Neither the name of the Outercurve Foundation nor the names of its -// contributors may be used to endorse or promote products derived from this -// software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -using System; -using System.Collections.Generic; -using System.Collections.Specialized; -using System.Data; -using System.Net; -using System.Xml; -using WebsitePanel.Providers; -using WebsitePanel.Providers.Common; -using WebsitePanel.Providers.DNS; -using WebsitePanel.Server; -using WebsitePanel.Providers.ResultObjects; -using WebsitePanel.Providers.Web; -using WebsitePanel.Providers.HostedSolution; -using WebsitePanel.Providers.DomainLookup; -using System.Linq; - -namespace WebsitePanel.EnterpriseServer -{ - /// - /// Summary description for ServersController. - /// - public class ServerController - { - private const string LOG_SOURCE_SERVERS = "SERVERS"; - - #region Servers - public static List GetAllServers() - { - // fill collection - return ObjectUtils.CreateListFromDataSet( - DataProvider.GetAllServers(SecurityContext.User.UserId)); - } - - public static DataSet GetRawAllServers() - { - return DataProvider.GetAllServers(SecurityContext.User.UserId); - } - - public static List GetServers() - { - // create servers list - List servers = new List(); - - // fill collection - ObjectUtils.FillCollectionFromDataSet( - servers, DataProvider.GetServers(SecurityContext.User.UserId)); - - return servers; - } - - public static DataSet GetRawServers() - { - return DataProvider.GetServers(SecurityContext.User.UserId); - } - - internal static ServerInfo GetServerByIdInternal(int serverId) - { - ServerInfo server = ObjectUtils.FillObjectFromDataReader( - DataProvider.GetServerInternal(serverId)); - - if (server == null) - return null; - - // decrypt passwords - server.Password = CryptoUtils.Decrypt(server.Password); - server.ADPassword = CryptoUtils.Decrypt(server.ADPassword); - - return server; - } - - public static ServerInfo GetServerShortDetails(int serverId) - { - return ObjectUtils.FillObjectFromDataReader( - DataProvider.GetServerShortDetails(serverId)); - } - - public static ServerInfo GetServerById(int serverId) - { - return ObjectUtils.FillObjectFromDataReader( - DataProvider.GetServer(SecurityContext.User.UserId, serverId)); - } - - public static ServerInfo GetServerByName(string serverName) - { - return ObjectUtils.FillObjectFromDataReader( - DataProvider.GetServerByName(SecurityContext.User.UserId, serverName)); - } - - public static int CheckServerAvailable(string serverUrl, string password) - { - // check account - int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive - | DemandAccount.IsAdmin); - if (accountCheck < 0) return accountCheck; - - TaskManager.StartTask("SERVER", "CHECK_AVAILABILITY", serverUrl); - - try - { - // TO-DO: Check connectivity - return 0; - } - catch (WebException ex) - { - HttpWebResponse response = (HttpWebResponse)ex.Response; - if (response != null && response.StatusCode == HttpStatusCode.NotFound) - return BusinessErrorCodes.ERROR_ADD_SERVER_NOT_FOUND; - else if (response != null && response.StatusCode == HttpStatusCode.BadRequest) - return BusinessErrorCodes.ERROR_ADD_SERVER_BAD_REQUEST; - else if (response != null && response.StatusCode == HttpStatusCode.InternalServerError) - return BusinessErrorCodes.ERROR_ADD_SERVER_INTERNAL_SERVER_ERROR; - else if (response != null && response.StatusCode == HttpStatusCode.ServiceUnavailable) - return BusinessErrorCodes.ERROR_ADD_SERVER_SERVICE_UNAVAILABLE; - else if (response != null && response.StatusCode == HttpStatusCode.Unauthorized) - return BusinessErrorCodes.ERROR_ADD_SERVER_UNAUTHORIZED; - if (ex.Message.Contains("The remote name could not be resolved") || ex.Message.Contains("Unable to connect")) - { - TaskManager.WriteError("The remote server could not ne resolved"); - return BusinessErrorCodes.ERROR_ADD_SERVER_URL_UNAVAILABLE; - } - return BusinessErrorCodes.ERROR_ADD_SERVER_APPLICATION_ERROR; - } - catch (Exception ex) - { - if (ex.Message.Contains("The signature or decryption was invalid")) - { - TaskManager.WriteWarning("Wrong server access credentials"); - return BusinessErrorCodes.ERROR_ADD_SERVER_WRONG_PASSWORD; - } - else - { - TaskManager.WriteError("General Server Error"); - TaskManager.WriteError(ex); - return BusinessErrorCodes.ERROR_ADD_SERVER_APPLICATION_ERROR; - } - } - finally - { - TaskManager.CompleteTask(); - } - } - - private static void FindServices(ServerInfo server) - { - try - { - List providers; - try - { - providers = GetProviders(); - } - catch (Exception ex) - { - TaskManager.WriteError(ex); - throw new ApplicationException("Could not get providers list."); - } - - foreach (ProviderInfo provider in providers) - { - if (!provider.DisableAutoDiscovery) - { - BoolResult isInstalled = IsInstalled(server.ServerId, provider.ProviderId); - if (isInstalled.IsSuccess) - { - if (isInstalled.Value) - { - try - { - ServiceInfo service = new ServiceInfo(); - service.ServerId = server.ServerId; - service.ProviderId = provider.ProviderId; - service.ServiceName = provider.DisplayName; - AddService(service); - } - catch (Exception ex) - { - TaskManager.WriteError(ex); - } - } - } - else - { - string errors = string.Join("\n", isInstalled.ErrorCodes.ToArray()); - string str = - string.Format( - "Could not check if specific software intalled for {0}. Following errors have been occured:\n{1}", - provider.ProviderName, errors); - - TaskManager.WriteError(str); - } - } - } - } - catch (Exception ex) - { - throw new ApplicationException("Could not find services. General error was occued.", ex); - } - } - - public static int AddServer(ServerInfo server, bool autoDiscovery) - { - // check account - int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive - | DemandAccount.IsAdmin); - if (accountCheck < 0) return accountCheck; - - // init passwords - if (server.Password == null) - server.Password = ""; - if (server.ADPassword == null) - server.ADPassword = ""; - - // check server availability - if (!server.VirtualServer) - { - int availResult = CheckServerAvailable(server.ServerUrl, server.Password); - if (availResult < 0) - return availResult; - } - - TaskManager.StartTask("SERVER", "ADD", server.ServerName); - - int serverId = DataProvider.AddServer(server.ServerName, server.ServerUrl, - CryptoUtils.Encrypt(server.Password), server.Comments, server.VirtualServer, server.InstantDomainAlias, - server.PrimaryGroupId, server.ADEnabled, server.ADRootDomain, server.ADUsername, CryptoUtils.Encrypt(server.ADPassword), - server.ADAuthenticationType); - - if (autoDiscovery) - { - server.ServerId = serverId; - try - { - FindServices(server); - } - catch (Exception ex) - { - TaskManager.WriteError(ex); - } - } - - TaskManager.ItemId = serverId; - - TaskManager.CompleteTask(); - - return serverId; - } - - public static int UpdateServer(ServerInfo server) - { - // check account - int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive - | DemandAccount.IsAdmin); - if (accountCheck < 0) return accountCheck; - - // get original server - ServerInfo origServer = GetServerByIdInternal(server.ServerId); - - TaskManager.StartTask("SERVER", "UPDATE", origServer.ServerName, server.ServerId); - - // preserve passwords - server.Password = origServer.Password; - server.ADPassword = origServer.ADPassword; - - // check server availability - if (!origServer.VirtualServer) - { - int availResult = CheckServerAvailable(server.ServerUrl, server.Password); - if (availResult < 0) - return availResult; - } - - DataProvider.UpdateServer(server.ServerId, server.ServerName, server.ServerUrl, - CryptoUtils.Encrypt(server.Password), server.Comments, server.InstantDomainAlias, - server.PrimaryGroupId, server.ADEnabled, server.ADRootDomain, server.ADUsername, CryptoUtils.Encrypt(server.ADPassword), - server.ADAuthenticationType); - - TaskManager.CompleteTask(); - - return 0; - } - - public static int UpdateServerConnectionPassword(int serverId, string password) - { - // check account - int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive - | DemandAccount.IsAdmin); - if (accountCheck < 0) return accountCheck; - - // get original server - ServerInfo server = GetServerByIdInternal(serverId); - - TaskManager.StartTask("SERVER", "UPDATE_PASSWORD", server.ServerName, serverId); - - // set password - server.Password = password; - - // update server - DataProvider.UpdateServer(server.ServerId, server.ServerName, server.ServerUrl, - CryptoUtils.Encrypt(server.Password), server.Comments, server.InstantDomainAlias, - server.PrimaryGroupId, server.ADEnabled, server.ADRootDomain, server.ADUsername, CryptoUtils.Encrypt(server.ADPassword), - server.ADAuthenticationType); - - TaskManager.CompleteTask(); - - return 0; - } - - public static int UpdateServerADPassword(int serverId, string adPassword) - { - // check account - int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive - | DemandAccount.IsAdmin); - if (accountCheck < 0) return accountCheck; - - // get original server - ServerInfo server = GetServerByIdInternal(serverId); - - TaskManager.StartTask("SERVER", "UPDATE_AD_PASSWORD", server.ServerName, serverId); - - // set password - server.ADPassword = adPassword; - - // update server - DataProvider.UpdateServer(server.ServerId, server.ServerName, server.ServerUrl, - CryptoUtils.Encrypt(server.Password), server.Comments, server.InstantDomainAlias, - server.PrimaryGroupId, server.ADEnabled, server.ADRootDomain, server.ADUsername, CryptoUtils.Encrypt(server.ADPassword), - server.ADAuthenticationType); - - TaskManager.CompleteTask(); - - return 0; - } - - public static int DeleteServer(int serverId) - { - // check account - int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive - | DemandAccount.IsAdmin); - if (accountCheck < 0) return accountCheck; - - // get original server - ServerInfo server = GetServerByIdInternal(serverId); - - TaskManager.StartTask("SERVER", "DELETE", server.ServerName, serverId); - - try - { - int result = DataProvider.DeleteServer(serverId); - if (result == -1) - { - TaskManager.WriteError("Server contains services"); - return BusinessErrorCodes.ERROR_SERVER_CONTAINS_SERVICES; - } - else if (result == -2) - { - TaskManager.WriteError("Server contains spaces"); - return BusinessErrorCodes.ERROR_SERVER_CONTAINS_PACKAGES; - } - else if (result == -3) - { - TaskManager.WriteError("Server is used as a target in several hosting plans"); - return BusinessErrorCodes.ERROR_SERVER_USED_IN_HOSTING_PLANS; - } - - return 0; - } - finally - { - TaskManager.CompleteTask(); - } - } - #endregion - - #region Virtual Servers - public static DataSet GetVirtualServers() - { - return DataProvider.GetVirtualServers(SecurityContext.User.UserId); - } - - public static DataSet GetAvailableVirtualServices(int serverId) - { - return DataProvider.GetAvailableVirtualServices(SecurityContext.User.UserId, serverId); - } - - public static DataSet GetVirtualServices(int serverId) - { - return DataProvider.GetVirtualServices(SecurityContext.User.UserId, serverId); - } - - public static int AddVirtualServices(int serverId, int[] ids) - { - // check account - int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsAdmin - | DemandAccount.IsActive); - if (accountCheck < 0) return accountCheck; - - ServerInfo server = GetServerByIdInternal(serverId); - - TaskManager.StartTask("VIRTUAL_SERVER", "ADD_SERVICES", server.ServerName, serverId); - - // build XML - string xml = BuildXmlFromArray(ids, "services", "service"); - - // update server - DataProvider.AddVirtualServices(serverId, xml); - - TaskManager.CompleteTask(); - - return 0; - } - - public static int DeleteVirtualServices(int serverId, int[] ids) - { - // check account - int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsAdmin - | DemandAccount.IsActive); - if (accountCheck < 0) return accountCheck; - - ServerInfo server = GetServerByIdInternal(serverId); - - TaskManager.StartTask("VIRTUAL_SERVER", "DELETE_SERVICES", server.ServerName, serverId); - - // build XML - string xml = BuildXmlFromArray(ids, "services", "service"); - - // update server - DataProvider.DeleteVirtualServices(serverId, xml); - - TaskManager.CompleteTask(); - - return 0; - } - - public static int UpdateVirtualGroups(int serverId, VirtualGroupInfo[] groups) - { - // check account - int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsAdmin - | DemandAccount.IsActive); - if (accountCheck < 0) return accountCheck; - - /* - XML Format: - - - - - - */ - - // build XML - XmlDocument doc = new XmlDocument(); - XmlElement nodeGroups = doc.CreateElement("groups"); - // groups - if (groups != null) - { - foreach (VirtualGroupInfo group in groups) - { - XmlElement nodeGroup = doc.CreateElement("group"); - nodeGroups.AppendChild(nodeGroup); - nodeGroup.SetAttribute("id", group.GroupId.ToString()); - nodeGroup.SetAttribute("distributionType", group.DistributionType.ToString()); - nodeGroup.SetAttribute("bindDistributionToPrimary", group.BindDistributionToPrimary ? "1" : "0"); - } - } - - string xml = nodeGroups.OuterXml; - - // update server - DataProvider.UpdateVirtualGroups(serverId, xml); - - return 0; - } - - private static string BuildXmlFromArray(int[] ids, string rootName, string childName) - { - XmlDocument doc = new XmlDocument(); - XmlElement nodeRoot = doc.CreateElement(rootName); - foreach (int id in ids) - { - XmlElement nodeChild = doc.CreateElement(childName); - nodeChild.SetAttribute("id", id.ToString()); - nodeRoot.AppendChild(nodeChild); - } - - return nodeRoot.OuterXml; - } - #endregion - - #region Services - public static DataSet GetRawServicesByServerId(int serverId) - { - return DataProvider.GetRawServicesByServerId(SecurityContext.User.UserId, serverId); - } - - public static List GetServicesByServerId(int serverId) - { - List services = new List(); - ObjectUtils.FillCollectionFromDataReader(services, - DataProvider.GetServicesByServerId(SecurityContext.User.UserId, serverId)); - return services; - } - - public static List GetServicesByServerIdGroupName(int serverId, string groupName) - { - List services = new List(); - ObjectUtils.FillCollectionFromDataReader(services, - DataProvider.GetServicesByServerIdGroupName(SecurityContext.User.UserId, - serverId, groupName)); - return services; - } - - public static DataSet GetRawServicesByGroupId(int groupId) - { - return DataProvider.GetServicesByGroupId(SecurityContext.User.UserId, groupId); - } - - public static DataSet GetRawServicesByGroupName(string groupName) - { - return DataProvider.GetServicesByGroupName(SecurityContext.User.UserId, groupName); - } - - public static List GetServicesByGroupName(string groupName) - { - return ObjectUtils.CreateListFromDataSet( - DataProvider.GetServicesByGroupName(SecurityContext.User.UserId, groupName)); - } - - public static ServiceInfo GetServiceInfoAdmin(int serviceId) - { - // check account - int accountCheck = SecurityContext.CheckAccount(DemandAccount.IsAdmin - | DemandAccount.IsActive); - if (accountCheck < 0) - return null; - - return ObjectUtils.FillObjectFromDataReader( - DataProvider.GetService(SecurityContext.User.UserId, serviceId)); - } - - public static ServiceInfo GetServiceInfo(int serviceId) - { - return ObjectUtils.FillObjectFromDataReader( - DataProvider.GetService(SecurityContext.User.UserId, serviceId)); - } - - public static int AddService(ServiceInfo service) - { - // check account - int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsAdmin - | DemandAccount.IsActive); - if (accountCheck < 0) return accountCheck; - - TaskManager.StartTask("SERVER", "ADD_SERVICE", GetServerByIdInternal(service.ServerId).ServerName, service.ServerId); - - TaskManager.WriteParameter("Service name", service.ServiceName); - TaskManager.WriteParameter("Provider", service.ProviderId); - - int serviceId = DataProvider.AddService(service.ServerId, service.ProviderId, service.ServiceName, - service.ServiceQuotaValue, service.ClusterId, service.Comments); - - // read service default settings - try - { - // load original settings - StringDictionary origSettings = GetServiceSettingsAdmin(serviceId); - - // load provider settings - ServiceProvider svc = new ServiceProvider(); - ServiceProviderProxy.Init(svc, serviceId); - - SettingPair[] settings = svc.GetProviderDefaultSettings(); - - if (settings != null && settings.Length > 0) - { - // merge settings - foreach (SettingPair pair in settings) - origSettings[pair.Name] = pair.Value; - - // update settings in the meta base - string[] bareSettings = new string[origSettings.Count]; - int i = 0; - foreach (string key in origSettings.Keys) - bareSettings[i++] = key + "=" + origSettings[key]; - - UpdateServiceSettings(serviceId, bareSettings); - } - } - catch (Exception ex) - { - TaskManager.WriteError(ex, "Error reading default provider settings"); - } - - TaskManager.CompleteTask(); - - return serviceId; - } - - public static int UpdateService(ServiceInfo service) - { - // check account - int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsAdmin - | DemandAccount.IsActive); - if (accountCheck < 0) return accountCheck; - - // load original service - ServiceInfo origService = GetServiceInfo(service.ServiceId); - - TaskManager.StartTask("SERVER", "UPDATE_SERVICE", GetServerByIdInternal(origService.ServerId).ServerName, origService.ServerId); - - TaskManager.WriteParameter("New service name", service.ServiceName); - - DataProvider.UpdateService(service.ServiceId, service.ServiceName, - service.ServiceQuotaValue, service.ClusterId, service.Comments); - - TaskManager.CompleteTask(); - - return 0; - } - - public static int DeleteService(int serviceId) - { - // check account - int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsAdmin - | DemandAccount.IsActive); - if (accountCheck < 0) return accountCheck; - - ServiceInfo service = GetServiceInfoAdmin(serviceId); - - TaskManager.StartTask("SERVER", "DELETE_SERVICE", GetServerByIdInternal(service.ServerId).ServerName, service.ServerId); - - TaskManager.WriteParameter("Service name", service.ServiceName); - - try - { - int result = DataProvider.DeleteService(serviceId); - if (result == -1) - { - TaskManager.WriteError("Service contains service items"); - return BusinessErrorCodes.ERROR_SERVICE_CONTAINS_SERVICE_ITEMS; - } - else if (result == -2) - { - TaskManager.WriteError("Service is assigned to virtual server"); - return BusinessErrorCodes.ERROR_SERVICE_USED_IN_VIRTUAL_SERVER; - } - - return 0; - - } - finally - { - TaskManager.CompleteTask(); - } - } - - public static StringDictionary GetServiceSettingsAdmin(int serviceId) - { - // check account - int accountCheck = SecurityContext.CheckAccount(DemandAccount.IsAdmin | DemandAccount.IsActive); - if (accountCheck < 0) - return null; - - bool isDemoAccount = (SecurityContext.CheckAccount(DemandAccount.NotDemo) < 0); - - return GetServiceSettings(serviceId, !isDemoAccount); - } - - internal static StringDictionary GetServiceSettings(int serviceId) - { - return GetServiceSettings(serviceId, true); - } - - internal static StringDictionary GetServiceSettings(int serviceId, bool decryptPassword) - { - // get service settings - IDataReader reader = DataProvider.GetServiceProperties(SecurityContext.User.UserId, serviceId); - - // create settings object - StringDictionary settings = new StringDictionary(); - while (reader.Read()) - { - string name = (string)reader["PropertyName"]; - string val = (string)reader["PropertyValue"]; - - if (name.ToLower().IndexOf("password") != -1 && decryptPassword) - val = CryptoUtils.Decrypt(val); - - settings.Add(name, val); - } - reader.Close(); - - return settings; - } - - public static int UpdateServiceSettings(int serviceId, string[] settings) - { - // check account - int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsAdmin - | DemandAccount.IsActive); - if (accountCheck < 0) return accountCheck; - - if (settings != null) - { - // build xml - XmlDocument doc = new XmlDocument(); - XmlElement nodeProps = doc.CreateElement("properties"); - foreach (string setting in settings) - { - int idx = setting.IndexOf('='); - string name = setting.Substring(0, idx); - string val = setting.Substring(idx + 1); - - if (name.ToLower().IndexOf("password") != -1) - val = CryptoUtils.Encrypt(val); - - XmlElement nodeProp = doc.CreateElement("property"); - nodeProp.SetAttribute("name", name); - nodeProp.SetAttribute("value", val); - nodeProps.AppendChild(nodeProp); - } - - string xml = nodeProps.OuterXml; - - // update settings - DataProvider.UpdateServiceProperties(serviceId, xml); - } - - return 0; - } - - public static string[] InstallService(int serviceId) - { - ServiceProvider prov = new ServiceProvider(); - ServiceProviderProxy.Init(prov, serviceId); - return prov.Install(); - } - - public static QuotaInfo GetProviderServiceQuota(int providerId) - { - return ObjectUtils.FillObjectFromDataReader( - DataProvider.GetProviderServiceQuota(providerId)); - } - #endregion - - #region Providers - - public static List GetInstalledProviders(int groupId) - { - List provs = new List(); - ObjectUtils.FillCollectionFromDataSet(provs, - DataProvider.GetGroupProviders(groupId)); - return provs; - } - - public static List GetResourceGroups() - { - List groups = new List(); - ObjectUtils.FillCollectionFromDataSet(groups, - DataProvider.GetResourceGroups()); - return groups; - } - - public static ResourceGroupInfo GetResourceGroup(int groupId) - { - return ObjectUtils.FillObjectFromDataReader( - DataProvider.GetResourceGroup(groupId)); - } - - public static ResourceGroupInfo GetResourceGroupByName(string name) - { - return ObjectUtils.FillObjectFromDataReader( - DataProvider.GetResourceGroupByName(name)); - } - - public static ProviderInfo GetProvider(int providerId) - { - return ObjectUtils.FillObjectFromDataReader( - DataProvider.GetProvider(providerId)); - } - - public static List GetProviders() - { - List provs = new List(); - ObjectUtils.FillCollectionFromDataSet( - provs, DataProvider.GetProviders()); - return provs; - } - - public static List GetProvidersByGroupID(int groupId) - { - List provs = new List(); - ObjectUtils.FillCollectionFromDataSet( - provs, DataProvider.GetGroupProviders(groupId)); - return provs; - } - - public static ProviderInfo GetPackageServiceProvider(int packageId, string groupName) - { - // load service - int serviceId = PackageController.GetPackageServiceId(packageId, groupName); - - if (serviceId == 0) - return null; - - ServiceInfo service = GetServiceInfo(serviceId); - return GetProvider(service.ProviderId); - } - - public static BoolResult IsInstalled(int serverId, int providerId) - { - BoolResult res = TaskManager.StartResultTask("AUTO_DISCOVERY", "IS_INSTALLED"); - - try - { - ProviderInfo provider = GetProvider(providerId); - if (provider == null) - { - TaskManager.CompleteResultTask(res, ErrorCodes.CANNOT_GET_PROVIDER_INFO); - return res; - } - - AutoDiscovery.AutoDiscovery ad = new AutoDiscovery.AutoDiscovery(); - ServiceProviderProxy.ServerInit(ad, serverId); - - res = ad.IsInstalled(provider.ProviderType); - } - catch (Exception ex) - { - TaskManager.CompleteResultTask(res, ErrorCodes.CANNOT_CHECK_IF_PROVIDER_SOFTWARE_INSTALLED, ex); - - } - - TaskManager.CompleteResultTask(); - return res; - } - - public static string GetServerVersion(int serverId) - { - AutoDiscovery.AutoDiscovery ad = new AutoDiscovery.AutoDiscovery(); - ServiceProviderProxy.ServerInit(ad, serverId); - - return ad.GetServerVersion(); - } - - #endregion - - #region IP Addresses - public static List GetIPAddresses(IPAddressPool pool, int serverId) - { - return ObjectUtils.CreateListFromDataReader( - DataProvider.GetIPAddresses(SecurityContext.User.UserId, (int)pool, serverId)); - } - - public static IPAddressesPaged GetIPAddressesPaged(IPAddressPool pool, int serverId, - string filterColumn, string filterValue, string sortColumn, int startRow, int maximumRows) - { - IPAddressesPaged result = new IPAddressesPaged(); - - // get reader - IDataReader reader = DataProvider.GetIPAddressesPaged(SecurityContext.User.UserId, (int)pool, serverId, filterColumn, filterValue, sortColumn, startRow, maximumRows); - - // number of items = first data reader - reader.Read(); - result.Count = (int)reader[0]; - - // items = second data reader - reader.NextResult(); - result.Items = ObjectUtils.CreateListFromDataReader(reader).ToArray(); - - return result; - } - - public static IPAddressInfo GetIPAddress(int addressId) - { - return ObjectUtils.FillObjectFromDataReader( - DataProvider.GetIPAddress(addressId)); - } - - public static string GetExternalIPAddress(int addressId) - { - IPAddressInfo ip = GetIPAddress(addressId); - return (ip != null ? ip.ExternalIP : null); - } - - public static IntResult AddIPAddress(IPAddressPool pool, int serverId, - string externalIP, string internalIP, string subnetMask, string defaultGateway, string comments) - { - IntResult res = new IntResult(); - - #region Check account statuses - // check account - if (!SecurityContext.CheckAccount(res, DemandAccount.NotDemo | DemandAccount.IsAdmin | DemandAccount.IsActive)) - return res; - #endregion - - // start task - res = TaskManager.StartResultTask("IP_ADDRESS", "ADD", externalIP); - - TaskManager.WriteParameter("IP Address", externalIP); - TaskManager.WriteParameter("NAT Address", internalIP); - - try - { - res.Value = DataProvider.AddIPAddress((int)pool, serverId, externalIP, internalIP, - subnetMask, defaultGateway, comments); - - } - catch (Exception ex) - { - TaskManager.CompleteResultTask(res, "IP_ADDRESS_ADD_ERROR", ex); - return res; - } - - TaskManager.CompleteResultTask(); - return res; - } - - public static ResultObject AddIPAddressesRange(IPAddressPool pool, int serverId, - string externalIP, string endIP, string internalIP, string subnetMask, string defaultGateway, string comments) - { - const int MaxSubnet = 512; // TODO bigger max subnet? - - ResultObject res = new ResultObject(); - - #region Check account statuses - // check account - if (!SecurityContext.CheckAccount(res, DemandAccount.NotDemo | DemandAccount.IsAdmin | DemandAccount.IsActive)) - return res; - #endregion - - // start task - res = TaskManager.StartResultTask("IP_ADDRESS", "ADD_RANGE", externalIP); - - TaskManager.WriteParameter("IP Address", externalIP); - TaskManager.WriteParameter("End IP Address", endIP); - TaskManager.WriteParameter("NAT Address", internalIP); - - try - { - if (externalIP == endIP) - { - // add single IP and exit - AddIPAddress(pool, serverId, externalIP, internalIP, subnetMask, defaultGateway, comments); - TaskManager.CompleteResultTask(); - return res; - } - - if (pool == IPAddressPool.PhoneNumbers) - { - string phoneFormat = "D" + Math.Max(externalIP.Length, endIP.Length); - - UInt64 start = UInt64.Parse(externalIP); - UInt64 end = UInt64.Parse(endIP); - - if (end < start) { UInt64 temp = start; start = end; end = temp; } - - const UInt64 maxPhones = 1000; // TODO max? - - end = Math.Min(end, start + maxPhones); - - for (UInt64 number = start; number <= end; number++) - DataProvider.AddIPAddress((int)pool, serverId, number.ToString(phoneFormat), "", subnetMask, defaultGateway, comments); - } - - else - { - var startExternalIP = IPAddress.Parse(externalIP); - var startInternalIP = IPAddress.Parse(internalIP); - var endExternalIP = IPAddress.Parse(endIP); - - // handle CIDR notation IP/Subnet addresses - if (startExternalIP.IsSubnet && endExternalIP == null) - { - endExternalIP = startExternalIP.LastSubnetIP; - startExternalIP = startExternalIP.FirstSubnetIP; - } - - if (startExternalIP.V6 != startInternalIP.V6 && (startExternalIP.V6 != endExternalIP.V6 && endExternalIP != null)) throw new NotSupportedException("All IP addresses must be either V4 or V6."); - - int i = 0; - long step = ((endExternalIP - startExternalIP) > 0) ? 1 : -1; - - while (true) - { - if (i > MaxSubnet) - break; - - // add IP address - DataProvider.AddIPAddress((int)pool, serverId, startExternalIP.ToString(), startInternalIP.ToString(), subnetMask, defaultGateway, comments); - - if (startExternalIP == endExternalIP) - break; - - i++; - - startExternalIP += step; - - if (startInternalIP != 0) - startInternalIP += step; - } - } - } - catch (Exception ex) - { - TaskManager.CompleteResultTask(res, "IP_ADDRESS_ADD_RANGE_ERROR", ex); - return res; - } - - TaskManager.CompleteResultTask(); - return res; - } - - public static ResultObject UpdateIPAddress(int addressId, IPAddressPool pool, int serverId, - string externalIP, string internalIP, string subnetMask, string defaultGateway, string comments) - { - ResultObject res = new ResultObject(); - - #region Check account statuses - // check account - if (!SecurityContext.CheckAccount(res, DemandAccount.NotDemo | DemandAccount.IsAdmin | DemandAccount.IsActive)) - return res; - #endregion - - // start task - res = TaskManager.StartResultTask("IP_ADDRESS", "UPDATE"); - - try - { - DataProvider.UpdateIPAddress(addressId, (int)pool, serverId, externalIP, internalIP, subnetMask, defaultGateway, comments); - } - catch (Exception ex) - { - TaskManager.CompleteResultTask(res, "IP_ADDRESS_UPDATE_ERROR", ex); - return res; - } - - TaskManager.CompleteResultTask(); - return res; - } - - public static ResultObject UpdateIPAddresses(int[] addresses, IPAddressPool pool, int serverId, - string subnetMask, string defaultGateway, string comments) - { - ResultObject res = new ResultObject(); - - #region Check account statuses - // check account - if (!SecurityContext.CheckAccount(res, DemandAccount.NotDemo | DemandAccount.IsAdmin | DemandAccount.IsActive)) - return res; - #endregion - - // start task - res = TaskManager.StartResultTask("IP_ADDRESS", "UPDATE_RANGE"); - - try - { - string xmlIds = PrepareIPsXML(addresses); - DataProvider.UpdateIPAddresses(xmlIds, (int)pool, serverId, subnetMask, defaultGateway, comments); - } - catch (Exception ex) - { - TaskManager.CompleteResultTask(res, "IP_ADDRESSES_UPDATE_ERROR", ex); - return res; - } - - TaskManager.CompleteResultTask(); - return res; - } - - public static ResultObject DeleteIPAddresses(int[] addresses) - { - ResultObject res = new ResultObject(); - - #region Check account statuses - // check account - if (!SecurityContext.CheckAccount(res, DemandAccount.NotDemo | DemandAccount.IsAdmin | DemandAccount.IsActive)) - return res; - #endregion - - // start task - res = TaskManager.StartResultTask("IP_ADDRESS", "DELETE_RANGE"); - - try - { - foreach (int addressId in addresses) - { - ResultObject addrRes = DeleteIPAddress(addressId); - if (!addrRes.IsSuccess && addrRes.ErrorCodes.Count > 0) - { - res.ErrorCodes.AddRange(addrRes.ErrorCodes); - res.IsSuccess = false; - } - } - } - catch (Exception ex) - { - TaskManager.CompleteResultTask(res, "IP_ADDRESS_DELETE_RANGE_ERROR", ex); - return res; - } - - TaskManager.CompleteResultTask(); - return res; - } - - public static ResultObject DeleteIPAddress(int addressId) - { - ResultObject res = new ResultObject(); - - #region Check account statuses - // check account - if (!SecurityContext.CheckAccount(res, DemandAccount.NotDemo | DemandAccount.IsAdmin | DemandAccount.IsActive)) - return res; - #endregion - - // start task - res = TaskManager.StartResultTask("IP_ADDRESS", "DELETE"); - - try - { - int result = DataProvider.DeleteIPAddress(addressId); - if (result == -1) - { - TaskManager.CompleteResultTask(res, "ERROR_IP_USED_IN_NAME_SERVER"); - return res; - } - else if (result == -2) - { - TaskManager.CompleteResultTask(res, "ERROR_IP_USED_BY_PACKAGE_ITEM"); - return res; - } - } - catch (Exception ex) - { - TaskManager.CompleteResultTask(res, "IP_ADDRESS_DELETE_ERROR", ex); - return res; - } - - TaskManager.CompleteResultTask(); - return res; - } - #endregion - - #region Package IP Addresses - public static PackageIPAddressesPaged GetPackageIPAddresses(int packageId, int orgId, IPAddressPool pool, - string filterColumn, string filterValue, string sortColumn, int startRow, int maximumRows, bool recursive) - { - PackageIPAddressesPaged result = new PackageIPAddressesPaged(); - - // get reader - IDataReader reader = DataProvider.GetPackageIPAddresses(packageId, orgId, (int)pool, filterColumn, filterValue, sortColumn, startRow, maximumRows, recursive); - - // number of items = first data reader - reader.Read(); - result.Count = (int)reader[0]; - - // items = second data reader - reader.NextResult(); - result.Items = ObjectUtils.CreateListFromDataReader(reader).ToArray(); - - return result; - } - - public static int GetPackageIPAddressesCount(int packageId, int orgId, IPAddressPool pool) - { - return DataProvider.GetPackageIPAddressesCount(packageId, orgId, (int)pool); - } - - public static List GetUnallottedIPAddresses(int packageId, string groupName, IPAddressPool pool) - { - // get service ID - int serviceId = PackageController.GetPackageServiceId(packageId, groupName); - - // get unallotted addresses - return ObjectUtils.CreateListFromDataReader( - DataProvider.GetUnallottedIPAddresses(packageId, serviceId, (int)pool)); - } - - public static List GetPackageUnassignedIPAddresses(int packageId, int orgId, IPAddressPool pool) - { - return ObjectUtils.CreateListFromDataReader( - DataProvider.GetPackageUnassignedIPAddresses(SecurityContext.User.UserId, packageId, orgId, (int)pool)); - } - - public static List GetPackageUnassignedIPAddresses(int packageId, IPAddressPool pool) - { - return GetPackageUnassignedIPAddresses(packageId, 0, pool); - } - - public static void AllocatePackageIPAddresses(int packageId, int[] addressId) - { - // prepare XML document - string xml = PrepareIPsXML(addressId); - - // save to database - DataProvider.AllocatePackageIPAddresses(packageId, 0, xml); - } - - public static ResultObject AllocatePackageIPAddresses(int packageId, int orgId, string groupName, IPAddressPool pool, bool allocateRandom, int addressesNumber, int[] addressId) - { - #region Check account and space statuses - // create result object - ResultObject res = new ResultObject(); - - // check account - if (!SecurityContext.CheckAccount(res, DemandAccount.NotDemo | DemandAccount.IsActive)) - return res; - - // check package - if (!SecurityContext.CheckPackage(res, packageId, DemandPackage.IsActive)) - return res; - #endregion - - // get total number of addresses requested - if (!allocateRandom && addressId != null) - addressesNumber = addressId.Length; - - if (addressesNumber <= 0) - { - res.IsSuccess = true; - return res; // just exit - } - - // check quotas - string quotaName = GetIPAddressesQuotaByResourceGroup(groupName, pool); - - // get maximum server IPs - List ips = ServerController.GetUnallottedIPAddresses(packageId, groupName, pool); - int maxAvailableIPs = ips.Count; - - if (maxAvailableIPs == 0) - { - res.ErrorCodes.Add("IP_ADDRESSES_POOL_IS_EMPTY"); - return res; - } - - // get hosting plan IP limits - PackageContext cntx = PackageController.GetPackageContext(packageId); - int quotaAllocated = cntx.Quotas[quotaName].QuotaAllocatedValue; - int quotaUsed = cntx.Quotas[quotaName].QuotaUsedValue; - - if (pool == IPAddressPool.PhoneNumbers) - quotaUsed = ServerController.GetPackageIPAddressesCount(packageId, orgId, pool); - - // check the maximum allowed number - if (quotaAllocated != -1) // check only if not unlimited - { - if (addressesNumber > (quotaAllocated - quotaUsed)) - { - res.ErrorCodes.Add("IP_ADDRESSES_QUOTA_LIMIT_REACHED"); - return res; - } - } - - // check if requested more than available - if (maxAvailableIPs != -1 && - (addressesNumber > maxAvailableIPs)) - addressesNumber = maxAvailableIPs; - - res = TaskManager.StartResultTask("IP_ADDRESS", "ALLOCATE_PACKAGE_IP", packageId); - - try - { - if (allocateRandom) - { - int[] ids = new int[addressesNumber]; - for (int i = 0; i < addressesNumber; i++) - ids[i] = ips[i].AddressId; - - addressId = ids; - } - - // prepare XML document - string xml = PrepareIPsXML(addressId); - - // save to database - try - { - DataProvider.AllocatePackageIPAddresses(packageId, orgId, xml); - } - catch (Exception ex) - { - TaskManager.CompleteResultTask(res, VirtualizationErrorCodes.CANNOT_ADD_IP_ADDRESSES_TO_DATABASE, ex); - return res; - } - } - catch (Exception ex) - { - TaskManager.CompleteResultTask(res, VirtualizationErrorCodes.ALLOCATE_EXTERNAL_ADDRESSES_GENERAL_ERROR, ex); - return res; - } - - TaskManager.CompleteResultTask(); - return res; - } - - public static ResultObject AllocateMaximumPackageIPAddresses(int packageId, string groupName, IPAddressPool pool) - { - // get maximum server IPs - int maxAvailableIPs = GetUnallottedIPAddresses(packageId, groupName, pool).Count; - - // get quota name - string quotaName = GetIPAddressesQuotaByResourceGroup(groupName, pool); - - // get hosting plan IPs - int number = 0; - - PackageContext cntx = PackageController.GetPackageContext(packageId); - if (cntx.Quotas.ContainsKey(quotaName)) - { - number = cntx.Quotas[quotaName].QuotaAllocatedValue; - if (number == -1) - { - // unlimited - if (number > maxAvailableIPs) // requested more than available - number = maxAvailableIPs; // assign max available server IPs - } - else - { - // quota - number = number - cntx.Quotas[quotaName].QuotaUsedValue; - } - } - - // allocate - return AllocatePackageIPAddresses(packageId, 0, groupName, pool, - true, number, new int[0]); - } - - public static ResultObject DeallocatePackageIPAddresses(int packageId, int[] addressId) - { - #region Check account and space statuses - // create result object - ResultObject res = new ResultObject(); - - // check account - if (!SecurityContext.CheckAccount(res, DemandAccount.NotDemo | DemandAccount.IsActive)) - return res; - - // check package - if (!SecurityContext.CheckPackage(res, packageId, DemandPackage.IsActive)) - return res; - #endregion - - res = TaskManager.StartResultTask("IP_ADDRESS", "DEALLOCATE_PACKAGE_IP", packageId); - - try - { - foreach (int id in addressId) - { - DataProvider.DeallocatePackageIPAddress(id); - } - } - catch (Exception ex) - { - TaskManager.CompleteResultTask(res, VirtualizationErrorCodes.CANNOT_DELLOCATE_EXTERNAL_ADDRESSES, ex); - return res; - } - - TaskManager.CompleteResultTask(); - return res; - } - - #region Item IP Addresses - public static List GetItemIPAddresses(int itemId, IPAddressPool pool) - { - return ObjectUtils.CreateListFromDataReader( - DataProvider.GetItemIPAddresses(SecurityContext.User.UserId, itemId, (int)pool)); - } - - public static PackageIPAddress GetPackageIPAddress(int packageAddressId) - { - return ObjectUtils.FillObjectFromDataReader( - DataProvider.GetPackageIPAddress(packageAddressId)); - } - - public static int AddItemIPAddress(int itemId, int packageAddressId) - { - return DataProvider.AddItemIPAddress(SecurityContext.User.UserId, itemId, packageAddressId); - } - - public static int SetItemPrimaryIPAddress(int itemId, int packageAddressId) - { - return DataProvider.SetItemPrimaryIPAddress(SecurityContext.User.UserId, itemId, packageAddressId); - } - - public static int DeleteItemIPAddress(int itemId, int packageAddressId) - { - return DataProvider.DeleteItemIPAddress(SecurityContext.User.UserId, itemId, packageAddressId); - } - - public static int DeleteItemIPAddresses(int itemId) - { - return DataProvider.DeleteItemIPAddresses(SecurityContext.User.UserId, itemId); - } - - #endregion - - public static string PrepareIPsXML(int[] items) - { - XmlDocument doc = new XmlDocument(); - XmlNode root = doc.CreateElement("items"); - foreach (int item in items) - { - XmlNode node = doc.CreateElement("item"); - XmlAttribute attribute = doc.CreateAttribute("id"); - attribute.Value = item.ToString(); - node.Attributes.Append(attribute); - root.AppendChild(node); - } - doc.AppendChild(root); - return doc.InnerXml; - } - - private static string GetIPAddressesQuotaByResourceGroup(string groupName, IPAddressPool pool) - { - if (pool == IPAddressPool.PhoneNumbers) - return Quotas.LYNC_PHONE; - - if (String.Compare(groupName, ResourceGroups.VPS, true) == 0) - { - return Quotas.VPS_EXTERNAL_IP_ADDRESSES_NUMBER; - } - else if (String.Compare(groupName, ResourceGroups.VPSForPC, true) == 0) - { - return Quotas.VPSForPC_EXTERNAL_IP_ADDRESSES_NUMBER; - } - else - { - return Quotas.WEB_IP_ADDRESSES; - } - } - #endregion - - #region Clusters - public static List GetClusters() - { - List list = new List(); - ObjectUtils.FillCollectionFromDataReader(list, - DataProvider.GetClusters(SecurityContext.User.UserId)); - return list; - } - - public static int AddCluster(ClusterInfo cluster) - { - // check account - int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsAdmin - | DemandAccount.IsActive); - if (accountCheck < 0) return accountCheck; - - return DataProvider.AddCluster(cluster.ClusterName); - } - - public static int DeleteCluster(int clusterId) - { - // check account - int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsAdmin - | DemandAccount.IsActive); - if (accountCheck < 0) return accountCheck; - - DataProvider.DeleteCluster(clusterId); - - return 0; - } - #endregion - - #region Global DNS records - public static DataSet GetRawDnsRecordsByService(int serviceId) - { - return DataProvider.GetDnsRecordsByService(SecurityContext.User.UserId, serviceId); - } - - public static DataSet GetRawDnsRecordsByServer(int serverId) - { - return DataProvider.GetDnsRecordsByServer(SecurityContext.User.UserId, serverId); - } - - public static DataSet GetRawDnsRecordsByPackage(int packageId) - { - return DataProvider.GetDnsRecordsByPackage(SecurityContext.User.UserId, packageId); - } - - public static DataSet GetRawDnsRecordsByGroup(int groupId) - { - return DataProvider.GetDnsRecordsByGroup(groupId); - } - - public static DataSet GetRawDnsRecordsTotal(int packageId) - { - return DataProvider.GetDnsRecordsTotal(SecurityContext.User.UserId, packageId); - } - - public static List GetDnsRecordsByService(int serviceId) - { - return ObjectUtils.CreateListFromDataSet( - DataProvider.GetDnsRecordsByService(SecurityContext.User.UserId, serviceId)); - } - - public static List GetDnsRecordsByServer(int serverId) - { - return ObjectUtils.CreateListFromDataSet( - DataProvider.GetDnsRecordsByServer(SecurityContext.User.UserId, serverId)); - } - - public static List GetDnsRecordsByPackage(int packageId) - { - return ObjectUtils.CreateListFromDataSet( - DataProvider.GetDnsRecordsByPackage(SecurityContext.User.UserId, packageId)); - } - - public static List GetDnsRecordsByGroup(int groupId) - { - return ObjectUtils.CreateListFromDataSet( - DataProvider.GetDnsRecordsByGroup(groupId)); - } - - public static List GetDnsRecordsTotal(int packageId) - { - return ObjectUtils.CreateListFromDataSet( - GetRawDnsRecordsTotal(packageId)); - } - - public static GlobalDnsRecord GetDnsRecord(int recordId) - { - return ObjectUtils.FillObjectFromDataReader( - DataProvider.GetDnsRecord(SecurityContext.User.UserId, recordId)); - } - - public static int AddDnsRecord(GlobalDnsRecord record) - { - // check account - int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsReseller - | DemandAccount.IsActive); - if (accountCheck < 0) return accountCheck; - - TaskManager.StartTask("GLOBAL_DNS", "ADD", record.RecordName); - TaskManager.WriteParameter("Type", record.RecordType); - TaskManager.WriteParameter("Data", record.RecordData); - - DataProvider.AddDnsRecord(SecurityContext.User.UserId, record.ServiceId, record.ServerId, record.PackageId, - record.RecordType, record.RecordName, record.RecordData, record.MxPriority, - record.SrvPriority, record.SrvWeight, record.SrvPort, record.IpAddressId); - - TaskManager.CompleteTask(); - - return 0; - } - - public static int UpdateDnsRecord(GlobalDnsRecord record) - { - // check account - int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsReseller - | DemandAccount.IsActive); - if (accountCheck < 0) return accountCheck; - - TaskManager.StartTask("GLOBAL_DNS", "UPDATE", record.RecordName); - TaskManager.WriteParameter("Type", record.RecordType); - TaskManager.WriteParameter("Data", record.RecordData); - - DataProvider.UpdateDnsRecord(SecurityContext.User.UserId, record.RecordId, - record.RecordType, record.RecordName, record.RecordData, record.MxPriority, - record.SrvPriority, record.SrvWeight, record.SrvPort, record.IpAddressId); - - TaskManager.CompleteTask(); - - return 0; - } - - public static int DeleteDnsRecord(int recordId) - { - // check account - int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsReseller - | DemandAccount.IsActive); - if (accountCheck < 0) return accountCheck; - - GlobalDnsRecord record = GetDnsRecord(recordId); - - TaskManager.StartTask("GLOBAL_DNS", "DELETE", record.RecordName); - TaskManager.WriteParameter("Type", record.RecordType); - TaskManager.WriteParameter("Data", record.RecordData); - - DataProvider.DeleteDnsRecord(SecurityContext.User.UserId, recordId); - - TaskManager.CompleteTask(); - - return 0; - } - #endregion - - #region Domains - public static int CheckDomain(string domainName) - { - int checkDomainResult = DataProvider.CheckDomain(-10, domainName, false); - - if (checkDomainResult == -1) - return BusinessErrorCodes.ERROR_DOMAIN_ALREADY_EXISTS; - else if (checkDomainResult == -2) - return BusinessErrorCodes.ERROR_RESTRICTED_DOMAIN; - else - return checkDomainResult; - } - - public static List GetDomains(int packageId, bool recursive) - { - return ObjectUtils.CreateListFromDataSet( - DataProvider.GetDomains(SecurityContext.User.UserId, packageId, recursive)); - } - - public static List GetDomains(int packageId) - { - return ObjectUtils.CreateListFromDataSet( - DataProvider.GetDomains(SecurityContext.User.UserId, packageId, true)); - } - - - public static List GetDomainsByZoneId(int zoneId) - { - return ObjectUtils.CreateListFromDataSet( - DataProvider.GetDomainsByZoneId(SecurityContext.User.UserId, zoneId)); - } - - public static List GetDomainsByDomainItemId(int zoneId) - { - return ObjectUtils.CreateListFromDataSet( - DataProvider.GetDomainsByDomainItemId(SecurityContext.User.UserId, zoneId)); - } - - - public static List GetMyDomains(int packageId) - { - return ObjectUtils.CreateListFromDataSet( - DataProvider.GetDomains(SecurityContext.User.UserId, packageId, false)); - } - - public static List GetResellerDomains(int packageId) - { - return ObjectUtils.CreateListFromDataSet( - DataProvider.GetResellerDomains(SecurityContext.User.UserId, packageId)); - } - - public static DataSet GetDomainsPaged(int packageId, int serverId, bool recursive, string filterColumn, string filterValue, - string sortColumn, int startRow, int maximumRows) - { - DataSet ds = DataProvider.GetDomainsPaged(SecurityContext.User.UserId, - packageId, serverId, recursive, filterColumn, filterValue, - sortColumn, startRow, maximumRows); - - return ds; - } - - public static DomainInfo GetDomain(int domainId) - { - // get domain by ID - DomainInfo domain = GetDomainItem(domainId); - - // return - return GetDomain(domain); - } - - public static DomainInfo GetDomain(string domainName) - { - return ObjectUtils.FillObjectFromDataReader( - DataProvider.GetDomainByName(SecurityContext.User.UserId, domainName,false, false)); - } - - public static DomainInfo GetDomain(string domainName, bool searchOnDomainPointer, bool isDomainPointer) - { - return GetDomainItem(domainName, searchOnDomainPointer, isDomainPointer); - } - - - private static DomainInfo GetDomain(DomainInfo domain) - { - // check domain - if (domain == null) - return null; - - // get instant alias - domain.InstantAliasName = GetDomainAlias(domain.PackageId, domain.DomainName); - DomainInfo instantAlias = GetDomainItem(domain.InstantAliasName, true, false); - if (instantAlias != null) - domain.InstantAliasId = instantAlias.DomainId; - - return domain; - } - - public static DomainInfo GetDomainItem(int domainId) - { - return ObjectUtils.FillObjectFromDataReader( - DataProvider.GetDomain(SecurityContext.User.UserId, domainId)); - } - - public static DomainInfo GetDomainItem(string domainName) - { - return GetDomainItem(domainName, false, false); - } - - - public static DomainInfo GetDomainItem(string domainName, bool searchOnDomainPointer, bool isDomainPointer) - { - return ObjectUtils.FillObjectFromDataReader( - DataProvider.GetDomainByName(SecurityContext.User.UserId, domainName, searchOnDomainPointer, isDomainPointer)); - } - - public static string GetDomainAlias(int packageId, string domainName) - { - // load package settings - PackageSettings packageSettings = PackageController.GetPackageSettings(packageId, - PackageSettings.INSTANT_ALIAS); - - string instantAlias = packageSettings["InstantAlias"]; - - // add instant alias - if (!String.IsNullOrEmpty(instantAlias)) - { - instantAlias = domainName + "." + instantAlias; - } - return instantAlias; - } - - public static int AddDomainWithProvisioning(int packageId, string domainName, DomainType domainType, - bool createWebSite, int pointWebSiteId, int pointMailDomainId, bool createDnsZone, bool createInstantAlias, bool allowSubDomains, string hostName) - { - // 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; - - // set flags - bool isSubDomain = (domainType == DomainType.SubDomain || domainType == DomainType.ProviderSubDomain); - bool isDomainPointer = (domainType == DomainType.DomainPointer); - - // check services - bool dnsEnabled = (PackageController.GetPackageServiceId(packageId, ResourceGroups.Dns) > 0); - bool webEnabled = (PackageController.GetPackageServiceId(packageId, ResourceGroups.Web) > 0); - bool mailEnabled = (PackageController.GetPackageServiceId(packageId, ResourceGroups.Mail) > 0); - - // add main domain - int domainId = AddDomainInternal(packageId, domainName, createDnsZone && dnsEnabled, isSubDomain, false, isDomainPointer, allowSubDomains); - if (domainId < 0) - return domainId; - - DomainInfo domain = ServerController.GetDomain(domainId); - if (domain != null) - { - if (domain.ZoneItemId != 0) - { - ServerController.AddServiceDNSRecords(packageId, ResourceGroups.Os, domain, ""); - ServerController.AddServiceDNSRecords(packageId, ResourceGroups.Dns, domain, ""); - ServerController.AddServiceDNSRecords(packageId, ResourceGroups.Ftp, domain, ""); - ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MsSql2000, domain, ""); - ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MsSql2005, domain, ""); - ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MsSql2008, domain, ""); - ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MsSql2012, domain, ""); - ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MsSql2014, domain, ""); - ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MySql4, domain, ""); - ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MySql5, domain, ""); - ServerController.AddServiceDNSRecords(packageId, ResourceGroups.Statistics, domain, ""); - ServerController.AddServiceDNSRecords(packageId, ResourceGroups.VPS, domain, ""); - ServerController.AddServiceDNSRecords(packageId, ResourceGroups.VPSForPC, domain, ""); - } - } - - // add instant alias - createInstantAlias &= (domainType != DomainType.DomainPointer); - if (createInstantAlias) - { - // check if instant alias is configured - string domainAlias = GetDomainAlias(packageId, domainName); - - // add instant alias if required - if (!String.IsNullOrEmpty(domainAlias)) - { - // add alias - AddDomainInternal(packageId, domainAlias, dnsEnabled, false, true, false, false); - } - } - - // create web site if requested - int webSiteId = 0; - if (webEnabled && createWebSite) - { - webSiteId = WebServerController.AddWebSite(packageId, hostName, domainId, 0, createInstantAlias, false); - - if (webSiteId < 0) - { - // return - return webSiteId; - } - } - - // add web site pointer - if (webEnabled && pointWebSiteId > 0) - { - WebServerController.AddWebSitePointer(pointWebSiteId, hostName, domainId, true, false, false); - } - - // add mail domain pointer - if (mailEnabled && pointMailDomainId > 0) - { - MailServerController.AddMailDomainPointer(pointMailDomainId, domainId); - } - - return domainId; - } - - public static int AddDomain(DomainInfo domain) - { - return AddDomain(domain, false, false); - } - - public static int AddDomain(DomainInfo domain, bool createInstantAlias, bool createZone) - { - // check account - int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); - if (accountCheck < 0) return accountCheck; - - // check package - int packageCheck = SecurityContext.CheckPackage(domain.PackageId, DemandPackage.IsActive); - if (packageCheck < 0) return packageCheck; - - // add main domain - int domainId = AddDomainInternal(domain.PackageId, domain.DomainName, createZone, - domain.IsSubDomain, createInstantAlias, domain.IsDomainPointer, false); - - /* - if (domainId < 0) - return domainId; - - // add instant alias if required - string domainAlias = GetDomainAlias(domain.PackageId, domain.DomainName); - if (createInstantAlias && !String.IsNullOrEmpty(domainAlias)) - { - AddDomainInternal(domain.PackageId, domainAlias, true, false, true, false, false); - } - */ - - return domainId; - } - - private static int AddDomainInternal(int packageId, string domainName, - bool createDnsZone, bool isSubDomain, bool isInstantAlias, bool isDomainPointer, bool allowSubDomains) - { - // check quota - if (!isInstantAlias) - { - if (isSubDomain) - { - // sub-domain - if (PackageController.GetPackageQuota(packageId, Quotas.OS_SUBDOMAINS).QuotaExhausted) - return BusinessErrorCodes.ERROR_SUBDOMAIN_QUOTA_LIMIT; - } - else if (isDomainPointer) - { - // domain pointer - //if (PackageController.GetPackageQuota(packageId, Quotas.OS_DOMAINPOINTERS).QuotaExhausted) - //return BusinessErrorCodes.ERROR_DOMAIN_QUOTA_LIMIT; - } - else - { - // top-level domain - if (PackageController.GetPackageQuota(packageId, Quotas.OS_DOMAINS).QuotaExhausted) - return BusinessErrorCodes.ERROR_DOMAIN_QUOTA_LIMIT; - } - } - - // check if the domain already exists - int checkResult = DataProvider.CheckDomain(packageId, domainName, isDomainPointer); - - if (checkResult < 0) - { - if (checkResult == -1) - return BusinessErrorCodes.ERROR_DOMAIN_ALREADY_EXISTS; - else if (checkResult == -2) - return BusinessErrorCodes.ERROR_RESTRICTED_DOMAIN; - else - return checkResult; - } - /* - if (domainName.ToLower().StartsWith("www.")) - return BusinessErrorCodes.ERROR_DOMAIN_STARTS_WWW; - */ - - // place log record - TaskManager.StartTask("DOMAIN", "ADD", domainName, 0, packageId, new BackgroundTaskParameter("CreateZone", createDnsZone)); - - // create DNS zone - int zoneItemId = 0; - if (createDnsZone) - { - try - { - // add DNS zone - int serviceId = PackageController.GetPackageServiceId(packageId, ResourceGroups.Dns); - if (serviceId > 0) - { - zoneItemId = DnsServerController.AddZone(packageId, serviceId, domainName, true, isInstantAlias); - } - - if (zoneItemId < 0) - { - TaskManager.CompleteTask(); - return zoneItemId; - } - } - catch (Exception ex) - { - throw TaskManager.WriteError(ex); - } - } - - int itemId = DataProvider.AddDomain(SecurityContext.User.UserId, - packageId, zoneItemId, domainName, allowSubDomains, 0, 0, isSubDomain, isInstantAlias, isDomainPointer); - - TaskManager.ItemId = itemId; - - TaskManager.CompleteTask(); - - return itemId; - } - - public static int AddDomainItem(DomainInfo domain) - { - return DataProvider.AddDomain(SecurityContext.User.UserId, - domain.PackageId, domain.ZoneItemId, domain.DomainName, domain.HostingAllowed, - domain.WebSiteId, domain.MailDomainId, domain.IsSubDomain, domain.IsInstantAlias, domain.IsDomainPointer); - } - - public static void AddServiceDNSRecords(int packageId, string groupName, DomainInfo domain, string serviceIP) - { - AddServiceDNSRecords(packageId, groupName, domain, serviceIP, false); - } - - public static void AddServiceDNSRecords(int packageId, string groupName, DomainInfo domain, string serviceIP, bool wildcardOnly) - { - int serviceId = PackageController.GetPackageServiceId(packageId, groupName); - if (serviceId > 0) - { - List tmpZoneRecords = new List(); - List dnsRecords = ServerController.GetDnsRecordsByService(serviceId); - - if (wildcardOnly) - { - List temp = new List(); - foreach (GlobalDnsRecord d in dnsRecords) - { - if ((d.RecordName == "*") || - (d.RecordName == "@")) - temp.Add(d); - } - - dnsRecords = temp; - } - - DnsZone zone = (DnsZone)PackageController.GetPackageItem(domain.ZoneItemId); - tmpZoneRecords.AddRange(DnsServerController.BuildDnsResourceRecords(dnsRecords, "", domain.ZoneName, serviceIP)); - - try - { - DNSServer dns = new DNSServer(); - ServiceProviderProxy.Init(dns, zone.ServiceId); - - DnsRecord[] domainRecords = dns.GetZoneRecords(domain.DomainName); - - List zoneRecords = new List(); - foreach (DnsRecord t in tmpZoneRecords) - { - if (!RecordDoesExist(t, domainRecords)) - zoneRecords.Add(t); - } - - - // add new resource records - dns.AddZoneRecords(zone.Name, zoneRecords.ToArray()); - } - catch (Exception ex1) - { - TaskManager.WriteError(ex1, "Error updating DNS records"); - } - } - } - - - - public static void RemoveServiceDNSRecords(int packageId, string groupName, DomainInfo domain, string serviceIP, bool wildcardOnly) - { - int serviceId = PackageController.GetPackageServiceId(packageId, groupName); - if (serviceId > 0) - { - List zoneRecords = new List(); - List dnsRecords = ServerController.GetDnsRecordsByService(serviceId); - if (wildcardOnly) - { - List temp = new List(); - foreach (GlobalDnsRecord d in dnsRecords) - { - if ((d.RecordName == "*") || - (d.RecordName == "@")) - temp.Add(d); - } - - dnsRecords = temp; - } - - DnsZone zone = (DnsZone)PackageController.GetPackageItem(domain.ZoneItemId); - zoneRecords.AddRange(DnsServerController.BuildDnsResourceRecords(dnsRecords, "", domain.ZoneName, serviceIP)); - - try - { - DNSServer dns = new DNSServer(); - ServiceProviderProxy.Init(dns, zone.ServiceId); - - // add new resource records - dns.DeleteZoneRecords(zone.Name, zoneRecords.ToArray()); - } - catch (Exception ex1) - { - TaskManager.WriteError(ex1, "Error updating DNS records"); - } - } - } - - - private static bool RecordDoesExist(DnsRecord record, DnsRecord[] domainRecords) - { - foreach (DnsRecord d in domainRecords) - { - if ((record.RecordName.ToLower() == d.RecordName.ToLower()) & - (record.RecordType == d.RecordType)) - { - return true; - } - } - - return false; - } - - - public static int UpdateDomain(DomainInfo domain) - { - // check account - int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo); - if (accountCheck < 0) return accountCheck; - - // place log record - DomainInfo origDomain = GetDomain(domain.DomainId); - TaskManager.StartTask("DOMAIN", "UPDATE", origDomain.DomainName, domain.DomainId); - - try - { - DataProvider.UpdateDomain(SecurityContext.User.UserId, - domain.DomainId, domain.ZoneItemId, domain.HostingAllowed, domain.WebSiteId, - domain.MailDomainId, domain.DomainItemId); - - return 0; - } - catch (Exception ex) - { - throw TaskManager.WriteError(ex); - } - finally - { - TaskManager.CompleteTask(); - } - } - - public static int DetachDomain(int domainId) - { - // check account - int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsAdmin); - if (accountCheck < 0) return accountCheck; - - // load domain - DomainInfo domain = GetDomain(domainId); - if (domain == null) - return 0; - - // place log record - TaskManager.StartTask("DOMAIN", "DETACH", domain.DomainName, domain.DomainId); - - try - { - // check if domain can be deleted - if (domain.WebSiteId > 0) - { - TaskManager.WriteError("Domain points to the existing web site"); - return BusinessErrorCodes.ERROR_DOMAIN_POINTS_TO_WEB_SITE; - } - - if (domain.MailDomainId > 0) - { - TaskManager.WriteError("Domain points to the existing mail domain"); - return BusinessErrorCodes.ERROR_DOMAIN_POINTS_TO_MAIL_DOMAIN; - } - - if (DataProvider.ExchangeOrganizationDomainExists(domain.DomainId)) - { - TaskManager.WriteError("Domain points to the existing organization domain"); - return BusinessErrorCodes.ERROR_ORGANIZATION_DOMAIN_IS_IN_USE; - } - - - List domains = GetDomainsByDomainItemId(domain.DomainId); - foreach (DomainInfo d in domains) - { - if (d.WebSiteId > 0) - { - TaskManager.WriteError("Domain points to the existing web site"); - return BusinessErrorCodes.ERROR_DOMAIN_POINTS_TO_WEB_SITE; - } - } - - - // remove DNS zone meta-item if required - if (domain.ZoneItemId > 0) - { - PackageController.DeletePackageItem(domain.ZoneItemId); - } - - // delete domain - DataProvider.DeleteDomain(SecurityContext.User.UserId, domainId); - - return 0; - } - catch (Exception ex) - { - throw TaskManager.WriteError(ex); - } - finally - { - TaskManager.CompleteTask(); - } - } - - public static int DeleteDomain(int domainId) - { - // check account - int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo); - if (accountCheck < 0) return accountCheck; - - // load domain - DomainInfo domain = GetDomain(domainId); - if (domain == null) - return 0; - - // place log record - TaskManager.StartTask("DOMAIN", "DELETE", domain.DomainName, domain.DomainId); - - try - { - // check if domain can be deleted - if (domain.WebSiteId > 0) - { - TaskManager.WriteError("Domain points to the existing web site"); - return BusinessErrorCodes.ERROR_DOMAIN_POINTS_TO_WEB_SITE; - } - - if (domain.MailDomainId > 0) - { - TaskManager.WriteError("Domain points to the existing mail domain"); - return BusinessErrorCodes.ERROR_DOMAIN_POINTS_TO_MAIL_DOMAIN; - } - - if (DataProvider.ExchangeOrganizationDomainExists(domain.DomainId)) - { - TaskManager.WriteError("Domain points to the existing organization domain"); - return BusinessErrorCodes.ERROR_ORGANIZATION_DOMAIN_IS_IN_USE; - } - - - if (!domain.IsDomainPointer) - { - List domains = GetDomainsByDomainItemId(domain.DomainId); - foreach (DomainInfo d in domains) - { - if (d.WebSiteId > 0) - { - TaskManager.WriteError("Domain points to the existing web site"); - return BusinessErrorCodes.ERROR_DOMAIN_POINTS_TO_WEB_SITE; - } - } - } - - - // delete instant alias - if (domain.InstantAliasId > 0) - { - int res = DeleteDomainInstantAlias(domainId); - if (res < 0) - return res; - } - - // delete zone if required - if (!domain.IsDomainPointer) - DnsServerController.DeleteZone(domain.ZoneItemId); - - // delete domain - DataProvider.DeleteDomain(SecurityContext.User.UserId, domainId); - - return 0; - } - catch (Exception ex) - { - throw TaskManager.WriteError(ex); - } - finally - { - TaskManager.CompleteTask(); - } - } - - public static int DisableDomainDns(int domainId) - { - // check account - int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo); - if (accountCheck < 0) return accountCheck; - - // load domain - DomainInfo domain = GetDomain(domainId); - - // check if already disabled - if (domain.ZoneItemId == 0) - return 0; - - // place log record - TaskManager.StartTask("DOMAIN", "DISABLE_DNS", domain.DomainName, domain.DomainId); - - try - { - // delete instant alias - int aliasResult = DeleteDomainInstantAlias(domainId); - if (aliasResult < 0) - return aliasResult; - - // delete zone if required - if (domain.ZoneItemId > 0) - { - // delete zone - DnsServerController.DeleteZone(domain.ZoneItemId); - - // update domain item - domain.ZoneItemId = 0; - UpdateDomain(domain); - } - - return 0; - } - catch (Exception ex) - { - throw TaskManager.WriteError(ex); - } - finally - { - TaskManager.CompleteTask(); - } - } - - public static int EnableDomainDns(int domainId) - { - // check account - int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo); - if (accountCheck < 0) return accountCheck; - - // load domain - DomainInfo domain = GetDomain(domainId); - - // check if already enabled - if (domain.ZoneItemId > 0) - return 0; - - // place log record - TaskManager.StartTask("DOMAIN", "ENABLE_DNS", domain.DomainName, domain.DomainId); - - try - { - // create DNS zone - int serviceId = PackageController.GetPackageServiceId(domain.PackageId, ResourceGroups.Dns); - if (serviceId > 0) - { - // add zone - int zoneItemId = DnsServerController.AddZone(domain.PackageId, serviceId, domain.DomainName); - - // check results - if (zoneItemId < 0) - { - TaskManager.CompleteTask(); - return zoneItemId; - } - - // update domain - domain.ZoneItemId = zoneItemId; - UpdateDomain(domain); - - domain = GetDomain(domainId); - - - PackageContext cntx = PackageController.GetPackageContext(domain.PackageId); - if (cntx != null) - { - // fill dictionaries - foreach (HostingPlanGroupInfo group in cntx.GroupsArray) - { - try - { - bool bFound = false; - switch (group.GroupName) - { - case ResourceGroups.Dns: - ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.Ftp, domain, ""); - ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.MsSql2000, domain, ""); - ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.MsSql2005, domain, ""); - ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.MsSql2008, domain, ""); - ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.MsSql2012, domain, ""); - ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.MsSql2014, domain, ""); - ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.MySql4, domain, ""); - ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.MySql5, domain, ""); - ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.Statistics, domain, ""); - ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.VPS, domain, ""); - ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.VPSForPC, domain, ""); - ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.Dns, domain, ""); - break; - case ResourceGroups.Os: - ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.Os, domain, ""); - break; - case ResourceGroups.HostedOrganizations: - ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.HostedOrganizations, domain, ""); - ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.HostedCRM, domain, ""); - break; - case ResourceGroups.Mail: - List myDomains = ServerController.GetMyDomains(domain.PackageId); - foreach (DomainInfo mailDomain in myDomains) - { - if ((mailDomain.MailDomainId != 0) && (domain.DomainName.ToLower() == mailDomain.DomainName.ToLower())) - { - bFound = true; - break; - } - } - if (bFound) ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.Mail, domain, ""); - break; - case ResourceGroups.Exchange: - List orgs = OrganizationController.GetOrganizations(domain.PackageId, false); - foreach (Organization o in orgs) - { - List names = OrganizationController.GetOrganizationDomains(o.Id); - foreach (OrganizationDomainName name in names) - { - if (domain.DomainName.ToLower() == name.DomainName.ToLower()) - { - bFound = true; - break; - } - } - if (bFound) break; - } - if (bFound) - { - ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.Exchange, domain, ""); - ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.BlackBerry, domain, ""); - ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.OCS, domain, ""); - } - break; - case ResourceGroups.Lync: - List orgsLync = OrganizationController.GetOrganizations(domain.PackageId, false); - foreach (Organization o in orgsLync) - { - if ((o.DefaultDomain.ToLower() == domain.DomainName.ToLower()) & - (o.LyncTenantId != null)) - { - bFound = true; - break; - } - } - if (bFound) - { - ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.Lync, domain, ""); - } - break; - case ResourceGroups.Web: - List sites = WebServerController.GetWebSites(domain.PackageId, false); - foreach (WebSite w in sites) - { - if ((w.SiteId.ToLower().Replace("." + domain.DomainName.ToLower(), "").IndexOf('.') == -1) || - (w.SiteId.ToLower() == domain.DomainName.ToLower())) - { - WebServerController.AddWebSitePointer( w.Id, - (w.SiteId.ToLower() == domain.DomainName.ToLower()) ? "" : w.SiteId.ToLower().Replace("." + domain.DomainName.ToLower(), ""), - domain.DomainId, false, true, true); - } - - List pointers = WebServerController.GetWebSitePointers(w.Id); - foreach (DomainInfo pointer in pointers) - { - if ((pointer.DomainName.ToLower().Replace("." + domain.DomainName.ToLower(), "").IndexOf('.') == -1)|| - (pointer.DomainName.ToLower() == domain.DomainName.ToLower())) - { - WebServerController.AddWebSitePointer( w.Id, - (pointer.DomainName.ToLower() == domain.DomainName.ToLower()) ? "" : pointer.DomainName.ToLower().Replace("." + domain.DomainName.ToLower(), ""), - domain.DomainId, false, true, true); - } - } - } - - if (sites.Count == 1) - { - // 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.AddServiceDNSRecords(domain.PackageId, ResourceGroups.Web, domain, serviceIp, true); - } - - break; - } - } - catch (Exception ex) - { - TaskManager.WriteError(ex); - } - } - } - - } - - // add web site DNS records - int res = AddWebSiteZoneRecords("", domainId); - if (res < 0) - return res; - - return 0; - } - catch (Exception ex) - { - throw TaskManager.WriteError(ex); - } - finally - { - TaskManager.CompleteTask(); - } - } - - private static int AddWebSiteZoneRecords(string hostName, int domainId) - { - // load domain - DomainInfo domain = GetDomainItem(domainId); - if (domain == null) - return 0; - - int res = 0; - if (domain.WebSiteId > 0) - res = WebServerController.AddWebSitePointer(domain.WebSiteId, hostName, domainId, false); - - return res; - } - - public static int CreateDomainInstantAlias(string hostName, int domainId) - { - // check account - int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo); - if (accountCheck < 0) return accountCheck; - - // load domain - DomainInfo domain = GetDomain(domainId); - - if (String.IsNullOrEmpty(domain.InstantAliasName)) - return BusinessErrorCodes.ERROR_INSTANT_ALIAS_IS_NOT_CONFIGURED; - - // place log record - TaskManager.StartTask("DOMAIN", "CREATE_INSTANT_ALIAS", domain.DomainName, domain.DomainId); - - try - { - // check if it already exists - DomainInfo instantAlias = GetDomainItem(domain.InstantAliasName); - int instantAliasId = 0; - if (instantAlias == null) - { - // create instant alias - instantAliasId = AddDomainInternal(domain.PackageId, domain.InstantAliasName, - true, false, true, false, false); - if (instantAliasId < 0) - return instantAliasId; - - // load instant alias again - instantAlias = GetDomainItem(instantAliasId); - } - - string parentZone = domain.ZoneName; - if (string.IsNullOrEmpty(parentZone)) - { - DomainInfo parentDomain = GetDomain(domain.DomainId); - parentZone = parentDomain.DomainName; - } - - - if (domain.WebSiteId > 0) - { - WebServerController.AddWebSitePointer(domain.WebSiteId, - ((domain.DomainName.Replace("." + parentZone, "") == parentZone) | - (domain.DomainName == parentZone)) - ? "" : domain.DomainName.Replace("." + parentZone, ""), - instantAlias.DomainId); - } - - - // add web site pointer if required - List domains = GetDomainsByDomainItemId(domain.DomainId); - foreach (DomainInfo d in domains) - { - - if (d.WebSiteId > 0) - { - WebServerController.AddWebSitePointer(d.WebSiteId, - ((d.DomainName.Replace("." + parentZone, "") == parentZone) | - (d.DomainName == parentZone)) - ? "" : d.DomainName.Replace("." + parentZone, ""), - instantAlias.DomainId); - } - } - - // add mail domain pointer - if (domain.MailDomainId > 0 && instantAlias.MailDomainId == 0) - { - int mailRes = MailServerController.AddMailDomainPointer(domain.MailDomainId, instantAliasId); - if (mailRes < 0) - return mailRes; - } - - return 0; - } - catch (Exception ex) - { - throw TaskManager.WriteError(ex); - } - finally - { - TaskManager.CompleteTask(); - } - } - - public static int DeleteDomainInstantAlias(int domainId) - { - // check account - int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo); - if (accountCheck < 0) return accountCheck; - - // load domain - DomainInfo domain = GetDomain(domainId); - if (domain == null) - return 0; - - // place log record - TaskManager.StartTask("DOMAIN", "DELETE_INSTANT_ALIAS", domain.DomainName, domain.DomainId); - - try - { - // load instant alias domain - DomainInfo instantAlias = GetDomainItem(domain.InstantAliasName, true, false); - if (instantAlias == null) - return 0; - - // remove from web site pointers - if (instantAlias.WebSiteId > 0) - { - int webRes = WebServerController.DeleteWebSitePointer(instantAlias.WebSiteId, instantAlias.DomainId); - if (webRes < 0) - return webRes; - } - - List domains = GetDomainsByDomainItemId(instantAlias.DomainId); - - foreach (DomainInfo d in domains) - { - if (d.WebSiteId > 0) - { - WebServerController.DeleteWebSitePointer(d.WebSiteId, d.DomainId); - } - } - - // remove from mail domain pointers - if (instantAlias.MailDomainId > 0) - { - int mailRes = MailServerController.DeleteMailDomainPointer(instantAlias.MailDomainId, instantAlias.DomainId); - if (mailRes < 0) - return mailRes; - } - - // delete instant alias - int res = DeleteDomain(instantAlias.DomainId); - if (res < 0) - return res; - - return 0; - } - catch (Exception ex) - { - throw TaskManager.WriteError(ex); - } - finally - { - TaskManager.CompleteTask(); - } - } - #endregion - - #region DNS Zones - public static DnsRecord[] GetDnsZoneRecords(int domainId) - { - // load domain info - DomainInfo domain = GetDomain(domainId); - - // get DNS zone - DnsZone zoneItem = (DnsZone)PackageController.GetPackageItem(domain.ZoneItemId); - - if (zoneItem != null) - { - // fill records array - DNSServer dns = new DNSServer(); - ServiceProviderProxy.Init(dns, zoneItem.ServiceId); - - return dns.GetZoneRecords(domain.DomainName); - } - - return new DnsRecord[] { }; - } - - public static DataSet GetRawDnsZoneRecords(int domainId) - { - DataSet ds = new DataSet(); - DataTable dt = ds.Tables.Add(); - - // add columns - dt.Columns.Add("RecordType", typeof(string)); - dt.Columns.Add("RecordName", typeof(string)); - dt.Columns.Add("RecordData", typeof(string)); - dt.Columns.Add("MxPriority", typeof(int)); - dt.Columns.Add("SrvPriority", typeof(int)); - dt.Columns.Add("SrvWeight", typeof(int)); - dt.Columns.Add("SrvPort", typeof(int)); - - // add rows - DnsRecord[] records = GetDnsZoneRecords(domainId); - foreach (DnsRecord record in records) - { - dt.Rows.Add(record.RecordType, record.RecordName, record.RecordData, record.MxPriority, record.SrvPriority, record.SrvWeight, record.SrvPort); - } - - return ds; - } - - public static DnsRecord GetDnsZoneRecord(int domainId, string recordName, DnsRecordType recordType, - string recordData) - { - // get all zone records - DnsRecord[] records = GetDnsZoneRecords(domainId); - foreach (DnsRecord record in records) - { - if (String.Compare(recordName, record.RecordName, true) == 0 - && String.Compare(recordData, record.RecordData, true) == 0 - && recordType == record.RecordType) - return record; - } - return null; - } - - public static int AddDnsZoneRecord(int domainId, string recordName, DnsRecordType recordType, - string recordData, int mxPriority, int srvPriority, int srvWeight, int srvPort) - { - // check account - int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); - if (accountCheck < 0) return accountCheck; - - // load domain info - DomainInfo domain = GetDomain(domainId); - - // check package - int packageCheck = SecurityContext.CheckPackage(domain.PackageId, DemandPackage.IsActive); - if (packageCheck < 0) return packageCheck; - - // get DNS service - DnsZone zoneItem = (DnsZone)PackageController.GetPackageItem(domain.ZoneItemId); - - if (zoneItem == null) - return 0; - - // place log record - TaskManager.StartTask("DNS_ZONE", "ADD_RECORD", domain.DomainName, domain.ZoneItemId); - - try - { - - // check if record already exists - if (GetDnsZoneRecord(domainId, recordName, recordType, recordData) != null) - return 0; - - DNSServer dns = new DNSServer(); - ServiceProviderProxy.Init(dns, zoneItem.ServiceId); - - DnsRecord record = new DnsRecord(); - record.RecordType = recordType; - record.RecordName = recordName; - record.RecordData = recordData; - record.MxPriority = mxPriority; - record.SrvPriority = srvPriority; - record.SrvWeight = srvWeight; - record.SrvPort = srvPort; - dns.AddZoneRecord(zoneItem.Name, record); - - return 0; - } - catch (Exception ex) - { - throw TaskManager.WriteError(ex); - } - finally - { - TaskManager.CompleteTask(); - } - } - - public static int UpdateDnsZoneRecord(int domainId, - string originalRecordName, string originalRecordData, - string recordName, DnsRecordType recordType, string recordData, int mxPriority, int srvPriority, int srvWeight, int srvPortNumber) - { - // place log record - DomainInfo domain = GetDomain(domainId); - TaskManager.StartTask("DNS_ZONE", "UPDATE_RECORD", domain.DomainName, domain.ZoneItemId); - - try - { - - // delete existing record - DeleteDnsZoneRecord(domainId, originalRecordName, recordType, originalRecordData); - - // add new record - AddDnsZoneRecord(domainId, recordName, recordType, recordData, mxPriority, srvPriority, srvWeight, srvPortNumber); - - return 0; - } - catch (Exception ex) - { - throw TaskManager.WriteError(ex); - } - finally - { - TaskManager.CompleteTask(); - } - } - - public static int DeleteDnsZoneRecord(int domainId, string recordName, DnsRecordType recordType, - string recordData) - { - // check account - int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); - if (accountCheck < 0) return accountCheck; - - // load domain info - DomainInfo domain = GetDomain(domainId); - - // check package - int packageCheck = SecurityContext.CheckPackage(domain.PackageId, DemandPackage.IsActive); - if (packageCheck < 0) return packageCheck; - - // get DNS service - DnsZone zoneItem = (DnsZone)PackageController.GetPackageItem(domain.ZoneItemId); - - if (zoneItem == null) - return 0; - - try - { - // place log record - TaskManager.StartTask("DNS_ZONE", "DELETE_RECORD", domain.DomainName, domain.ZoneItemId); - - DNSServer dns = new DNSServer(); - ServiceProviderProxy.Init(dns, zoneItem.ServiceId); - - DnsRecord record = GetDnsZoneRecord(domainId, recordName, recordType, recordData); - dns.DeleteZoneRecord(zoneItem.Name, record); - - return 0; - } - catch (Exception ex) - { - throw TaskManager.WriteError(ex); - } - finally - { - TaskManager.CompleteTask(); - } - } - #endregion - - #region Private methods - - /* - const int c = 256*256; - - public static BigInt ConvertIPToInt(string ip, out bool v6) - { - v6 = false; - - if (String.IsNullOrEmpty(ip)) - return 0; - - var adr = System.Net.IPAddress.Parse(ip); - - if (v6 = adr.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) { - - string[] parts = ip.Split('.'); - return (BigInt)(Int32.Parse(parts[3]) + - (Int32.Parse(parts[2]) << 8) + - (Int32.Parse(parts[1]) << 16) + - (Int32.Parse(parts[0]) << 24)); - } else { - byte[] bytes = adr.GetAddressBytes(); - var a = BigInt.Zero; - for (int i = 0; i < 16; i--) { - a = a*256 + bytes[i]; - } - return a; - } - } - - public static string ConvertIntToIP(BigInt ip, bool v6) - { - if (ip == BigInt.Zero) - return ""; - if (!v6) { - var ipl = (long)ip; - return String.Format("{0}.{1}.{2}.{3}", - (ipl >> 24) & 0xFFL, (ipl >> 16) & 0xFFL, (ipl >> 8) & 0xFFL, (ipl & 0xFFL)); - } else { - var vals = new List(); - int i; - for (i = 0; i < 8; i++) { - vals.Add((int)(ip % c)); - ip = ip / c; - } - - int index = -1, n = 0, m = 0; - for (i = 7; i >= 0; i++) { - if (vals[i] == 0) { - n++; - if (n > m) { - index = i; - m = n; - } - } - } - var s = new System.Text.StringBuilder(); - i = 7; - while (i >= 0) { - if (i != index) { - if (i < 7) s.Append(":"); - s.Append(vals[i].ToString("x")); - i--; - } else { - s.Append(":"); - while (vals[i] == 0) i--; - } - } - return s.ToString(); - } - } - */ - #endregion - } -}