From 11ed35f0f9b59cc1c393d9f39b24dbf8ebd8b81d Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Tue, 18 Nov 2014 00:54:32 -0800 Subject: [PATCH 01/39] mx ns scheduler task initial commit --- WebsitePanel/Database/update_db.sql | 131 + .../Data/DataProvider.cs | 51 + .../OperatingSystemController.cs | 22 + .../SchedulerTasks/DomainLookupViewTask.cs | 222 ++ .../Servers/ServerController.cs.orig | 2907 +++++++++++++++++ .../WebsitePanel.EnterpriseServer.Code.csproj | 1 + .../DomainLookup/DnsRecordInfo.cs | 18 + .../DomainLookup/DomainChanges.cs | 21 + .../DomainLookup/DomainDnsRecordCompare.cs | 14 + .../DomainLookup/DomainDnsRecordStatuses.cs | 14 + .../DomainLookup/DomainDnsRecordsChanges.cs | 21 + .../OS/IOperatingSystem.cs | 6 + .../WebsitePanel.Providers.Base.csproj | 5 + .../Windows2003.cs | 6 + .../Windows2012.cs | 73 + .../OperatingSystemProxy.cs | 2511 ++++++-------- .../OperatingSystem.asmx.cs | 24 + .../WebsitePanel_SharedResources.ascx.resx | 3 + .../DomainLookupView.ascx.Designer.cs | 82 + .../DomainLookupView.ascx.resx | 126 + .../DomainLookupView.ascx | 19 + .../DomainLookupView.ascx.cs | 46 + .../DomainLookupView.ascx.designer.cs | 51 + .../WebsitePanel.Portal.Modules.csproj | 17 + 24 files changed, 4970 insertions(+), 1421 deletions(-) create mode 100644 WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs create mode 100644 WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs.orig create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DnsRecordInfo.cs create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainChanges.cs create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordCompare.cs create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordStatuses.cs create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordsChanges.cs create mode 100644 WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/App_LocalResources/DomainLookupView.ascx.Designer.cs create mode 100644 WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/App_LocalResources/DomainLookupView.ascx.resx create mode 100644 WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/DomainLookupView.ascx create mode 100644 WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/DomainLookupView.ascx.cs create mode 100644 WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/DomainLookupView.ascx.designer.cs diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index d3669869..895c2d3f 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -6082,3 +6082,134 @@ set Php4Path='%PROGRAMFILES(x86)%\PHP\ph.exe' where ProviderId in(101, 105) GO + +-- Domain lookup tasks + +IF NOT EXISTS (SELECT * FROM [dbo].[ScheduleTasks] WHERE [TaskID] = N'SCHEDULE_TASK_DOMAIN_LOOKUP') +BEGIN +INSERT [dbo].[ScheduleTasks] ([TaskID], [TaskType], [RoleID]) VALUES (N'SCHEDULE_TASK_DOMAIN_LOOKUP', N'WebsitePanel.EnterpriseServer.DomainLookupViewTask, WebsitePanel.EnterpriseServer.Code', 1) +END +GO + +IF NOT EXISTS (SELECT * FROM [dbo].[ScheduleTaskViewConfiguration] WHERE [TaskID] = N'SCHEDULE_TASK_DOMAIN_LOOKUP') +BEGIN +INSERT [dbo].[ScheduleTaskViewConfiguration] ([TaskID], [ConfigurationID], [Environment], [Description]) VALUES (N'SCHEDULE_TASK_DOMAIN_LOOKUP', N'ASP_NET', N'ASP.NET', N'~/DesktopModules/WebsitePanel/ScheduleTaskControls/DomainLookupView.ascx') +END +GO + +IF NOT EXISTS (SELECT * FROM [dbo].[ScheduleTaskParameters] WHERE [TaskID] = N'SCHEDULE_TASK_DOMAIN_LOOKUP' AND [ParameterID]= N'DNS_SERVERS' ) +BEGIN +INSERT [dbo].[ScheduleTaskParameters] ([TaskID], [ParameterID], [DataTypeID], [DefaultValue], [ParameterOrder]) VALUES (N'SCHEDULE_TASK_DOMAIN_LOOKUP', N'DNS_SERVERS', N'String', NULL, 1) +END +GO + +IF NOT EXISTS (SELECT * FROM [dbo].[ScheduleTaskParameters] WHERE [TaskID] = N'SCHEDULE_TASK_DOMAIN_LOOKUP' AND [ParameterID]= N'MAIL_TO' ) +BEGIN +INSERT [dbo].[ScheduleTaskParameters] ([TaskID], [ParameterID], [DataTypeID], [DefaultValue], [ParameterOrder]) VALUES (N'SCHEDULE_TASK_DOMAIN_LOOKUP', N'MAIL_TO', N'String', NULL, 2) +END +GO + +-- Domain lookup tables + +IF EXISTS (SELECT * FROM SYS.TABLES WHERE name = 'DomainDnsRecords') +DROP TABLE DomainDnsRecords +GO +CREATE TABLE DomainDnsRecords +( + ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY, + DomainId INT NOT NULL, + RecordType INT NOT NULL, + DnsServer NVARCHAR(255), + Value NVARCHAR(255), + Date DATETIME +) +GO + +ALTER TABLE [dbo].[DomainDnsRecords] WITH CHECK ADD CONSTRAINT [FK_DomainDnsRecords_DomainId] FOREIGN KEY([DomainId]) +REFERENCES [dbo].[Domains] ([DomainID]) +ON DELETE CASCADE +GO + +-- Procedures for Domai lookup service + + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetAllPackageIds') +DROP PROCEDURE GetAllPackageIds +GO +CREATE PROCEDURE [dbo].GetAllPackageIds + +AS +SELECT + [PackageID] + FROM [dbo].[Packages] +GO + + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetDomainDnsRecords') +DROP PROCEDURE GetDomainDnsRecords +GO +CREATE PROCEDURE [dbo].GetDomainDnsRecords +( + @DomainId INT, + @RecordType INT +) +AS +SELECT + ID, + DomainId, + DnsServer, + RecordType, + Value, + Date + FROM [dbo].[DomainDnsRecords] + WHERE [DomainId] = @DomainId AND [RecordType] = @RecordType +GO + + + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddDomainDnsRecord') +DROP PROCEDURE AddDomainDnsRecord +GO +CREATE PROCEDURE [dbo].[AddDomainDnsRecord] +( + @DomainId INT, + @RecordType INT, + @DnsServer NVARCHAR(255), + @Value NVARCHAR(255), + @Date DATETIME +) +AS + +INSERT INTO DomainDnsRecords +( + DomainId, + DnsServer, + RecordType, + Value, + Date +) +VALUES +( + @DomainId, + @DnsServer, + @RecordType, + @Value, + @Date +) +GO + + + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'DeleteDomainDnsRecord') +DROP PROCEDURE DeleteDomainDnsRecord +GO +CREATE PROCEDURE [dbo].[DeleteDomainDnsRecord] +( + @Id INT +) +AS + + +DELETE FROM DomainDnsRecords +WHERE Id = @Id +GO diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs index 62f9905f..67597939 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs @@ -36,6 +36,8 @@ using Microsoft.ApplicationBlocks.Data; using System.Collections.Generic; using Microsoft.Win32; using WebsitePanel.Providers.RemoteDesktopServices; +using WebsitePanel.Providers.DNS; +using WebsitePanel.Providers.DomainLookup; namespace WebsitePanel.EnterpriseServer { @@ -4718,5 +4720,54 @@ namespace WebsitePanel.EnterpriseServer } #endregion + + #region MX|NX Services + + public static IDataReader GetAllPackagesIds() + { + return SqlHelper.ExecuteReader( + ConnectionString, + CommandType.StoredProcedure, + "GetAllPackageIds" + ); + } + + public static IDataReader GetDomainMXRecords(int domainId, DnsRecordType recordType) + { + return SqlHelper.ExecuteReader( + ConnectionString, + CommandType.StoredProcedure, + "GetDomainDnsRecords", + new SqlParameter("@DomainId", domainId), + new SqlParameter("@RecordType", recordType) + ); + } + + public static IDataReader AddDomainDnsRecord(DnsRecordInfo domainDnsRecord) + { + return SqlHelper.ExecuteReader( + ConnectionString, + CommandType.StoredProcedure, + "AddDomainDnsRecord", + new SqlParameter("@DomainId", domainDnsRecord.DomainId), + new SqlParameter("@RecordType", domainDnsRecord.RecordType), + new SqlParameter("@DnsServer", domainDnsRecord.DnsServer), + new SqlParameter("@Value", domainDnsRecord.Value), + new SqlParameter("@Date", domainDnsRecord.Date) + ); + } + + public static IDataReader DeleteDomainDnsRecord(int id) + { + return SqlHelper.ExecuteReader( + ConnectionString, + CommandType.StoredProcedure, + "DeleteDomainDnsRecord", + new SqlParameter("@Id", id) + ); + } + + #endregion + } } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/OperatingSystems/OperatingSystemController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/OperatingSystems/OperatingSystemController.cs index d851ac44..c3d2fa9f 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/OperatingSystems/OperatingSystemController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/OperatingSystems/OperatingSystemController.cs @@ -40,6 +40,9 @@ using WebsitePanel.Providers; using WebsitePanel.Providers.OS; using OS = WebsitePanel.Providers.OS; using System.Collections; +using WebsitePanel.Providers.DomainLookup; +using WebsitePanel.Providers.DNS; +using System.Linq; namespace WebsitePanel.EnterpriseServer @@ -811,5 +814,24 @@ namespace WebsitePanel.EnterpriseServer #endregion + + #region Domain DNS Records lookup + + public static List GetDomainRecords(int packageId, string domain, string dnsServer, DnsRecordType recordType) + { + List records = new List(); + + // load OS service + int serviceId = PackageController.GetPackageServiceId(packageId, ResourceGroups.Os); + + var os = GetOS(serviceId); + + records = os.GetDomainDnsRecords(domain, dnsServer, recordType).ToList(); + + return records; + } + + #endregion + } } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs new file mode 100644 index 00000000..765b3544 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs @@ -0,0 +1,222 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using WebsitePanel.Providers.DNS; +using WebsitePanel.Providers.DomainLookup; + +namespace WebsitePanel.EnterpriseServer +{ + public class DomainLookupViewTask : SchedulerTask + { + // Input parameters: + private static readonly string DnsServersParameter = "DNS_SERVERS"; + private static readonly string MailToParameter = "MAIL_TO"; + + public override void DoWork() + { + BackgroundTask topTask = TaskManager.TopTask; + + List domainsChanges = new List(); + + // get input parameters + string dnsServersString = (string)topTask.GetParamValue(DnsServersParameter); + + // check input parameters + if (String.IsNullOrEmpty(dnsServersString)) + { + TaskManager.WriteWarning("Specify 'DNS' task parameter."); + return; + } + + var dnsServers = dnsServersString.Split(';'); + + var packages = ObjectUtils.CreateListFromDataReader(DataProvider.GetAllPackagesIds()); + + foreach (var package in packages) + { + + PackageContext cntx = PackageController.GetPackageContext(package.PackageId); + + if (cntx == null) + { + continue; + } + + bool dnsEnabled = cntx.GroupsArray.Any(x => x.GroupName == ResourceGroups.Dns); + + if (!dnsEnabled) + { + continue; + } + + var domains = ServerController.GetDomains(package.PackageId); + + domains = domains.Where(x => !x.IsSubDomain && !x.IsDomainPointer).ToList(); //Selecting top-level domains + + foreach (var domain in domains) + { + DomainChanges domainChanges = new DomainChanges(); + + var mxRecords = ObjectUtils.CreateListFromDataReader(DataProvider.GetDomainMXRecords(domain.DomainId, DnsRecordType.MX)); + var nsRecords = ObjectUtils.CreateListFromDataReader(DataProvider.GetDomainMXRecords(domain.DomainId, DnsRecordType.NS)); + + //execute server + foreach (var dnsServer in dnsServers) + { + var dnsMxRecords = OperatingSystemController.GetDomainRecords(domain.PackageId, domain.DomainName, dnsServer, DnsRecordType.MX); + var dnsNsRecords = OperatingSystemController.GetDomainRecords(domain.PackageId, domain.DomainName, dnsServer, DnsRecordType.NS); + + FillRecordData(dnsMxRecords, domain, dnsServer); + FillRecordData(dnsNsRecords, domain, dnsServer); + + domainChanges.MxChanges.Add(ApplyDomainRecordsChanges(mxRecords, dnsMxRecords, dnsServer)); + domainChanges.NsChanges.Add(ApplyDomainRecordsChanges(nsRecords, dnsNsRecords, dnsServer)); + } + + domainsChanges.Add(domainChanges); + } + } + + var changedDomains = FindDomainsWithChangedRecords(domainsChanges); + + if (changedDomains.Any()) + { + SendMailMessage(changedDomains); + } + } + + + + #region Helpers + + private IEnumerable FindDomainsWithChangedRecords(IEnumerable domainsChanges) + { + var changedDomains = new List(); + + foreach (var domainChanges in domainsChanges) + { + var firstTimeAdditon = domainChanges.MxChanges.All(x => x.DnsRecordsCompare.All(dns => dns.DbRecord == null)) + && domainChanges.NsChanges.All(x => x.DnsRecordsCompare.All(dns => dns.DbRecord == null)); + + if (firstTimeAdditon) + { + continue; + } + + bool mxIsChanged = domainChanges.MxChanges.Any(x => x.DnsRecordsCompare.Any(d => d.Status != DomainDnsRecordStatuses.NotChanged)); + bool nsIsChanged = domainChanges.NsChanges.Any(x => x.DnsRecordsCompare.Any(d => d.Status != DomainDnsRecordStatuses.NotChanged)); + + if (mxIsChanged || nsIsChanged) + { + changedDomains.Add(domainChanges); + } + } + + return changedDomains; + } + + private DomainDnsRecordsChanges ApplyDomainRecordsChanges(List dbRecords, List dnsRecords, string dnsServer) + { + var domainRecordChanges = new DomainDnsRecordsChanges(); + domainRecordChanges.DnsServer = dnsServer; + + var filteredDbRecords = dbRecords.Where(x => x.DnsServer == dnsServer); + + foreach (var record in filteredDbRecords) + { + var dnsRecord = dnsRecords.FirstOrDefault(x => x.Value == record.Value); + + if (dnsRecord != null) + { + domainRecordChanges.DnsRecordsCompare.Add(new DomainDnsRecordCompare { DbRecord = record, DnsRecord = dnsRecord, Status = DomainDnsRecordStatuses.NotChanged }); + + dnsRecords.Remove(dnsRecord); + } + else + { + domainRecordChanges.DnsRecordsCompare.Add(new DomainDnsRecordCompare { DbRecord = record, DnsRecord = null, Status = DomainDnsRecordStatuses.Removed }); + + RemoveRecord(record); + + domainRecordChanges.IsChanged = true; + } + } + + foreach (var record in dnsRecords) + { + domainRecordChanges.DnsRecordsCompare.Add(new DomainDnsRecordCompare { DbRecord = null, DnsRecord = record, Status = DomainDnsRecordStatuses.Added }); + + AddRecord(record); + + domainRecordChanges.IsChanged = true; + } + + return domainRecordChanges; + } + + private void FillRecordData(IEnumerable records, DomainInfo domain, string dnsServer) + { + foreach (var record in records) + { + FillRecordData(record, domain, dnsServer); + } + } + + private void FillRecordData(DnsRecordInfo record, DomainInfo domain, string dnsServer) + { + record.DomainId = domain.DomainId; + record.Date = DateTime.Now; + record.DnsServer = dnsServer; + } + + private void RemoveRecords(IEnumerable dnsRecords) + { + foreach (var record in dnsRecords) + { + RemoveRecord(record); + } + } + + private void RemoveRecord(DnsRecordInfo dnsRecord) + { + DataProvider.DeleteDomainDnsRecord(dnsRecord.Id); + } + + private void AddRecords(IEnumerable dnsRecords) + { + foreach (var record in dnsRecords) + { + AddRecord(record); + } + } + + private void AddRecord(DnsRecordInfo dnsRecord) + { + DataProvider.AddDomainDnsRecord(dnsRecord); + } + + private void SendMailMessage(IEnumerable domainsChanges) + { + BackgroundTask topTask = TaskManager.TopTask; + + // input parameters + string mailFrom = "wsp@scheduler.noreply"; + string mailTo = (string)topTask.GetParamValue("MAIL_TO"); + string mailSubject = "WSP MX and NS notification"; + string mailBody = "Hello!

"; + + if (String.IsNullOrEmpty(mailTo)) + { + TaskManager.WriteWarning("The e-mail message has not been sent because 'Mail To' is empty."); + } + else + { + // send mail message + // MailHelper.SendMessage(mailFrom, mailTo, mailSubject, mailBody, false); + } + } + + #endregion + } +} diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs.orig b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs.orig new file mode 100644 index 00000000..f1b2cb07 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs.orig @@ -0,0 +1,2907 @@ +// 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 + } +} diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/WebsitePanel.EnterpriseServer.Code.csproj b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/WebsitePanel.EnterpriseServer.Code.csproj index 3fead25f..2bdc8cf1 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/WebsitePanel.EnterpriseServer.Code.csproj +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/WebsitePanel.EnterpriseServer.Code.csproj @@ -143,6 +143,7 @@ + diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DnsRecordInfo.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DnsRecordInfo.cs new file mode 100644 index 00000000..47b8f30b --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DnsRecordInfo.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using WebsitePanel.Providers.DNS; + +namespace WebsitePanel.Providers.DomainLookup +{ + public class DnsRecordInfo + { + public int Id { get; set; } + public int DomainId { get; set; } + public string DnsServer { get; set; } + public DnsRecordType RecordType { get; set; } + public string Value { get; set; } + public DateTime Date { get; set; } + } +} diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainChanges.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainChanges.cs new file mode 100644 index 00000000..5bd9f038 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainChanges.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WebsitePanel.Providers.DomainLookup +{ + public class DomainChanges + { + public string Domain { get; set; } + + public List MxChanges { get; set; } + public List NsChanges { get; set; } + + public DomainChanges() + { + MxChanges = new List(); + NsChanges = new List(); + } + } +} diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordCompare.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordCompare.cs new file mode 100644 index 00000000..f3663b43 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordCompare.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WebsitePanel.Providers.DomainLookup +{ + public class DomainDnsRecordCompare + { + public DnsRecordInfo DbRecord { get; set; } + public DnsRecordInfo DnsRecord { get; set; } + public DomainDnsRecordStatuses Status { get; set; } + } +} diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordStatuses.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordStatuses.cs new file mode 100644 index 00000000..88fa25ed --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordStatuses.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WebsitePanel.Providers.DomainLookup +{ + public enum DomainDnsRecordStatuses + { + NotChanged, + Removed, + Added + } +} diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordsChanges.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordsChanges.cs new file mode 100644 index 00000000..27d07337 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordsChanges.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WebsitePanel.Providers.DomainLookup +{ + public class DomainDnsRecordsChanges + { + public string DnsServer { get; set; } + + public bool IsChanged { get; set; } + + public List DnsRecordsCompare { get; set; } + + public DomainDnsRecordsChanges() + { + DnsRecordsCompare = new List(); + } + } +} diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/OS/IOperatingSystem.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/OS/IOperatingSystem.cs index 1d5c8b5b..5b311b48 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/OS/IOperatingSystem.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/OS/IOperatingSystem.cs @@ -28,6 +28,9 @@ using System; using System.Collections; +using System.Collections.Generic; +using WebsitePanel.Providers.DNS; +using WebsitePanel.Providers.DomainLookup; namespace WebsitePanel.Providers.OS { @@ -88,5 +91,8 @@ namespace WebsitePanel.Providers.OS // File Services bool CheckFileServicesInstallation(); + + //DNS + DnsRecordInfo[] GetDomainDnsRecords(string domain, string dnsServer, DnsRecordType recordType); } } diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj index 2efa81eb..576d7cec 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj @@ -85,6 +85,11 @@ + + + + + diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2003/Windows2003.cs b/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2003/Windows2003.cs index 71fec3fa..6d29c8c6 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2003/Windows2003.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2003/Windows2003.cs @@ -34,6 +34,8 @@ using Microsoft.Win32; using WebsitePanel.Server.Utils; using WebsitePanel.Providers.Utils; +using WebsitePanel.Providers.DomainLookup; +using WebsitePanel.Providers.DNS; namespace WebsitePanel.Providers.OS { @@ -744,6 +746,10 @@ namespace WebsitePanel.Providers.OS } #endregion + public virtual DnsRecordInfo[] GetDomainDnsRecords(string domain, string dnsServer, DnsRecordType recordType) + { + return new DnsRecordInfo[0]; + } public override bool IsInstalled() { diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2012/Windows2012.cs b/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2012/Windows2012.cs index 69b702e4..c034f52e 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2012/Windows2012.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2012/Windows2012.cs @@ -49,6 +49,9 @@ using System.Management.Automation.Runspaces; using WebsitePanel.Providers.Common; using System.Runtime.InteropServices; +using System.Linq; +using WebsitePanel.Providers.DomainLookup; +using WebsitePanel.Providers.DNS; namespace WebsitePanel.Providers.OS @@ -295,6 +298,76 @@ namespace WebsitePanel.Providers.OS ExecuteShellCommand(runSpace, cmd, false); } + + #region Domain LookUp + + public override DnsRecordInfo[] GetDomainDnsRecords(string domain, string dnsServer, DnsRecordType recordType) + { + List records = new List(); + + Runspace runSpace = null; + + try + { + runSpace = OpenRunspace(); + + Command cmd = new Command("Resolve-DnsName"); + cmd.Parameters.Add("Name", domain); + cmd.Parameters.Add("Server", dnsServer); + cmd.Parameters.Add("Type", recordType.ToString()); + + var dnsRecordsPs = ExecuteShellCommand(runSpace, cmd, false); + + if (dnsRecordsPs != null) + { + foreach (var dnsRecordPs in dnsRecordsPs) + { + DnsRecordInfo newRecord; + + switch (recordType) + { + case DnsRecordType.MX: { newRecord = CreateMxDnsRecordFromPsObject(dnsRecordPs); break; } + case DnsRecordType.NS: { newRecord = CreateNsDnsRecordFromPsObject(dnsRecordPs); break; } + default: continue; + } + + newRecord.DnsServer = dnsServer; + newRecord.RecordType = recordType; + + records.Add(newRecord); + } + + } + } + finally + { + CloseRunspace(runSpace); + } + + return records.ToArray(); + } + + private DnsRecordInfo CreateMxDnsRecordFromPsObject(PSObject psObject) + { + var dnsRecord = new DnsRecordInfo + { + Value = Convert.ToString(GetPSObjectProperty(psObject, "NameExchange")), + }; + + return dnsRecord; + } + + private DnsRecordInfo CreateNsDnsRecordFromPsObject(PSObject psObject) + { + var dnsRecord = new DnsRecordInfo + { + Value = Convert.ToString(GetPSObjectProperty(psObject, "NameHost")), + }; + + return dnsRecord; + } + + #endregion #region PowerShell integration private static InitialSessionState session = null; diff --git a/WebsitePanel/Sources/WebsitePanel.Server.Client/OperatingSystemProxy.cs b/WebsitePanel/Sources/WebsitePanel.Server.Client/OperatingSystemProxy.cs index d1dc1811..bd8dc161 100644 --- a/WebsitePanel/Sources/WebsitePanel.Server.Client/OperatingSystemProxy.cs +++ b/WebsitePanel/Sources/WebsitePanel.Server.Client/OperatingSystemProxy.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:2.0.50727.4984 +// Runtime Version:2.0.50727.7905 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -9,635 +9,577 @@ //------------------------------------------------------------------------------ // -// This source code was auto-generated by wsdl, Version=2.0.50727.42. +// This source code was auto-generated by wsdl, Version=2.0.50727.3038. // -namespace WebsitePanel.Providers.OS -{ +namespace WebsitePanel.Providers.OS { using System.Xml.Serialization; using System.Web.Services; using System.ComponentModel; using System.Web.Services.Protocols; using System; using System.Diagnostics; - - + using WebsitePanel.Providers.DNS; + using WebsitePanel.Providers.DomainLookup; + + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Web.Services.WebServiceBindingAttribute(Name = "OperatingSystemSoap", Namespace = "http://smbsaas/websitepanel/server/")] + [System.Web.Services.WebServiceBindingAttribute(Name="OperatingSystemSoap", Namespace="http://smbsaas/websitepanel/server/")] [System.Xml.Serialization.XmlIncludeAttribute(typeof(ServiceProviderItem))] - public partial class OperatingSystem : Microsoft.Web.Services3.WebServicesClientProtocol - { - + public partial class OperatingSystem : Microsoft.Web.Services3.WebServicesClientProtocol { + public ServiceProviderSettingsSoapHeader ServiceProviderSettingsSoapHeaderValue; - + private System.Threading.SendOrPostCallback CreatePackageFolderOperationCompleted; - + private System.Threading.SendOrPostCallback FileExistsOperationCompleted; - + private System.Threading.SendOrPostCallback DirectoryExistsOperationCompleted; - + private System.Threading.SendOrPostCallback GetFileOperationCompleted; - + private System.Threading.SendOrPostCallback GetFilesOperationCompleted; - + private System.Threading.SendOrPostCallback GetDirectoriesRecursiveOperationCompleted; - + private System.Threading.SendOrPostCallback GetFilesRecursiveOperationCompleted; - + private System.Threading.SendOrPostCallback GetFilesRecursiveByPatternOperationCompleted; - + private System.Threading.SendOrPostCallback GetFileBinaryContentOperationCompleted; - + private System.Threading.SendOrPostCallback GetFileBinaryContentUsingEncodingOperationCompleted; - + private System.Threading.SendOrPostCallback GetFileBinaryChunkOperationCompleted; - + private System.Threading.SendOrPostCallback GetFileTextContentOperationCompleted; - + private System.Threading.SendOrPostCallback CreateFileOperationCompleted; - + private System.Threading.SendOrPostCallback CreateDirectoryOperationCompleted; - + private System.Threading.SendOrPostCallback ChangeFileAttributesOperationCompleted; - + private System.Threading.SendOrPostCallback DeleteFileOperationCompleted; - + private System.Threading.SendOrPostCallback DeleteFilesOperationCompleted; - + private System.Threading.SendOrPostCallback DeleteEmptyDirectoriesOperationCompleted; - + private System.Threading.SendOrPostCallback UpdateFileBinaryContentOperationCompleted; - + private System.Threading.SendOrPostCallback UpdateFileBinaryContentUsingEncodingOperationCompleted; - + private System.Threading.SendOrPostCallback AppendFileBinaryContentOperationCompleted; - + private System.Threading.SendOrPostCallback UpdateFileTextContentOperationCompleted; - + private System.Threading.SendOrPostCallback MoveFileOperationCompleted; - + private System.Threading.SendOrPostCallback CopyFileOperationCompleted; - + private System.Threading.SendOrPostCallback ZipFilesOperationCompleted; - + private System.Threading.SendOrPostCallback UnzipFilesOperationCompleted; - + private System.Threading.SendOrPostCallback CreateAccessDatabaseOperationCompleted; - + private System.Threading.SendOrPostCallback GetGroupNtfsPermissionsOperationCompleted; - + private System.Threading.SendOrPostCallback GrantGroupNtfsPermissionsOperationCompleted; - + private System.Threading.SendOrPostCallback SetQuotaLimitOnFolderOperationCompleted; - - private System.Threading.SendOrPostCallback GetQuotaLimitOnFolderOperationCompleted; - + + private System.Threading.SendOrPostCallback GetQuotaOnFolderOperationCompleted; + private System.Threading.SendOrPostCallback DeleteDirectoryRecursiveOperationCompleted; - + private System.Threading.SendOrPostCallback CheckFileServicesInstallationOperationCompleted; - + private System.Threading.SendOrPostCallback GetFolderGraphOperationCompleted; - + private System.Threading.SendOrPostCallback ExecuteSyncActionsOperationCompleted; - + private System.Threading.SendOrPostCallback GetInstalledOdbcDriversOperationCompleted; - + private System.Threading.SendOrPostCallback GetDSNNamesOperationCompleted; - + private System.Threading.SendOrPostCallback GetDSNOperationCompleted; - + private System.Threading.SendOrPostCallback CreateDSNOperationCompleted; - + private System.Threading.SendOrPostCallback UpdateDSNOperationCompleted; - + private System.Threading.SendOrPostCallback DeleteDSNOperationCompleted; - + + private System.Threading.SendOrPostCallback GetDomainDnsRecordsOperationCompleted; + /// - public OperatingSystem() - { - this.Url = "http://localhost:9004/OperatingSystem.asmx"; + public OperatingSystem() { + this.Url = "http://localhost:9003/OperatingSystem.asmx"; } - + /// public event CreatePackageFolderCompletedEventHandler CreatePackageFolderCompleted; - + /// public event FileExistsCompletedEventHandler FileExistsCompleted; - + /// public event DirectoryExistsCompletedEventHandler DirectoryExistsCompleted; - + /// public event GetFileCompletedEventHandler GetFileCompleted; - + /// public event GetFilesCompletedEventHandler GetFilesCompleted; - + /// public event GetDirectoriesRecursiveCompletedEventHandler GetDirectoriesRecursiveCompleted; - + /// public event GetFilesRecursiveCompletedEventHandler GetFilesRecursiveCompleted; - + /// public event GetFilesRecursiveByPatternCompletedEventHandler GetFilesRecursiveByPatternCompleted; - + /// public event GetFileBinaryContentCompletedEventHandler GetFileBinaryContentCompleted; - + /// public event GetFileBinaryContentUsingEncodingCompletedEventHandler GetFileBinaryContentUsingEncodingCompleted; - + /// public event GetFileBinaryChunkCompletedEventHandler GetFileBinaryChunkCompleted; - + /// public event GetFileTextContentCompletedEventHandler GetFileTextContentCompleted; - + /// public event CreateFileCompletedEventHandler CreateFileCompleted; - + /// public event CreateDirectoryCompletedEventHandler CreateDirectoryCompleted; - + /// public event ChangeFileAttributesCompletedEventHandler ChangeFileAttributesCompleted; - + /// public event DeleteFileCompletedEventHandler DeleteFileCompleted; - + /// public event DeleteFilesCompletedEventHandler DeleteFilesCompleted; - + /// public event DeleteEmptyDirectoriesCompletedEventHandler DeleteEmptyDirectoriesCompleted; - + /// public event UpdateFileBinaryContentCompletedEventHandler UpdateFileBinaryContentCompleted; - + /// public event UpdateFileBinaryContentUsingEncodingCompletedEventHandler UpdateFileBinaryContentUsingEncodingCompleted; - + /// public event AppendFileBinaryContentCompletedEventHandler AppendFileBinaryContentCompleted; - + /// public event UpdateFileTextContentCompletedEventHandler UpdateFileTextContentCompleted; - + /// public event MoveFileCompletedEventHandler MoveFileCompleted; - + /// public event CopyFileCompletedEventHandler CopyFileCompleted; - + /// public event ZipFilesCompletedEventHandler ZipFilesCompleted; - + /// public event UnzipFilesCompletedEventHandler UnzipFilesCompleted; - + /// public event CreateAccessDatabaseCompletedEventHandler CreateAccessDatabaseCompleted; - + /// public event GetGroupNtfsPermissionsCompletedEventHandler GetGroupNtfsPermissionsCompleted; - + /// public event GrantGroupNtfsPermissionsCompletedEventHandler GrantGroupNtfsPermissionsCompleted; - + /// public event SetQuotaLimitOnFolderCompletedEventHandler SetQuotaLimitOnFolderCompleted; - + /// - public event GetQuotaLimitOnFolderCompletedEventHandler GetQuotaLimitOnFolderCompleted; - + public event GetQuotaOnFolderCompletedEventHandler GetQuotaOnFolderCompleted; + /// public event DeleteDirectoryRecursiveCompletedEventHandler DeleteDirectoryRecursiveCompleted; - + /// public event CheckFileServicesInstallationCompletedEventHandler CheckFileServicesInstallationCompleted; - + /// public event GetFolderGraphCompletedEventHandler GetFolderGraphCompleted; - + /// public event ExecuteSyncActionsCompletedEventHandler ExecuteSyncActionsCompleted; - + /// public event GetInstalledOdbcDriversCompletedEventHandler GetInstalledOdbcDriversCompleted; - + /// public event GetDSNNamesCompletedEventHandler GetDSNNamesCompleted; - + /// public event GetDSNCompletedEventHandler GetDSNCompleted; - + /// public event CreateDSNCompletedEventHandler CreateDSNCompleted; - + /// public event UpdateDSNCompletedEventHandler UpdateDSNCompleted; - + /// public event DeleteDSNCompletedEventHandler DeleteDSNCompleted; - + + /// + public event GetDomainDnsRecordsCompletedEventHandler GetDomainDnsRecordsCompleted; + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/CreatePackageFolder", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public string CreatePackageFolder(string initialPath) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/CreatePackageFolder", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public string CreatePackageFolder(string initialPath) { object[] results = this.Invoke("CreatePackageFolder", new object[] { initialPath}); return ((string)(results[0])); } - + /// - public System.IAsyncResult BeginCreatePackageFolder(string initialPath, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginCreatePackageFolder(string initialPath, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("CreatePackageFolder", new object[] { initialPath}, callback, asyncState); } - + /// - public string EndCreatePackageFolder(System.IAsyncResult asyncResult) - { + public string EndCreatePackageFolder(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult); return ((string)(results[0])); } - + /// - public void CreatePackageFolderAsync(string initialPath) - { + public void CreatePackageFolderAsync(string initialPath) { this.CreatePackageFolderAsync(initialPath, null); } - + /// - public void CreatePackageFolderAsync(string initialPath, object userState) - { - if ((this.CreatePackageFolderOperationCompleted == null)) - { + public void CreatePackageFolderAsync(string initialPath, object userState) { + if ((this.CreatePackageFolderOperationCompleted == null)) { this.CreatePackageFolderOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreatePackageFolderOperationCompleted); } this.InvokeAsync("CreatePackageFolder", new object[] { initialPath}, this.CreatePackageFolderOperationCompleted, userState); } - - private void OnCreatePackageFolderOperationCompleted(object arg) - { - if ((this.CreatePackageFolderCompleted != null)) - { + + private void OnCreatePackageFolderOperationCompleted(object arg) { + if ((this.CreatePackageFolderCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.CreatePackageFolderCompleted(this, new CreatePackageFolderCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/FileExists", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public bool FileExists(string path) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/FileExists", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public bool FileExists(string path) { object[] results = this.Invoke("FileExists", new object[] { path}); return ((bool)(results[0])); } - + /// - public System.IAsyncResult BeginFileExists(string path, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginFileExists(string path, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("FileExists", new object[] { path}, callback, asyncState); } - + /// - public bool EndFileExists(System.IAsyncResult asyncResult) - { + public bool EndFileExists(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult); return ((bool)(results[0])); } - + /// - public void FileExistsAsync(string path) - { + public void FileExistsAsync(string path) { this.FileExistsAsync(path, null); } - + /// - public void FileExistsAsync(string path, object userState) - { - if ((this.FileExistsOperationCompleted == null)) - { + public void FileExistsAsync(string path, object userState) { + if ((this.FileExistsOperationCompleted == null)) { this.FileExistsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnFileExistsOperationCompleted); } this.InvokeAsync("FileExists", new object[] { path}, this.FileExistsOperationCompleted, userState); } - - private void OnFileExistsOperationCompleted(object arg) - { - if ((this.FileExistsCompleted != null)) - { + + private void OnFileExistsOperationCompleted(object arg) { + if ((this.FileExistsCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.FileExistsCompleted(this, new FileExistsCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/DirectoryExists", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public bool DirectoryExists(string path) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/DirectoryExists", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public bool DirectoryExists(string path) { object[] results = this.Invoke("DirectoryExists", new object[] { path}); return ((bool)(results[0])); } - + /// - public System.IAsyncResult BeginDirectoryExists(string path, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginDirectoryExists(string path, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("DirectoryExists", new object[] { path}, callback, asyncState); } - + /// - public bool EndDirectoryExists(System.IAsyncResult asyncResult) - { + public bool EndDirectoryExists(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult); return ((bool)(results[0])); } - + /// - public void DirectoryExistsAsync(string path) - { + public void DirectoryExistsAsync(string path) { this.DirectoryExistsAsync(path, null); } - + /// - public void DirectoryExistsAsync(string path, object userState) - { - if ((this.DirectoryExistsOperationCompleted == null)) - { + public void DirectoryExistsAsync(string path, object userState) { + if ((this.DirectoryExistsOperationCompleted == null)) { this.DirectoryExistsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnDirectoryExistsOperationCompleted); } this.InvokeAsync("DirectoryExists", new object[] { path}, this.DirectoryExistsOperationCompleted, userState); } - - private void OnDirectoryExistsOperationCompleted(object arg) - { - if ((this.DirectoryExistsCompleted != null)) - { + + private void OnDirectoryExistsOperationCompleted(object arg) { + if ((this.DirectoryExistsCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.DirectoryExistsCompleted(this, new DirectoryExistsCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetFile", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public SystemFile GetFile(string path) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetFile", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public SystemFile GetFile(string path) { object[] results = this.Invoke("GetFile", new object[] { path}); return ((SystemFile)(results[0])); } - + /// - public System.IAsyncResult BeginGetFile(string path, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginGetFile(string path, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("GetFile", new object[] { path}, callback, asyncState); } - + /// - public SystemFile EndGetFile(System.IAsyncResult asyncResult) - { + public SystemFile EndGetFile(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult); return ((SystemFile)(results[0])); } - + /// - public void GetFileAsync(string path) - { + public void GetFileAsync(string path) { this.GetFileAsync(path, null); } - + /// - public void GetFileAsync(string path, object userState) - { - if ((this.GetFileOperationCompleted == null)) - { + public void GetFileAsync(string path, object userState) { + if ((this.GetFileOperationCompleted == null)) { this.GetFileOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetFileOperationCompleted); } this.InvokeAsync("GetFile", new object[] { path}, this.GetFileOperationCompleted, userState); } - - private void OnGetFileOperationCompleted(object arg) - { - if ((this.GetFileCompleted != null)) - { + + private void OnGetFileOperationCompleted(object arg) { + if ((this.GetFileCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.GetFileCompleted(this, new GetFileCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetFiles", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public SystemFile[] GetFiles(string path) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetFiles", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public SystemFile[] GetFiles(string path) { object[] results = this.Invoke("GetFiles", new object[] { path}); return ((SystemFile[])(results[0])); } - + /// - public System.IAsyncResult BeginGetFiles(string path, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginGetFiles(string path, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("GetFiles", new object[] { path}, callback, asyncState); } - + /// - public SystemFile[] EndGetFiles(System.IAsyncResult asyncResult) - { + public SystemFile[] EndGetFiles(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult); return ((SystemFile[])(results[0])); } - + /// - public void GetFilesAsync(string path) - { + public void GetFilesAsync(string path) { this.GetFilesAsync(path, null); } - + /// - public void GetFilesAsync(string path, object userState) - { - if ((this.GetFilesOperationCompleted == null)) - { + public void GetFilesAsync(string path, object userState) { + if ((this.GetFilesOperationCompleted == null)) { this.GetFilesOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetFilesOperationCompleted); } this.InvokeAsync("GetFiles", new object[] { path}, this.GetFilesOperationCompleted, userState); } - - private void OnGetFilesOperationCompleted(object arg) - { - if ((this.GetFilesCompleted != null)) - { + + private void OnGetFilesOperationCompleted(object arg) { + if ((this.GetFilesCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.GetFilesCompleted(this, new GetFilesCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetDirectoriesRecursive", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public SystemFile[] GetDirectoriesRecursive(string rootFolder, string path) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetDirectoriesRecursive", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public SystemFile[] GetDirectoriesRecursive(string rootFolder, string path) { object[] results = this.Invoke("GetDirectoriesRecursive", new object[] { rootFolder, path}); return ((SystemFile[])(results[0])); } - + /// - public System.IAsyncResult BeginGetDirectoriesRecursive(string rootFolder, string path, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginGetDirectoriesRecursive(string rootFolder, string path, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("GetDirectoriesRecursive", new object[] { rootFolder, path}, callback, asyncState); } - + /// - public SystemFile[] EndGetDirectoriesRecursive(System.IAsyncResult asyncResult) - { + public SystemFile[] EndGetDirectoriesRecursive(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult); return ((SystemFile[])(results[0])); } - + /// - public void GetDirectoriesRecursiveAsync(string rootFolder, string path) - { + public void GetDirectoriesRecursiveAsync(string rootFolder, string path) { this.GetDirectoriesRecursiveAsync(rootFolder, path, null); } - + /// - public void GetDirectoriesRecursiveAsync(string rootFolder, string path, object userState) - { - if ((this.GetDirectoriesRecursiveOperationCompleted == null)) - { + public void GetDirectoriesRecursiveAsync(string rootFolder, string path, object userState) { + if ((this.GetDirectoriesRecursiveOperationCompleted == null)) { this.GetDirectoriesRecursiveOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetDirectoriesRecursiveOperationCompleted); } this.InvokeAsync("GetDirectoriesRecursive", new object[] { rootFolder, path}, this.GetDirectoriesRecursiveOperationCompleted, userState); } - - private void OnGetDirectoriesRecursiveOperationCompleted(object arg) - { - if ((this.GetDirectoriesRecursiveCompleted != null)) - { + + private void OnGetDirectoriesRecursiveOperationCompleted(object arg) { + if ((this.GetDirectoriesRecursiveCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.GetDirectoriesRecursiveCompleted(this, new GetDirectoriesRecursiveCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetFilesRecursive", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public SystemFile[] GetFilesRecursive(string rootFolder, string path) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetFilesRecursive", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public SystemFile[] GetFilesRecursive(string rootFolder, string path) { object[] results = this.Invoke("GetFilesRecursive", new object[] { rootFolder, path}); return ((SystemFile[])(results[0])); } - + /// - public System.IAsyncResult BeginGetFilesRecursive(string rootFolder, string path, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginGetFilesRecursive(string rootFolder, string path, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("GetFilesRecursive", new object[] { rootFolder, path}, callback, asyncState); } - + /// - public SystemFile[] EndGetFilesRecursive(System.IAsyncResult asyncResult) - { + public SystemFile[] EndGetFilesRecursive(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult); return ((SystemFile[])(results[0])); } - + /// - public void GetFilesRecursiveAsync(string rootFolder, string path) - { + public void GetFilesRecursiveAsync(string rootFolder, string path) { this.GetFilesRecursiveAsync(rootFolder, path, null); } - + /// - public void GetFilesRecursiveAsync(string rootFolder, string path, object userState) - { - if ((this.GetFilesRecursiveOperationCompleted == null)) - { + public void GetFilesRecursiveAsync(string rootFolder, string path, object userState) { + if ((this.GetFilesRecursiveOperationCompleted == null)) { this.GetFilesRecursiveOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetFilesRecursiveOperationCompleted); } this.InvokeAsync("GetFilesRecursive", new object[] { rootFolder, path}, this.GetFilesRecursiveOperationCompleted, userState); } - - private void OnGetFilesRecursiveOperationCompleted(object arg) - { - if ((this.GetFilesRecursiveCompleted != null)) - { + + private void OnGetFilesRecursiveOperationCompleted(object arg) { + if ((this.GetFilesRecursiveCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.GetFilesRecursiveCompleted(this, new GetFilesRecursiveCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetFilesRecursiveByPattern", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public SystemFile[] GetFilesRecursiveByPattern(string rootFolder, string path, string pattern) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetFilesRecursiveByPattern", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public SystemFile[] GetFilesRecursiveByPattern(string rootFolder, string path, string pattern) { object[] results = this.Invoke("GetFilesRecursiveByPattern", new object[] { rootFolder, path, pattern}); return ((SystemFile[])(results[0])); } - + /// - public System.IAsyncResult BeginGetFilesRecursiveByPattern(string rootFolder, string path, string pattern, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginGetFilesRecursiveByPattern(string rootFolder, string path, string pattern, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("GetFilesRecursiveByPattern", new object[] { rootFolder, path, pattern}, callback, asyncState); } - + /// - public SystemFile[] EndGetFilesRecursiveByPattern(System.IAsyncResult asyncResult) - { + public SystemFile[] EndGetFilesRecursiveByPattern(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult); return ((SystemFile[])(results[0])); } - + /// - public void GetFilesRecursiveByPatternAsync(string rootFolder, string path, string pattern) - { + public void GetFilesRecursiveByPatternAsync(string rootFolder, string path, string pattern) { this.GetFilesRecursiveByPatternAsync(rootFolder, path, pattern, null); } - + /// - public void GetFilesRecursiveByPatternAsync(string rootFolder, string path, string pattern, object userState) - { - if ((this.GetFilesRecursiveByPatternOperationCompleted == null)) - { + public void GetFilesRecursiveByPatternAsync(string rootFolder, string path, string pattern, object userState) { + if ((this.GetFilesRecursiveByPatternOperationCompleted == null)) { this.GetFilesRecursiveByPatternOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetFilesRecursiveByPatternOperationCompleted); } this.InvokeAsync("GetFilesRecursiveByPattern", new object[] { @@ -645,161 +587,137 @@ namespace WebsitePanel.Providers.OS path, pattern}, this.GetFilesRecursiveByPatternOperationCompleted, userState); } - - private void OnGetFilesRecursiveByPatternOperationCompleted(object arg) - { - if ((this.GetFilesRecursiveByPatternCompleted != null)) - { + + private void OnGetFilesRecursiveByPatternOperationCompleted(object arg) { + if ((this.GetFilesRecursiveByPatternCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.GetFilesRecursiveByPatternCompleted(this, new GetFilesRecursiveByPatternCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetFileBinaryContent", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - [return: System.Xml.Serialization.XmlElementAttribute(DataType = "base64Binary")] - public byte[] GetFileBinaryContent(string path) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetFileBinaryContent", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute(DataType="base64Binary")] + public byte[] GetFileBinaryContent(string path) { object[] results = this.Invoke("GetFileBinaryContent", new object[] { path}); return ((byte[])(results[0])); } - + /// - public System.IAsyncResult BeginGetFileBinaryContent(string path, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginGetFileBinaryContent(string path, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("GetFileBinaryContent", new object[] { path}, callback, asyncState); } - + /// - public byte[] EndGetFileBinaryContent(System.IAsyncResult asyncResult) - { + public byte[] EndGetFileBinaryContent(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult); return ((byte[])(results[0])); } - + /// - public void GetFileBinaryContentAsync(string path) - { + public void GetFileBinaryContentAsync(string path) { this.GetFileBinaryContentAsync(path, null); } - + /// - public void GetFileBinaryContentAsync(string path, object userState) - { - if ((this.GetFileBinaryContentOperationCompleted == null)) - { + public void GetFileBinaryContentAsync(string path, object userState) { + if ((this.GetFileBinaryContentOperationCompleted == null)) { this.GetFileBinaryContentOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetFileBinaryContentOperationCompleted); } this.InvokeAsync("GetFileBinaryContent", new object[] { path}, this.GetFileBinaryContentOperationCompleted, userState); } - - private void OnGetFileBinaryContentOperationCompleted(object arg) - { - if ((this.GetFileBinaryContentCompleted != null)) - { + + private void OnGetFileBinaryContentOperationCompleted(object arg) { + if ((this.GetFileBinaryContentCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.GetFileBinaryContentCompleted(this, new GetFileBinaryContentCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetFileBinaryContentUsingEncoding", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - [return: System.Xml.Serialization.XmlElementAttribute(DataType = "base64Binary")] - public byte[] GetFileBinaryContentUsingEncoding(string path, string encoding) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetFileBinaryContentUsingEncoding", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute(DataType="base64Binary")] + public byte[] GetFileBinaryContentUsingEncoding(string path, string encoding) { object[] results = this.Invoke("GetFileBinaryContentUsingEncoding", new object[] { path, encoding}); return ((byte[])(results[0])); } - + /// - public System.IAsyncResult BeginGetFileBinaryContentUsingEncoding(string path, string encoding, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginGetFileBinaryContentUsingEncoding(string path, string encoding, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("GetFileBinaryContentUsingEncoding", new object[] { path, encoding}, callback, asyncState); } - + /// - public byte[] EndGetFileBinaryContentUsingEncoding(System.IAsyncResult asyncResult) - { + public byte[] EndGetFileBinaryContentUsingEncoding(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult); return ((byte[])(results[0])); } - + /// - public void GetFileBinaryContentUsingEncodingAsync(string path, string encoding) - { + public void GetFileBinaryContentUsingEncodingAsync(string path, string encoding) { this.GetFileBinaryContentUsingEncodingAsync(path, encoding, null); } - + /// - public void GetFileBinaryContentUsingEncodingAsync(string path, string encoding, object userState) - { - if ((this.GetFileBinaryContentUsingEncodingOperationCompleted == null)) - { + public void GetFileBinaryContentUsingEncodingAsync(string path, string encoding, object userState) { + if ((this.GetFileBinaryContentUsingEncodingOperationCompleted == null)) { this.GetFileBinaryContentUsingEncodingOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetFileBinaryContentUsingEncodingOperationCompleted); } this.InvokeAsync("GetFileBinaryContentUsingEncoding", new object[] { path, encoding}, this.GetFileBinaryContentUsingEncodingOperationCompleted, userState); } - - private void OnGetFileBinaryContentUsingEncodingOperationCompleted(object arg) - { - if ((this.GetFileBinaryContentUsingEncodingCompleted != null)) - { + + private void OnGetFileBinaryContentUsingEncodingOperationCompleted(object arg) { + if ((this.GetFileBinaryContentUsingEncodingCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.GetFileBinaryContentUsingEncodingCompleted(this, new GetFileBinaryContentUsingEncodingCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetFileBinaryChunk", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - [return: System.Xml.Serialization.XmlElementAttribute(DataType = "base64Binary")] - public byte[] GetFileBinaryChunk(string path, int offset, int length) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetFileBinaryChunk", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute(DataType="base64Binary")] + public byte[] GetFileBinaryChunk(string path, int offset, int length) { object[] results = this.Invoke("GetFileBinaryChunk", new object[] { path, offset, length}); return ((byte[])(results[0])); } - + /// - public System.IAsyncResult BeginGetFileBinaryChunk(string path, int offset, int length, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginGetFileBinaryChunk(string path, int offset, int length, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("GetFileBinaryChunk", new object[] { path, offset, length}, callback, asyncState); } - + /// - public byte[] EndGetFileBinaryChunk(System.IAsyncResult asyncResult) - { + public byte[] EndGetFileBinaryChunk(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult); return ((byte[])(results[0])); } - + /// - public void GetFileBinaryChunkAsync(string path, int offset, int length) - { + public void GetFileBinaryChunkAsync(string path, int offset, int length) { this.GetFileBinaryChunkAsync(path, offset, length, null); } - + /// - public void GetFileBinaryChunkAsync(string path, int offset, int length, object userState) - { - if ((this.GetFileBinaryChunkOperationCompleted == null)) - { + public void GetFileBinaryChunkAsync(string path, int offset, int length, object userState) { + if ((this.GetFileBinaryChunkOperationCompleted == null)) { this.GetFileBinaryChunkOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetFileBinaryChunkOperationCompleted); } this.InvokeAsync("GetFileBinaryChunk", new object[] { @@ -807,199 +725,167 @@ namespace WebsitePanel.Providers.OS offset, length}, this.GetFileBinaryChunkOperationCompleted, userState); } - - private void OnGetFileBinaryChunkOperationCompleted(object arg) - { - if ((this.GetFileBinaryChunkCompleted != null)) - { + + private void OnGetFileBinaryChunkOperationCompleted(object arg) { + if ((this.GetFileBinaryChunkCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.GetFileBinaryChunkCompleted(this, new GetFileBinaryChunkCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetFileTextContent", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public string GetFileTextContent(string path) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetFileTextContent", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public string GetFileTextContent(string path) { object[] results = this.Invoke("GetFileTextContent", new object[] { path}); return ((string)(results[0])); } - + /// - public System.IAsyncResult BeginGetFileTextContent(string path, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginGetFileTextContent(string path, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("GetFileTextContent", new object[] { path}, callback, asyncState); } - + /// - public string EndGetFileTextContent(System.IAsyncResult asyncResult) - { + public string EndGetFileTextContent(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult); return ((string)(results[0])); } - + /// - public void GetFileTextContentAsync(string path) - { + public void GetFileTextContentAsync(string path) { this.GetFileTextContentAsync(path, null); } - + /// - public void GetFileTextContentAsync(string path, object userState) - { - if ((this.GetFileTextContentOperationCompleted == null)) - { + public void GetFileTextContentAsync(string path, object userState) { + if ((this.GetFileTextContentOperationCompleted == null)) { this.GetFileTextContentOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetFileTextContentOperationCompleted); } this.InvokeAsync("GetFileTextContent", new object[] { path}, this.GetFileTextContentOperationCompleted, userState); } - - private void OnGetFileTextContentOperationCompleted(object arg) - { - if ((this.GetFileTextContentCompleted != null)) - { + + private void OnGetFileTextContentOperationCompleted(object arg) { + if ((this.GetFileTextContentCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.GetFileTextContentCompleted(this, new GetFileTextContentCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/CreateFile", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public void CreateFile(string path) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/CreateFile", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public void CreateFile(string path) { this.Invoke("CreateFile", new object[] { path}); } - + /// - public System.IAsyncResult BeginCreateFile(string path, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginCreateFile(string path, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("CreateFile", new object[] { path}, callback, asyncState); } - + /// - public void EndCreateFile(System.IAsyncResult asyncResult) - { + public void EndCreateFile(System.IAsyncResult asyncResult) { this.EndInvoke(asyncResult); } - + /// - public void CreateFileAsync(string path) - { + public void CreateFileAsync(string path) { this.CreateFileAsync(path, null); } - + /// - public void CreateFileAsync(string path, object userState) - { - if ((this.CreateFileOperationCompleted == null)) - { + public void CreateFileAsync(string path, object userState) { + if ((this.CreateFileOperationCompleted == null)) { this.CreateFileOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateFileOperationCompleted); } this.InvokeAsync("CreateFile", new object[] { path}, this.CreateFileOperationCompleted, userState); } - - private void OnCreateFileOperationCompleted(object arg) - { - if ((this.CreateFileCompleted != null)) - { + + private void OnCreateFileOperationCompleted(object arg) { + if ((this.CreateFileCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.CreateFileCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/CreateDirectory", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public void CreateDirectory(string path) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/CreateDirectory", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public void CreateDirectory(string path) { this.Invoke("CreateDirectory", new object[] { path}); } - + /// - public System.IAsyncResult BeginCreateDirectory(string path, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginCreateDirectory(string path, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("CreateDirectory", new object[] { path}, callback, asyncState); } - + /// - public void EndCreateDirectory(System.IAsyncResult asyncResult) - { + public void EndCreateDirectory(System.IAsyncResult asyncResult) { this.EndInvoke(asyncResult); } - + /// - public void CreateDirectoryAsync(string path) - { + public void CreateDirectoryAsync(string path) { this.CreateDirectoryAsync(path, null); } - + /// - public void CreateDirectoryAsync(string path, object userState) - { - if ((this.CreateDirectoryOperationCompleted == null)) - { + public void CreateDirectoryAsync(string path, object userState) { + if ((this.CreateDirectoryOperationCompleted == null)) { this.CreateDirectoryOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateDirectoryOperationCompleted); } this.InvokeAsync("CreateDirectory", new object[] { path}, this.CreateDirectoryOperationCompleted, userState); } - - private void OnCreateDirectoryOperationCompleted(object arg) - { - if ((this.CreateDirectoryCompleted != null)) - { + + private void OnCreateDirectoryOperationCompleted(object arg) { + if ((this.CreateDirectoryCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.CreateDirectoryCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/ChangeFileAttributes", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public void ChangeFileAttributes(string path, System.DateTime createdTime, System.DateTime changedTime) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/ChangeFileAttributes", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public void ChangeFileAttributes(string path, System.DateTime createdTime, System.DateTime changedTime) { this.Invoke("ChangeFileAttributes", new object[] { path, createdTime, changedTime}); } - + /// - public System.IAsyncResult BeginChangeFileAttributes(string path, System.DateTime createdTime, System.DateTime changedTime, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginChangeFileAttributes(string path, System.DateTime createdTime, System.DateTime changedTime, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("ChangeFileAttributes", new object[] { path, createdTime, changedTime}, callback, asyncState); } - + /// - public void EndChangeFileAttributes(System.IAsyncResult asyncResult) - { + public void EndChangeFileAttributes(System.IAsyncResult asyncResult) { this.EndInvoke(asyncResult); } - + /// - public void ChangeFileAttributesAsync(string path, System.DateTime createdTime, System.DateTime changedTime) - { + public void ChangeFileAttributesAsync(string path, System.DateTime createdTime, System.DateTime changedTime) { this.ChangeFileAttributesAsync(path, createdTime, changedTime, null); } - + /// - public void ChangeFileAttributesAsync(string path, System.DateTime createdTime, System.DateTime changedTime, object userState) - { - if ((this.ChangeFileAttributesOperationCompleted == null)) - { + public void ChangeFileAttributesAsync(string path, System.DateTime createdTime, System.DateTime changedTime, object userState) { + if ((this.ChangeFileAttributesOperationCompleted == null)) { this.ChangeFileAttributesOperationCompleted = new System.Threading.SendOrPostCallback(this.OnChangeFileAttributesOperationCompleted); } this.InvokeAsync("ChangeFileAttributes", new object[] { @@ -1007,248 +893,208 @@ namespace WebsitePanel.Providers.OS createdTime, changedTime}, this.ChangeFileAttributesOperationCompleted, userState); } - - private void OnChangeFileAttributesOperationCompleted(object arg) - { - if ((this.ChangeFileAttributesCompleted != null)) - { + + private void OnChangeFileAttributesOperationCompleted(object arg) { + if ((this.ChangeFileAttributesCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.ChangeFileAttributesCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/DeleteFile", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public void DeleteFile(string path) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/DeleteFile", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public void DeleteFile(string path) { this.Invoke("DeleteFile", new object[] { path}); } - + /// - public System.IAsyncResult BeginDeleteFile(string path, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginDeleteFile(string path, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("DeleteFile", new object[] { path}, callback, asyncState); } - + /// - public void EndDeleteFile(System.IAsyncResult asyncResult) - { + public void EndDeleteFile(System.IAsyncResult asyncResult) { this.EndInvoke(asyncResult); } - + /// - public void DeleteFileAsync(string path) - { + public void DeleteFileAsync(string path) { this.DeleteFileAsync(path, null); } - + /// - public void DeleteFileAsync(string path, object userState) - { - if ((this.DeleteFileOperationCompleted == null)) - { + public void DeleteFileAsync(string path, object userState) { + if ((this.DeleteFileOperationCompleted == null)) { this.DeleteFileOperationCompleted = new System.Threading.SendOrPostCallback(this.OnDeleteFileOperationCompleted); } this.InvokeAsync("DeleteFile", new object[] { path}, this.DeleteFileOperationCompleted, userState); } - - private void OnDeleteFileOperationCompleted(object arg) - { - if ((this.DeleteFileCompleted != null)) - { + + private void OnDeleteFileOperationCompleted(object arg) { + if ((this.DeleteFileCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.DeleteFileCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/DeleteFiles", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public void DeleteFiles(string[] files) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/DeleteFiles", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public void DeleteFiles(string[] files) { this.Invoke("DeleteFiles", new object[] { files}); } - + /// - public System.IAsyncResult BeginDeleteFiles(string[] files, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginDeleteFiles(string[] files, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("DeleteFiles", new object[] { files}, callback, asyncState); } - + /// - public void EndDeleteFiles(System.IAsyncResult asyncResult) - { + public void EndDeleteFiles(System.IAsyncResult asyncResult) { this.EndInvoke(asyncResult); } - + /// - public void DeleteFilesAsync(string[] files) - { + public void DeleteFilesAsync(string[] files) { this.DeleteFilesAsync(files, null); } - + /// - public void DeleteFilesAsync(string[] files, object userState) - { - if ((this.DeleteFilesOperationCompleted == null)) - { + public void DeleteFilesAsync(string[] files, object userState) { + if ((this.DeleteFilesOperationCompleted == null)) { this.DeleteFilesOperationCompleted = new System.Threading.SendOrPostCallback(this.OnDeleteFilesOperationCompleted); } this.InvokeAsync("DeleteFiles", new object[] { files}, this.DeleteFilesOperationCompleted, userState); } - - private void OnDeleteFilesOperationCompleted(object arg) - { - if ((this.DeleteFilesCompleted != null)) - { + + private void OnDeleteFilesOperationCompleted(object arg) { + if ((this.DeleteFilesCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.DeleteFilesCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/DeleteEmptyDirectories", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public void DeleteEmptyDirectories(string[] directories) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/DeleteEmptyDirectories", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public void DeleteEmptyDirectories(string[] directories) { this.Invoke("DeleteEmptyDirectories", new object[] { directories}); } - + /// - public System.IAsyncResult BeginDeleteEmptyDirectories(string[] directories, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginDeleteEmptyDirectories(string[] directories, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("DeleteEmptyDirectories", new object[] { directories}, callback, asyncState); } - + /// - public void EndDeleteEmptyDirectories(System.IAsyncResult asyncResult) - { + public void EndDeleteEmptyDirectories(System.IAsyncResult asyncResult) { this.EndInvoke(asyncResult); } - + /// - public void DeleteEmptyDirectoriesAsync(string[] directories) - { + public void DeleteEmptyDirectoriesAsync(string[] directories) { this.DeleteEmptyDirectoriesAsync(directories, null); } - + /// - public void DeleteEmptyDirectoriesAsync(string[] directories, object userState) - { - if ((this.DeleteEmptyDirectoriesOperationCompleted == null)) - { + public void DeleteEmptyDirectoriesAsync(string[] directories, object userState) { + if ((this.DeleteEmptyDirectoriesOperationCompleted == null)) { this.DeleteEmptyDirectoriesOperationCompleted = new System.Threading.SendOrPostCallback(this.OnDeleteEmptyDirectoriesOperationCompleted); } this.InvokeAsync("DeleteEmptyDirectories", new object[] { directories}, this.DeleteEmptyDirectoriesOperationCompleted, userState); } - - private void OnDeleteEmptyDirectoriesOperationCompleted(object arg) - { - if ((this.DeleteEmptyDirectoriesCompleted != null)) - { + + private void OnDeleteEmptyDirectoriesOperationCompleted(object arg) { + if ((this.DeleteEmptyDirectoriesCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.DeleteEmptyDirectoriesCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/UpdateFileBinaryContent", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public void UpdateFileBinaryContent(string path, [System.Xml.Serialization.XmlElementAttribute(DataType = "base64Binary")] byte[] content) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/UpdateFileBinaryContent", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public void UpdateFileBinaryContent(string path, [System.Xml.Serialization.XmlElementAttribute(DataType="base64Binary")] byte[] content) { this.Invoke("UpdateFileBinaryContent", new object[] { path, content}); } - + /// - public System.IAsyncResult BeginUpdateFileBinaryContent(string path, byte[] content, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginUpdateFileBinaryContent(string path, byte[] content, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("UpdateFileBinaryContent", new object[] { path, content}, callback, asyncState); } - + /// - public void EndUpdateFileBinaryContent(System.IAsyncResult asyncResult) - { + public void EndUpdateFileBinaryContent(System.IAsyncResult asyncResult) { this.EndInvoke(asyncResult); } - + /// - public void UpdateFileBinaryContentAsync(string path, byte[] content) - { + public void UpdateFileBinaryContentAsync(string path, byte[] content) { this.UpdateFileBinaryContentAsync(path, content, null); } - + /// - public void UpdateFileBinaryContentAsync(string path, byte[] content, object userState) - { - if ((this.UpdateFileBinaryContentOperationCompleted == null)) - { + public void UpdateFileBinaryContentAsync(string path, byte[] content, object userState) { + if ((this.UpdateFileBinaryContentOperationCompleted == null)) { this.UpdateFileBinaryContentOperationCompleted = new System.Threading.SendOrPostCallback(this.OnUpdateFileBinaryContentOperationCompleted); } this.InvokeAsync("UpdateFileBinaryContent", new object[] { path, content}, this.UpdateFileBinaryContentOperationCompleted, userState); } - - private void OnUpdateFileBinaryContentOperationCompleted(object arg) - { - if ((this.UpdateFileBinaryContentCompleted != null)) - { + + private void OnUpdateFileBinaryContentOperationCompleted(object arg) { + if ((this.UpdateFileBinaryContentCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.UpdateFileBinaryContentCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/UpdateFileBinaryContentUsingEncoding", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public void UpdateFileBinaryContentUsingEncoding(string path, [System.Xml.Serialization.XmlElementAttribute(DataType = "base64Binary")] byte[] content, string encoding) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/UpdateFileBinaryContentUsingEncoding", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public void UpdateFileBinaryContentUsingEncoding(string path, [System.Xml.Serialization.XmlElementAttribute(DataType="base64Binary")] byte[] content, string encoding) { this.Invoke("UpdateFileBinaryContentUsingEncoding", new object[] { path, content, encoding}); } - + /// - public System.IAsyncResult BeginUpdateFileBinaryContentUsingEncoding(string path, byte[] content, string encoding, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginUpdateFileBinaryContentUsingEncoding(string path, byte[] content, string encoding, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("UpdateFileBinaryContentUsingEncoding", new object[] { path, content, encoding}, callback, asyncState); } - + /// - public void EndUpdateFileBinaryContentUsingEncoding(System.IAsyncResult asyncResult) - { + public void EndUpdateFileBinaryContentUsingEncoding(System.IAsyncResult asyncResult) { this.EndInvoke(asyncResult); } - + /// - public void UpdateFileBinaryContentUsingEncodingAsync(string path, byte[] content, string encoding) - { + public void UpdateFileBinaryContentUsingEncodingAsync(string path, byte[] content, string encoding) { this.UpdateFileBinaryContentUsingEncodingAsync(path, content, encoding, null); } - + /// - public void UpdateFileBinaryContentUsingEncodingAsync(string path, byte[] content, string encoding, object userState) - { - if ((this.UpdateFileBinaryContentUsingEncodingOperationCompleted == null)) - { + public void UpdateFileBinaryContentUsingEncodingAsync(string path, byte[] content, string encoding, object userState) { + if ((this.UpdateFileBinaryContentUsingEncodingOperationCompleted == null)) { this.UpdateFileBinaryContentUsingEncodingOperationCompleted = new System.Threading.SendOrPostCallback(this.OnUpdateFileBinaryContentUsingEncodingOperationCompleted); } this.InvokeAsync("UpdateFileBinaryContentUsingEncoding", new object[] { @@ -1256,257 +1102,217 @@ namespace WebsitePanel.Providers.OS content, encoding}, this.UpdateFileBinaryContentUsingEncodingOperationCompleted, userState); } - - private void OnUpdateFileBinaryContentUsingEncodingOperationCompleted(object arg) - { - if ((this.UpdateFileBinaryContentUsingEncodingCompleted != null)) - { + + private void OnUpdateFileBinaryContentUsingEncodingOperationCompleted(object arg) { + if ((this.UpdateFileBinaryContentUsingEncodingCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.UpdateFileBinaryContentUsingEncodingCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/AppendFileBinaryContent", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public void AppendFileBinaryContent(string path, [System.Xml.Serialization.XmlElementAttribute(DataType = "base64Binary")] byte[] chunk) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/AppendFileBinaryContent", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public void AppendFileBinaryContent(string path, [System.Xml.Serialization.XmlElementAttribute(DataType="base64Binary")] byte[] chunk) { this.Invoke("AppendFileBinaryContent", new object[] { path, chunk}); } - + /// - public System.IAsyncResult BeginAppendFileBinaryContent(string path, byte[] chunk, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginAppendFileBinaryContent(string path, byte[] chunk, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("AppendFileBinaryContent", new object[] { path, chunk}, callback, asyncState); } - + /// - public void EndAppendFileBinaryContent(System.IAsyncResult asyncResult) - { + public void EndAppendFileBinaryContent(System.IAsyncResult asyncResult) { this.EndInvoke(asyncResult); } - + /// - public void AppendFileBinaryContentAsync(string path, byte[] chunk) - { + public void AppendFileBinaryContentAsync(string path, byte[] chunk) { this.AppendFileBinaryContentAsync(path, chunk, null); } - + /// - public void AppendFileBinaryContentAsync(string path, byte[] chunk, object userState) - { - if ((this.AppendFileBinaryContentOperationCompleted == null)) - { + public void AppendFileBinaryContentAsync(string path, byte[] chunk, object userState) { + if ((this.AppendFileBinaryContentOperationCompleted == null)) { this.AppendFileBinaryContentOperationCompleted = new System.Threading.SendOrPostCallback(this.OnAppendFileBinaryContentOperationCompleted); } this.InvokeAsync("AppendFileBinaryContent", new object[] { path, chunk}, this.AppendFileBinaryContentOperationCompleted, userState); } - - private void OnAppendFileBinaryContentOperationCompleted(object arg) - { - if ((this.AppendFileBinaryContentCompleted != null)) - { + + private void OnAppendFileBinaryContentOperationCompleted(object arg) { + if ((this.AppendFileBinaryContentCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.AppendFileBinaryContentCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/UpdateFileTextContent", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public void UpdateFileTextContent(string path, string content) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/UpdateFileTextContent", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public void UpdateFileTextContent(string path, string content) { this.Invoke("UpdateFileTextContent", new object[] { path, content}); } - + /// - public System.IAsyncResult BeginUpdateFileTextContent(string path, string content, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginUpdateFileTextContent(string path, string content, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("UpdateFileTextContent", new object[] { path, content}, callback, asyncState); } - + /// - public void EndUpdateFileTextContent(System.IAsyncResult asyncResult) - { + public void EndUpdateFileTextContent(System.IAsyncResult asyncResult) { this.EndInvoke(asyncResult); } - + /// - public void UpdateFileTextContentAsync(string path, string content) - { + public void UpdateFileTextContentAsync(string path, string content) { this.UpdateFileTextContentAsync(path, content, null); } - + /// - public void UpdateFileTextContentAsync(string path, string content, object userState) - { - if ((this.UpdateFileTextContentOperationCompleted == null)) - { + public void UpdateFileTextContentAsync(string path, string content, object userState) { + if ((this.UpdateFileTextContentOperationCompleted == null)) { this.UpdateFileTextContentOperationCompleted = new System.Threading.SendOrPostCallback(this.OnUpdateFileTextContentOperationCompleted); } this.InvokeAsync("UpdateFileTextContent", new object[] { path, content}, this.UpdateFileTextContentOperationCompleted, userState); } - - private void OnUpdateFileTextContentOperationCompleted(object arg) - { - if ((this.UpdateFileTextContentCompleted != null)) - { + + private void OnUpdateFileTextContentOperationCompleted(object arg) { + if ((this.UpdateFileTextContentCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.UpdateFileTextContentCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/MoveFile", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public void MoveFile(string sourcePath, string destinationPath) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/MoveFile", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public void MoveFile(string sourcePath, string destinationPath) { this.Invoke("MoveFile", new object[] { sourcePath, destinationPath}); } - + /// - public System.IAsyncResult BeginMoveFile(string sourcePath, string destinationPath, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginMoveFile(string sourcePath, string destinationPath, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("MoveFile", new object[] { sourcePath, destinationPath}, callback, asyncState); } - + /// - public void EndMoveFile(System.IAsyncResult asyncResult) - { + public void EndMoveFile(System.IAsyncResult asyncResult) { this.EndInvoke(asyncResult); } - + /// - public void MoveFileAsync(string sourcePath, string destinationPath) - { + public void MoveFileAsync(string sourcePath, string destinationPath) { this.MoveFileAsync(sourcePath, destinationPath, null); } - + /// - public void MoveFileAsync(string sourcePath, string destinationPath, object userState) - { - if ((this.MoveFileOperationCompleted == null)) - { + public void MoveFileAsync(string sourcePath, string destinationPath, object userState) { + if ((this.MoveFileOperationCompleted == null)) { this.MoveFileOperationCompleted = new System.Threading.SendOrPostCallback(this.OnMoveFileOperationCompleted); } this.InvokeAsync("MoveFile", new object[] { sourcePath, destinationPath}, this.MoveFileOperationCompleted, userState); } - - private void OnMoveFileOperationCompleted(object arg) - { - if ((this.MoveFileCompleted != null)) - { + + private void OnMoveFileOperationCompleted(object arg) { + if ((this.MoveFileCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.MoveFileCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/CopyFile", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public void CopyFile(string sourcePath, string destinationPath) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/CopyFile", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public void CopyFile(string sourcePath, string destinationPath) { this.Invoke("CopyFile", new object[] { sourcePath, destinationPath}); } - + /// - public System.IAsyncResult BeginCopyFile(string sourcePath, string destinationPath, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginCopyFile(string sourcePath, string destinationPath, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("CopyFile", new object[] { sourcePath, destinationPath}, callback, asyncState); } - + /// - public void EndCopyFile(System.IAsyncResult asyncResult) - { + public void EndCopyFile(System.IAsyncResult asyncResult) { this.EndInvoke(asyncResult); } - + /// - public void CopyFileAsync(string sourcePath, string destinationPath) - { + public void CopyFileAsync(string sourcePath, string destinationPath) { this.CopyFileAsync(sourcePath, destinationPath, null); } - + /// - public void CopyFileAsync(string sourcePath, string destinationPath, object userState) - { - if ((this.CopyFileOperationCompleted == null)) - { + public void CopyFileAsync(string sourcePath, string destinationPath, object userState) { + if ((this.CopyFileOperationCompleted == null)) { this.CopyFileOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCopyFileOperationCompleted); } this.InvokeAsync("CopyFile", new object[] { sourcePath, destinationPath}, this.CopyFileOperationCompleted, userState); } - - private void OnCopyFileOperationCompleted(object arg) - { - if ((this.CopyFileCompleted != null)) - { + + private void OnCopyFileOperationCompleted(object arg) { + if ((this.CopyFileCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.CopyFileCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/ZipFiles", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public void ZipFiles(string zipFile, string rootPath, string[] files) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/ZipFiles", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public void ZipFiles(string zipFile, string rootPath, string[] files) { this.Invoke("ZipFiles", new object[] { zipFile, rootPath, files}); } - + /// - public System.IAsyncResult BeginZipFiles(string zipFile, string rootPath, string[] files, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginZipFiles(string zipFile, string rootPath, string[] files, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("ZipFiles", new object[] { zipFile, rootPath, files}, callback, asyncState); } - + /// - public void EndZipFiles(System.IAsyncResult asyncResult) - { + public void EndZipFiles(System.IAsyncResult asyncResult) { this.EndInvoke(asyncResult); } - + /// - public void ZipFilesAsync(string zipFile, string rootPath, string[] files) - { + public void ZipFilesAsync(string zipFile, string rootPath, string[] files) { this.ZipFilesAsync(zipFile, rootPath, files, null); } - + /// - public void ZipFilesAsync(string zipFile, string rootPath, string[] files, object userState) - { - if ((this.ZipFilesOperationCompleted == null)) - { + public void ZipFilesAsync(string zipFile, string rootPath, string[] files, object userState) { + if ((this.ZipFilesOperationCompleted == null)) { this.ZipFilesOperationCompleted = new System.Threading.SendOrPostCallback(this.OnZipFilesOperationCompleted); } this.InvokeAsync("ZipFiles", new object[] { @@ -1514,156 +1320,132 @@ namespace WebsitePanel.Providers.OS rootPath, files}, this.ZipFilesOperationCompleted, userState); } - - private void OnZipFilesOperationCompleted(object arg) - { - if ((this.ZipFilesCompleted != null)) - { + + private void OnZipFilesOperationCompleted(object arg) { + if ((this.ZipFilesCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.ZipFilesCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/UnzipFiles", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public string[] UnzipFiles(string zipFile, string destFolder) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/UnzipFiles", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public string[] UnzipFiles(string zipFile, string destFolder) { object[] results = this.Invoke("UnzipFiles", new object[] { zipFile, destFolder}); return ((string[])(results[0])); } - + /// - public System.IAsyncResult BeginUnzipFiles(string zipFile, string destFolder, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginUnzipFiles(string zipFile, string destFolder, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("UnzipFiles", new object[] { zipFile, destFolder}, callback, asyncState); } - + /// - public string[] EndUnzipFiles(System.IAsyncResult asyncResult) - { + public string[] EndUnzipFiles(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult); return ((string[])(results[0])); } - + /// - public void UnzipFilesAsync(string zipFile, string destFolder) - { + public void UnzipFilesAsync(string zipFile, string destFolder) { this.UnzipFilesAsync(zipFile, destFolder, null); } - + /// - public void UnzipFilesAsync(string zipFile, string destFolder, object userState) - { - if ((this.UnzipFilesOperationCompleted == null)) - { + public void UnzipFilesAsync(string zipFile, string destFolder, object userState) { + if ((this.UnzipFilesOperationCompleted == null)) { this.UnzipFilesOperationCompleted = new System.Threading.SendOrPostCallback(this.OnUnzipFilesOperationCompleted); } this.InvokeAsync("UnzipFiles", new object[] { zipFile, destFolder}, this.UnzipFilesOperationCompleted, userState); } - - private void OnUnzipFilesOperationCompleted(object arg) - { - if ((this.UnzipFilesCompleted != null)) - { + + private void OnUnzipFilesOperationCompleted(object arg) { + if ((this.UnzipFilesCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.UnzipFilesCompleted(this, new UnzipFilesCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/CreateAccessDatabase", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public void CreateAccessDatabase(string databasePath) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/CreateAccessDatabase", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public void CreateAccessDatabase(string databasePath) { this.Invoke("CreateAccessDatabase", new object[] { databasePath}); } - + /// - public System.IAsyncResult BeginCreateAccessDatabase(string databasePath, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginCreateAccessDatabase(string databasePath, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("CreateAccessDatabase", new object[] { databasePath}, callback, asyncState); } - + /// - public void EndCreateAccessDatabase(System.IAsyncResult asyncResult) - { + public void EndCreateAccessDatabase(System.IAsyncResult asyncResult) { this.EndInvoke(asyncResult); } - + /// - public void CreateAccessDatabaseAsync(string databasePath) - { + public void CreateAccessDatabaseAsync(string databasePath) { this.CreateAccessDatabaseAsync(databasePath, null); } - + /// - public void CreateAccessDatabaseAsync(string databasePath, object userState) - { - if ((this.CreateAccessDatabaseOperationCompleted == null)) - { + public void CreateAccessDatabaseAsync(string databasePath, object userState) { + if ((this.CreateAccessDatabaseOperationCompleted == null)) { this.CreateAccessDatabaseOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateAccessDatabaseOperationCompleted); } this.InvokeAsync("CreateAccessDatabase", new object[] { databasePath}, this.CreateAccessDatabaseOperationCompleted, userState); } - - private void OnCreateAccessDatabaseOperationCompleted(object arg) - { - if ((this.CreateAccessDatabaseCompleted != null)) - { + + private void OnCreateAccessDatabaseOperationCompleted(object arg) { + if ((this.CreateAccessDatabaseCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.CreateAccessDatabaseCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetGroupNtfsPermissions", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public UserPermission[] GetGroupNtfsPermissions(string path, UserPermission[] users, string usersOU) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetGroupNtfsPermissions", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public UserPermission[] GetGroupNtfsPermissions(string path, UserPermission[] users, string usersOU) { object[] results = this.Invoke("GetGroupNtfsPermissions", new object[] { path, users, usersOU}); return ((UserPermission[])(results[0])); } - + /// - public System.IAsyncResult BeginGetGroupNtfsPermissions(string path, UserPermission[] users, string usersOU, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginGetGroupNtfsPermissions(string path, UserPermission[] users, string usersOU, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("GetGroupNtfsPermissions", new object[] { path, users, usersOU}, callback, asyncState); } - + /// - public UserPermission[] EndGetGroupNtfsPermissions(System.IAsyncResult asyncResult) - { + public UserPermission[] EndGetGroupNtfsPermissions(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult); return ((UserPermission[])(results[0])); } - + /// - public void GetGroupNtfsPermissionsAsync(string path, UserPermission[] users, string usersOU) - { + public void GetGroupNtfsPermissionsAsync(string path, UserPermission[] users, string usersOU) { this.GetGroupNtfsPermissionsAsync(path, users, usersOU, null); } - + /// - public void GetGroupNtfsPermissionsAsync(string path, UserPermission[] users, string usersOU, object userState) - { - if ((this.GetGroupNtfsPermissionsOperationCompleted == null)) - { + public void GetGroupNtfsPermissionsAsync(string path, UserPermission[] users, string usersOU, object userState) { + if ((this.GetGroupNtfsPermissionsOperationCompleted == null)) { this.GetGroupNtfsPermissionsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetGroupNtfsPermissionsOperationCompleted); } this.InvokeAsync("GetGroupNtfsPermissions", new object[] { @@ -1671,55 +1453,47 @@ namespace WebsitePanel.Providers.OS users, usersOU}, this.GetGroupNtfsPermissionsOperationCompleted, userState); } - - private void OnGetGroupNtfsPermissionsOperationCompleted(object arg) - { - if ((this.GetGroupNtfsPermissionsCompleted != null)) - { + + private void OnGetGroupNtfsPermissionsOperationCompleted(object arg) { + if ((this.GetGroupNtfsPermissionsCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.GetGroupNtfsPermissionsCompleted(this, new GetGroupNtfsPermissionsCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GrantGroupNtfsPermissions", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public void GrantGroupNtfsPermissions(string path, UserPermission[] users, string usersOU, bool resetChildPermissions) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GrantGroupNtfsPermissions", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public void GrantGroupNtfsPermissions(string path, UserPermission[] users, string usersOU, bool resetChildPermissions) { this.Invoke("GrantGroupNtfsPermissions", new object[] { path, users, usersOU, resetChildPermissions}); } - + /// - public System.IAsyncResult BeginGrantGroupNtfsPermissions(string path, UserPermission[] users, string usersOU, bool resetChildPermissions, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginGrantGroupNtfsPermissions(string path, UserPermission[] users, string usersOU, bool resetChildPermissions, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("GrantGroupNtfsPermissions", new object[] { path, users, usersOU, resetChildPermissions}, callback, asyncState); } - + /// - public void EndGrantGroupNtfsPermissions(System.IAsyncResult asyncResult) - { + public void EndGrantGroupNtfsPermissions(System.IAsyncResult asyncResult) { this.EndInvoke(asyncResult); } - + /// - public void GrantGroupNtfsPermissionsAsync(string path, UserPermission[] users, string usersOU, bool resetChildPermissions) - { + public void GrantGroupNtfsPermissionsAsync(string path, UserPermission[] users, string usersOU, bool resetChildPermissions) { this.GrantGroupNtfsPermissionsAsync(path, users, usersOU, resetChildPermissions, null); } - + /// - public void GrantGroupNtfsPermissionsAsync(string path, UserPermission[] users, string usersOU, bool resetChildPermissions, object userState) - { - if ((this.GrantGroupNtfsPermissionsOperationCompleted == null)) - { + public void GrantGroupNtfsPermissionsAsync(string path, UserPermission[] users, string usersOU, bool resetChildPermissions, object userState) { + if ((this.GrantGroupNtfsPermissionsOperationCompleted == null)) { this.GrantGroupNtfsPermissionsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGrantGroupNtfsPermissionsOperationCompleted); } this.InvokeAsync("GrantGroupNtfsPermissions", new object[] { @@ -1728,21 +1502,18 @@ namespace WebsitePanel.Providers.OS usersOU, resetChildPermissions}, this.GrantGroupNtfsPermissionsOperationCompleted, userState); } - - private void OnGrantGroupNtfsPermissionsOperationCompleted(object arg) - { - if ((this.GrantGroupNtfsPermissionsCompleted != null)) - { + + private void OnGrantGroupNtfsPermissionsOperationCompleted(object arg) { + if ((this.GrantGroupNtfsPermissionsCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.GrantGroupNtfsPermissionsCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/SetQuotaLimitOnFolder", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public void SetQuotaLimitOnFolder(string folderPath, string shareNameDrive, QuotaType quotaType, string quotaLimit, int mode, string wmiUserName, string wmiPassword) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/SetQuotaLimitOnFolder", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public void SetQuotaLimitOnFolder(string folderPath, string shareNameDrive, QuotaType quotaType, string quotaLimit, int mode, string wmiUserName, string wmiPassword) { this.Invoke("SetQuotaLimitOnFolder", new object[] { folderPath, shareNameDrive, @@ -1752,10 +1523,9 @@ namespace WebsitePanel.Providers.OS wmiUserName, wmiPassword}); } - + /// - public System.IAsyncResult BeginSetQuotaLimitOnFolder(string folderPath, string shareNameDrive, QuotaType quotaType, string quotaLimit, int mode, string wmiUserName, string wmiPassword, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginSetQuotaLimitOnFolder(string folderPath, string shareNameDrive, QuotaType quotaType, string quotaLimit, int mode, string wmiUserName, string wmiPassword, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("SetQuotaLimitOnFolder", new object[] { folderPath, shareNameDrive, @@ -1765,24 +1535,20 @@ namespace WebsitePanel.Providers.OS wmiUserName, wmiPassword}, callback, asyncState); } - + /// - public void EndSetQuotaLimitOnFolder(System.IAsyncResult asyncResult) - { + public void EndSetQuotaLimitOnFolder(System.IAsyncResult asyncResult) { this.EndInvoke(asyncResult); } - + /// - public void SetQuotaLimitOnFolderAsync(string folderPath, string shareNameDrive, QuotaType quotaType, string quotaLimit, int mode, string wmiUserName, string wmiPassword) - { + public void SetQuotaLimitOnFolderAsync(string folderPath, string shareNameDrive, QuotaType quotaType, string quotaLimit, int mode, string wmiUserName, string wmiPassword) { this.SetQuotaLimitOnFolderAsync(folderPath, shareNameDrive, quotaType, quotaLimit, mode, wmiUserName, wmiPassword, null); } - + /// - public void SetQuotaLimitOnFolderAsync(string folderPath, string shareNameDrive, QuotaType quotaType, string quotaLimit, int mode, string wmiUserName, string wmiPassword, object userState) - { - if ((this.SetQuotaLimitOnFolderOperationCompleted == null)) - { + public void SetQuotaLimitOnFolderAsync(string folderPath, string shareNameDrive, QuotaType quotaType, string quotaLimit, int mode, string wmiUserName, string wmiPassword, object userState) { + if ((this.SetQuotaLimitOnFolderOperationCompleted == null)) { this.SetQuotaLimitOnFolderOperationCompleted = new System.Threading.SendOrPostCallback(this.OnSetQuotaLimitOnFolderOperationCompleted); } this.InvokeAsync("SetQuotaLimitOnFolder", new object[] { @@ -1794,1241 +1560,1144 @@ namespace WebsitePanel.Providers.OS wmiUserName, wmiPassword}, this.SetQuotaLimitOnFolderOperationCompleted, userState); } - - private void OnSetQuotaLimitOnFolderOperationCompleted(object arg) - { - if ((this.SetQuotaLimitOnFolderCompleted != null)) - { + + private void OnSetQuotaLimitOnFolderOperationCompleted(object arg) { + if ((this.SetQuotaLimitOnFolderCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.SetQuotaLimitOnFolderCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetQuotaLimitOnFolder", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public int GetQuotaLimitOnFolder(string folderPath, string wmiUserName, string wmiPassword) - { - object[] results = this.Invoke("GetQuotaLimitOnFolder", new object[] { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetQuotaOnFolder", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public Quota GetQuotaOnFolder(string folderPath, string wmiUserName, string wmiPassword) { + object[] results = this.Invoke("GetQuotaOnFolder", new object[] { folderPath, wmiUserName, wmiPassword}); - return ((int)(results[0])); + return ((Quota)(results[0])); } - + /// - public System.IAsyncResult BeginGetQuotaLimitOnFolder(string folderPath, string wmiUserName, string wmiPassword, System.AsyncCallback callback, object asyncState) - { - return this.BeginInvoke("GetQuotaLimitOnFolder", new object[] { + public System.IAsyncResult BeginGetQuotaOnFolder(string folderPath, string wmiUserName, string wmiPassword, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetQuotaOnFolder", new object[] { folderPath, wmiUserName, wmiPassword}, callback, asyncState); } - + /// - public int EndGetQuotaLimitOnFolder(System.IAsyncResult asyncResult) - { + public Quota EndGetQuotaOnFolder(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult); - return ((int)(results[0])); + return ((Quota)(results[0])); } - + /// - public void GetQuotaLimitOnFolderAsync(string folderPath, string wmiUserName, string wmiPassword) - { - this.GetQuotaLimitOnFolderAsync(folderPath, wmiUserName, wmiPassword, null); + public void GetQuotaOnFolderAsync(string folderPath, string wmiUserName, string wmiPassword) { + this.GetQuotaOnFolderAsync(folderPath, wmiUserName, wmiPassword, null); } - + /// - public void GetQuotaLimitOnFolderAsync(string folderPath, string wmiUserName, string wmiPassword, object userState) - { - if ((this.GetQuotaLimitOnFolderOperationCompleted == null)) - { - this.GetQuotaLimitOnFolderOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetQuotaLimitOnFolderOperationCompleted); + public void GetQuotaOnFolderAsync(string folderPath, string wmiUserName, string wmiPassword, object userState) { + if ((this.GetQuotaOnFolderOperationCompleted == null)) { + this.GetQuotaOnFolderOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetQuotaOnFolderOperationCompleted); } - this.InvokeAsync("GetQuotaLimitOnFolder", new object[] { + this.InvokeAsync("GetQuotaOnFolder", new object[] { folderPath, wmiUserName, - wmiPassword}, this.GetQuotaLimitOnFolderOperationCompleted, userState); + wmiPassword}, this.GetQuotaOnFolderOperationCompleted, userState); } - - private void OnGetQuotaLimitOnFolderOperationCompleted(object arg) - { - if ((this.GetQuotaLimitOnFolderCompleted != null)) - { + + private void OnGetQuotaOnFolderOperationCompleted(object arg) { + if ((this.GetQuotaOnFolderCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); - this.GetQuotaLimitOnFolderCompleted(this, new GetQuotaLimitOnFolderCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + this.GetQuotaOnFolderCompleted(this, new GetQuotaOnFolderCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/DeleteDirectoryRecursive", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public void DeleteDirectoryRecursive(string rootPath) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/DeleteDirectoryRecursive", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public void DeleteDirectoryRecursive(string rootPath) { this.Invoke("DeleteDirectoryRecursive", new object[] { rootPath}); } - + /// - public System.IAsyncResult BeginDeleteDirectoryRecursive(string rootPath, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginDeleteDirectoryRecursive(string rootPath, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("DeleteDirectoryRecursive", new object[] { rootPath}, callback, asyncState); } - + /// - public void EndDeleteDirectoryRecursive(System.IAsyncResult asyncResult) - { + public void EndDeleteDirectoryRecursive(System.IAsyncResult asyncResult) { this.EndInvoke(asyncResult); } - + /// - public void DeleteDirectoryRecursiveAsync(string rootPath) - { + public void DeleteDirectoryRecursiveAsync(string rootPath) { this.DeleteDirectoryRecursiveAsync(rootPath, null); } - + /// - public void DeleteDirectoryRecursiveAsync(string rootPath, object userState) - { - if ((this.DeleteDirectoryRecursiveOperationCompleted == null)) - { + public void DeleteDirectoryRecursiveAsync(string rootPath, object userState) { + if ((this.DeleteDirectoryRecursiveOperationCompleted == null)) { this.DeleteDirectoryRecursiveOperationCompleted = new System.Threading.SendOrPostCallback(this.OnDeleteDirectoryRecursiveOperationCompleted); } this.InvokeAsync("DeleteDirectoryRecursive", new object[] { rootPath}, this.DeleteDirectoryRecursiveOperationCompleted, userState); } - - private void OnDeleteDirectoryRecursiveOperationCompleted(object arg) - { - if ((this.DeleteDirectoryRecursiveCompleted != null)) - { + + private void OnDeleteDirectoryRecursiveOperationCompleted(object arg) { + if ((this.DeleteDirectoryRecursiveCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.DeleteDirectoryRecursiveCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/CheckFileServicesInstallation", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public bool CheckFileServicesInstallation() - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/CheckFileServicesInstallation", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public bool CheckFileServicesInstallation() { object[] results = this.Invoke("CheckFileServicesInstallation", new object[0]); return ((bool)(results[0])); } - + /// - public System.IAsyncResult BeginCheckFileServicesInstallation(System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginCheckFileServicesInstallation(System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("CheckFileServicesInstallation", new object[0], callback, asyncState); } - + /// - public bool EndCheckFileServicesInstallation(System.IAsyncResult asyncResult) - { + public bool EndCheckFileServicesInstallation(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult); return ((bool)(results[0])); } - + /// - public void CheckFileServicesInstallationAsync() - { + public void CheckFileServicesInstallationAsync() { this.CheckFileServicesInstallationAsync(null); } - + /// - public void CheckFileServicesInstallationAsync(object userState) - { - if ((this.CheckFileServicesInstallationOperationCompleted == null)) - { + public void CheckFileServicesInstallationAsync(object userState) { + if ((this.CheckFileServicesInstallationOperationCompleted == null)) { this.CheckFileServicesInstallationOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCheckFileServicesInstallationOperationCompleted); } this.InvokeAsync("CheckFileServicesInstallation", new object[0], this.CheckFileServicesInstallationOperationCompleted, userState); } - - private void OnCheckFileServicesInstallationOperationCompleted(object arg) - { - if ((this.CheckFileServicesInstallationCompleted != null)) - { + + private void OnCheckFileServicesInstallationOperationCompleted(object arg) { + if ((this.CheckFileServicesInstallationCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.CheckFileServicesInstallationCompleted(this, new CheckFileServicesInstallationCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetFolderGraph", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public FolderGraph GetFolderGraph(string path) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetFolderGraph", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public FolderGraph GetFolderGraph(string path) { object[] results = this.Invoke("GetFolderGraph", new object[] { path}); return ((FolderGraph)(results[0])); } - + /// - public System.IAsyncResult BeginGetFolderGraph(string path, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginGetFolderGraph(string path, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("GetFolderGraph", new object[] { path}, callback, asyncState); } - + /// - public FolderGraph EndGetFolderGraph(System.IAsyncResult asyncResult) - { + public FolderGraph EndGetFolderGraph(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult); return ((FolderGraph)(results[0])); } - + /// - public void GetFolderGraphAsync(string path) - { + public void GetFolderGraphAsync(string path) { this.GetFolderGraphAsync(path, null); } - + /// - public void GetFolderGraphAsync(string path, object userState) - { - if ((this.GetFolderGraphOperationCompleted == null)) - { + public void GetFolderGraphAsync(string path, object userState) { + if ((this.GetFolderGraphOperationCompleted == null)) { this.GetFolderGraphOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetFolderGraphOperationCompleted); } this.InvokeAsync("GetFolderGraph", new object[] { path}, this.GetFolderGraphOperationCompleted, userState); } - - private void OnGetFolderGraphOperationCompleted(object arg) - { - if ((this.GetFolderGraphCompleted != null)) - { + + private void OnGetFolderGraphOperationCompleted(object arg) { + if ((this.GetFolderGraphCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.GetFolderGraphCompleted(this, new GetFolderGraphCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/ExecuteSyncActions", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public void ExecuteSyncActions(FileSyncAction[] actions) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/ExecuteSyncActions", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public void ExecuteSyncActions(FileSyncAction[] actions) { this.Invoke("ExecuteSyncActions", new object[] { actions}); } - + /// - public System.IAsyncResult BeginExecuteSyncActions(FileSyncAction[] actions, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginExecuteSyncActions(FileSyncAction[] actions, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("ExecuteSyncActions", new object[] { actions}, callback, asyncState); } - + /// - public void EndExecuteSyncActions(System.IAsyncResult asyncResult) - { + public void EndExecuteSyncActions(System.IAsyncResult asyncResult) { this.EndInvoke(asyncResult); } - + /// - public void ExecuteSyncActionsAsync(FileSyncAction[] actions) - { + public void ExecuteSyncActionsAsync(FileSyncAction[] actions) { this.ExecuteSyncActionsAsync(actions, null); } - + /// - public void ExecuteSyncActionsAsync(FileSyncAction[] actions, object userState) - { - if ((this.ExecuteSyncActionsOperationCompleted == null)) - { + public void ExecuteSyncActionsAsync(FileSyncAction[] actions, object userState) { + if ((this.ExecuteSyncActionsOperationCompleted == null)) { this.ExecuteSyncActionsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnExecuteSyncActionsOperationCompleted); } this.InvokeAsync("ExecuteSyncActions", new object[] { actions}, this.ExecuteSyncActionsOperationCompleted, userState); } - - private void OnExecuteSyncActionsOperationCompleted(object arg) - { - if ((this.ExecuteSyncActionsCompleted != null)) - { + + private void OnExecuteSyncActionsOperationCompleted(object arg) { + if ((this.ExecuteSyncActionsCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.ExecuteSyncActionsCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetInstalledOdbcDrivers", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public string[] GetInstalledOdbcDrivers() - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetInstalledOdbcDrivers", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public string[] GetInstalledOdbcDrivers() { object[] results = this.Invoke("GetInstalledOdbcDrivers", new object[0]); return ((string[])(results[0])); } - + /// - public System.IAsyncResult BeginGetInstalledOdbcDrivers(System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginGetInstalledOdbcDrivers(System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("GetInstalledOdbcDrivers", new object[0], callback, asyncState); } - + /// - public string[] EndGetInstalledOdbcDrivers(System.IAsyncResult asyncResult) - { + public string[] EndGetInstalledOdbcDrivers(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult); return ((string[])(results[0])); } - + /// - public void GetInstalledOdbcDriversAsync() - { + public void GetInstalledOdbcDriversAsync() { this.GetInstalledOdbcDriversAsync(null); } - + /// - public void GetInstalledOdbcDriversAsync(object userState) - { - if ((this.GetInstalledOdbcDriversOperationCompleted == null)) - { + public void GetInstalledOdbcDriversAsync(object userState) { + if ((this.GetInstalledOdbcDriversOperationCompleted == null)) { this.GetInstalledOdbcDriversOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetInstalledOdbcDriversOperationCompleted); } this.InvokeAsync("GetInstalledOdbcDrivers", new object[0], this.GetInstalledOdbcDriversOperationCompleted, userState); } - - private void OnGetInstalledOdbcDriversOperationCompleted(object arg) - { - if ((this.GetInstalledOdbcDriversCompleted != null)) - { + + private void OnGetInstalledOdbcDriversOperationCompleted(object arg) { + if ((this.GetInstalledOdbcDriversCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.GetInstalledOdbcDriversCompleted(this, new GetInstalledOdbcDriversCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetDSNNames", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public string[] GetDSNNames() - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetDSNNames", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public string[] GetDSNNames() { object[] results = this.Invoke("GetDSNNames", new object[0]); return ((string[])(results[0])); } - + /// - public System.IAsyncResult BeginGetDSNNames(System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginGetDSNNames(System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("GetDSNNames", new object[0], callback, asyncState); } - + /// - public string[] EndGetDSNNames(System.IAsyncResult asyncResult) - { + public string[] EndGetDSNNames(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult); return ((string[])(results[0])); } - + /// - public void GetDSNNamesAsync() - { + public void GetDSNNamesAsync() { this.GetDSNNamesAsync(null); } - + /// - public void GetDSNNamesAsync(object userState) - { - if ((this.GetDSNNamesOperationCompleted == null)) - { + public void GetDSNNamesAsync(object userState) { + if ((this.GetDSNNamesOperationCompleted == null)) { this.GetDSNNamesOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetDSNNamesOperationCompleted); } this.InvokeAsync("GetDSNNames", new object[0], this.GetDSNNamesOperationCompleted, userState); } - - private void OnGetDSNNamesOperationCompleted(object arg) - { - if ((this.GetDSNNamesCompleted != null)) - { + + private void OnGetDSNNamesOperationCompleted(object arg) { + if ((this.GetDSNNamesCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.GetDSNNamesCompleted(this, new GetDSNNamesCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetDSN", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public SystemDSN GetDSN(string dsnName) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetDSN", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public SystemDSN GetDSN(string dsnName) { object[] results = this.Invoke("GetDSN", new object[] { dsnName}); return ((SystemDSN)(results[0])); } - + /// - public System.IAsyncResult BeginGetDSN(string dsnName, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginGetDSN(string dsnName, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("GetDSN", new object[] { dsnName}, callback, asyncState); } - + /// - public SystemDSN EndGetDSN(System.IAsyncResult asyncResult) - { + public SystemDSN EndGetDSN(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult); return ((SystemDSN)(results[0])); } - + /// - public void GetDSNAsync(string dsnName) - { + public void GetDSNAsync(string dsnName) { this.GetDSNAsync(dsnName, null); } - + /// - public void GetDSNAsync(string dsnName, object userState) - { - if ((this.GetDSNOperationCompleted == null)) - { + public void GetDSNAsync(string dsnName, object userState) { + if ((this.GetDSNOperationCompleted == null)) { this.GetDSNOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetDSNOperationCompleted); } this.InvokeAsync("GetDSN", new object[] { dsnName}, this.GetDSNOperationCompleted, userState); } - - private void OnGetDSNOperationCompleted(object arg) - { - if ((this.GetDSNCompleted != null)) - { + + private void OnGetDSNOperationCompleted(object arg) { + if ((this.GetDSNCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.GetDSNCompleted(this, new GetDSNCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/CreateDSN", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public void CreateDSN(SystemDSN dsn) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/CreateDSN", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public void CreateDSN(SystemDSN dsn) { this.Invoke("CreateDSN", new object[] { dsn}); } - + /// - public System.IAsyncResult BeginCreateDSN(SystemDSN dsn, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginCreateDSN(SystemDSN dsn, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("CreateDSN", new object[] { dsn}, callback, asyncState); } - + /// - public void EndCreateDSN(System.IAsyncResult asyncResult) - { + public void EndCreateDSN(System.IAsyncResult asyncResult) { this.EndInvoke(asyncResult); } - + /// - public void CreateDSNAsync(SystemDSN dsn) - { + public void CreateDSNAsync(SystemDSN dsn) { this.CreateDSNAsync(dsn, null); } - + /// - public void CreateDSNAsync(SystemDSN dsn, object userState) - { - if ((this.CreateDSNOperationCompleted == null)) - { + public void CreateDSNAsync(SystemDSN dsn, object userState) { + if ((this.CreateDSNOperationCompleted == null)) { this.CreateDSNOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateDSNOperationCompleted); } this.InvokeAsync("CreateDSN", new object[] { dsn}, this.CreateDSNOperationCompleted, userState); } - - private void OnCreateDSNOperationCompleted(object arg) - { - if ((this.CreateDSNCompleted != null)) - { + + private void OnCreateDSNOperationCompleted(object arg) { + if ((this.CreateDSNCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.CreateDSNCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/UpdateDSN", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public void UpdateDSN(SystemDSN dsn) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/UpdateDSN", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public void UpdateDSN(SystemDSN dsn) { this.Invoke("UpdateDSN", new object[] { dsn}); } - + /// - public System.IAsyncResult BeginUpdateDSN(SystemDSN dsn, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginUpdateDSN(SystemDSN dsn, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("UpdateDSN", new object[] { dsn}, callback, asyncState); } - + /// - public void EndUpdateDSN(System.IAsyncResult asyncResult) - { + public void EndUpdateDSN(System.IAsyncResult asyncResult) { this.EndInvoke(asyncResult); } - + /// - public void UpdateDSNAsync(SystemDSN dsn) - { + public void UpdateDSNAsync(SystemDSN dsn) { this.UpdateDSNAsync(dsn, null); } - + /// - public void UpdateDSNAsync(SystemDSN dsn, object userState) - { - if ((this.UpdateDSNOperationCompleted == null)) - { + public void UpdateDSNAsync(SystemDSN dsn, object userState) { + if ((this.UpdateDSNOperationCompleted == null)) { this.UpdateDSNOperationCompleted = new System.Threading.SendOrPostCallback(this.OnUpdateDSNOperationCompleted); } this.InvokeAsync("UpdateDSN", new object[] { dsn}, this.UpdateDSNOperationCompleted, userState); } - - private void OnUpdateDSNOperationCompleted(object arg) - { - if ((this.UpdateDSNCompleted != null)) - { + + private void OnUpdateDSNOperationCompleted(object arg) { + if ((this.UpdateDSNCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.UpdateDSNCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] - [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/DeleteDSN", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public void DeleteDSN(string dsnName) - { + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/DeleteDSN", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public void DeleteDSN(string dsnName) { this.Invoke("DeleteDSN", new object[] { dsnName}); } - + /// - public System.IAsyncResult BeginDeleteDSN(string dsnName, System.AsyncCallback callback, object asyncState) - { + public System.IAsyncResult BeginDeleteDSN(string dsnName, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("DeleteDSN", new object[] { dsnName}, callback, asyncState); } - + /// - public void EndDeleteDSN(System.IAsyncResult asyncResult) - { + public void EndDeleteDSN(System.IAsyncResult asyncResult) { this.EndInvoke(asyncResult); } - + /// - public void DeleteDSNAsync(string dsnName) - { + public void DeleteDSNAsync(string dsnName) { this.DeleteDSNAsync(dsnName, null); } - + /// - public void DeleteDSNAsync(string dsnName, object userState) - { - if ((this.DeleteDSNOperationCompleted == null)) - { + public void DeleteDSNAsync(string dsnName, object userState) { + if ((this.DeleteDSNOperationCompleted == null)) { this.DeleteDSNOperationCompleted = new System.Threading.SendOrPostCallback(this.OnDeleteDSNOperationCompleted); } this.InvokeAsync("DeleteDSN", new object[] { dsnName}, this.DeleteDSNOperationCompleted, userState); } - - private void OnDeleteDSNOperationCompleted(object arg) - { - if ((this.DeleteDSNCompleted != null)) - { + + private void OnDeleteDSNOperationCompleted(object arg) { + if ((this.DeleteDSNCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.DeleteDSNCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + /// - public new void CancelAsync(object userState) - { + [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetDomainDnsRecords", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public DnsRecordInfo[] GetDomainDnsRecords(string domain, string dnsServer, DnsRecordType recordType) { + object[] results = this.Invoke("GetDomainDnsRecords", new object[] { + domain, + dnsServer, + recordType}); + return ((DnsRecordInfo[])(results[0])); + } + + /// + public System.IAsyncResult BeginGetDomainDnsRecords(string domain, string dnsServer, DnsRecordType recordType, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetDomainDnsRecords", new object[] { + domain, + dnsServer, + recordType}, callback, asyncState); + } + + /// + public DnsRecordInfo[] EndGetDomainDnsRecords(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((DnsRecordInfo[])(results[0])); + } + + /// + public void GetDomainDnsRecordsAsync(string domain, string dnsServer, DnsRecordType recordType) { + this.GetDomainDnsRecordsAsync(domain, dnsServer, recordType, null); + } + + /// + public void GetDomainDnsRecordsAsync(string domain, string dnsServer, DnsRecordType recordType, object userState) { + if ((this.GetDomainDnsRecordsOperationCompleted == null)) { + this.GetDomainDnsRecordsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetDomainDnsRecordsOperationCompleted); + } + this.InvokeAsync("GetDomainDnsRecords", new object[] { + domain, + dnsServer, + recordType}, this.GetDomainDnsRecordsOperationCompleted, userState); + } + + private void OnGetDomainDnsRecordsOperationCompleted(object arg) { + if ((this.GetDomainDnsRecordsCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetDomainDnsRecordsCompleted(this, new GetDomainDnsRecordsCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + public new void CancelAsync(object userState) { base.CancelAsync(userState); } } - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void CreatePackageFolderCompletedEventHandler(object sender, CreatePackageFolderCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class CreatePackageFolderCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs - { - + public partial class CreatePackageFolderCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + private object[] results; - - internal CreatePackageFolderCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) - { + + internal CreatePackageFolderCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { this.results = results; } - + /// - public string Result - { - get - { + public string Result { + get { this.RaiseExceptionIfNecessary(); return ((string)(this.results[0])); } } } - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void FileExistsCompletedEventHandler(object sender, FileExistsCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class FileExistsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs - { - + public partial class FileExistsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + private object[] results; - - internal FileExistsCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) - { + + internal FileExistsCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { this.results = results; } - + /// - public bool Result - { - get - { + public bool Result { + get { this.RaiseExceptionIfNecessary(); return ((bool)(this.results[0])); } } } - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void DirectoryExistsCompletedEventHandler(object sender, DirectoryExistsCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class DirectoryExistsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs - { - + public partial class DirectoryExistsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + private object[] results; - - internal DirectoryExistsCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) - { + + internal DirectoryExistsCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { this.results = results; } - + /// - public bool Result - { - get - { + public bool Result { + get { this.RaiseExceptionIfNecessary(); return ((bool)(this.results[0])); } } } - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetFileCompletedEventHandler(object sender, GetFileCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class GetFileCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs - { - + public partial class GetFileCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + private object[] results; - - internal GetFileCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) - { + + internal GetFileCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { this.results = results; } - + /// - public SystemFile Result - { - get - { + public SystemFile Result { + get { this.RaiseExceptionIfNecessary(); return ((SystemFile)(this.results[0])); } } } - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetFilesCompletedEventHandler(object sender, GetFilesCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class GetFilesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs - { - + public partial class GetFilesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + private object[] results; - - internal GetFilesCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) - { + + internal GetFilesCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { this.results = results; } - + /// - public SystemFile[] Result - { - get - { + public SystemFile[] Result { + get { this.RaiseExceptionIfNecessary(); return ((SystemFile[])(this.results[0])); } } } - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetDirectoriesRecursiveCompletedEventHandler(object sender, GetDirectoriesRecursiveCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class GetDirectoriesRecursiveCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs - { - + public partial class GetDirectoriesRecursiveCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + private object[] results; - - internal GetDirectoriesRecursiveCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) - { + + internal GetDirectoriesRecursiveCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { this.results = results; } - + /// - public SystemFile[] Result - { - get - { + public SystemFile[] Result { + get { this.RaiseExceptionIfNecessary(); return ((SystemFile[])(this.results[0])); } } } - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetFilesRecursiveCompletedEventHandler(object sender, GetFilesRecursiveCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class GetFilesRecursiveCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs - { - + public partial class GetFilesRecursiveCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + private object[] results; - - internal GetFilesRecursiveCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) - { + + internal GetFilesRecursiveCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { this.results = results; } - + /// - public SystemFile[] Result - { - get - { + public SystemFile[] Result { + get { this.RaiseExceptionIfNecessary(); return ((SystemFile[])(this.results[0])); } } } - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetFilesRecursiveByPatternCompletedEventHandler(object sender, GetFilesRecursiveByPatternCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class GetFilesRecursiveByPatternCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs - { - + public partial class GetFilesRecursiveByPatternCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + private object[] results; - - internal GetFilesRecursiveByPatternCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) - { + + internal GetFilesRecursiveByPatternCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { this.results = results; } - + /// - public SystemFile[] Result - { - get - { + public SystemFile[] Result { + get { this.RaiseExceptionIfNecessary(); return ((SystemFile[])(this.results[0])); } } } - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetFileBinaryContentCompletedEventHandler(object sender, GetFileBinaryContentCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class GetFileBinaryContentCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs - { - + public partial class GetFileBinaryContentCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + private object[] results; - - internal GetFileBinaryContentCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) - { + + internal GetFileBinaryContentCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { this.results = results; } - + /// - public byte[] Result - { - get - { + public byte[] Result { + get { this.RaiseExceptionIfNecessary(); return ((byte[])(this.results[0])); } } } - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetFileBinaryContentUsingEncodingCompletedEventHandler(object sender, GetFileBinaryContentUsingEncodingCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class GetFileBinaryContentUsingEncodingCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs - { - + public partial class GetFileBinaryContentUsingEncodingCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + private object[] results; - - internal GetFileBinaryContentUsingEncodingCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) - { + + internal GetFileBinaryContentUsingEncodingCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { this.results = results; } - + /// - public byte[] Result - { - get - { + public byte[] Result { + get { this.RaiseExceptionIfNecessary(); return ((byte[])(this.results[0])); } } } - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetFileBinaryChunkCompletedEventHandler(object sender, GetFileBinaryChunkCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class GetFileBinaryChunkCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs - { - + public partial class GetFileBinaryChunkCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + private object[] results; - - internal GetFileBinaryChunkCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) - { + + internal GetFileBinaryChunkCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { this.results = results; } - + /// - public byte[] Result - { - get - { + public byte[] Result { + get { this.RaiseExceptionIfNecessary(); return ((byte[])(this.results[0])); } } } - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetFileTextContentCompletedEventHandler(object sender, GetFileTextContentCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class GetFileTextContentCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs - { - + public partial class GetFileTextContentCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + private object[] results; - - internal GetFileTextContentCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) - { + + internal GetFileTextContentCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { this.results = results; } - + /// - public string Result - { - get - { + public string Result { + get { this.RaiseExceptionIfNecessary(); return ((string)(this.results[0])); } } } - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void CreateFileCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void CreateDirectoryCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void ChangeFileAttributesCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void DeleteFileCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void DeleteFilesCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void DeleteEmptyDirectoriesCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void UpdateFileBinaryContentCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void UpdateFileBinaryContentUsingEncodingCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void AppendFileBinaryContentCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void UpdateFileTextContentCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void MoveFileCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void CopyFileCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void ZipFilesCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void UnzipFilesCompletedEventHandler(object sender, UnzipFilesCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class UnzipFilesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs - { - + public partial class UnzipFilesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + private object[] results; - - internal UnzipFilesCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) - { + + internal UnzipFilesCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { this.results = results; } - + /// - public string[] Result - { - get - { + public string[] Result { + get { this.RaiseExceptionIfNecessary(); return ((string[])(this.results[0])); } } } - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void CreateAccessDatabaseCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetGroupNtfsPermissionsCompletedEventHandler(object sender, GetGroupNtfsPermissionsCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class GetGroupNtfsPermissionsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs - { - + public partial class GetGroupNtfsPermissionsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + private object[] results; - - internal GetGroupNtfsPermissionsCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) - { + + internal GetGroupNtfsPermissionsCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { this.results = results; } - + /// - public UserPermission[] Result - { - get - { + public UserPermission[] Result { + get { this.RaiseExceptionIfNecessary(); return ((UserPermission[])(this.results[0])); } } } - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GrantGroupNtfsPermissionsCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void SetQuotaLimitOnFolderCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] - public delegate void GetQuotaLimitOnFolderCompletedEventHandler(object sender, GetQuotaLimitOnFolderCompletedEventArgs e); - + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + public delegate void GetQuotaOnFolderCompletedEventHandler(object sender, GetQuotaOnFolderCompletedEventArgs e); + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class GetQuotaLimitOnFolderCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs - { - + public partial class GetQuotaOnFolderCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + private object[] results; - - internal GetQuotaLimitOnFolderCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) - { + + internal GetQuotaOnFolderCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { this.results = results; } - + /// - public int Result - { - get - { + public Quota Result { + get { this.RaiseExceptionIfNecessary(); - return ((int)(this.results[0])); + return ((Quota)(this.results[0])); } } } - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void DeleteDirectoryRecursiveCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void CheckFileServicesInstallationCompletedEventHandler(object sender, CheckFileServicesInstallationCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class CheckFileServicesInstallationCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs - { - + public partial class CheckFileServicesInstallationCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + private object[] results; - - internal CheckFileServicesInstallationCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) - { + + internal CheckFileServicesInstallationCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { this.results = results; } - + /// - public bool Result - { - get - { + public bool Result { + get { this.RaiseExceptionIfNecessary(); return ((bool)(this.results[0])); } } } - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetFolderGraphCompletedEventHandler(object sender, GetFolderGraphCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class GetFolderGraphCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs - { - + public partial class GetFolderGraphCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + private object[] results; - - internal GetFolderGraphCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) - { + + internal GetFolderGraphCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { this.results = results; } - + /// - public FolderGraph Result - { - get - { + public FolderGraph Result { + get { this.RaiseExceptionIfNecessary(); return ((FolderGraph)(this.results[0])); } } } - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void ExecuteSyncActionsCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetInstalledOdbcDriversCompletedEventHandler(object sender, GetInstalledOdbcDriversCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class GetInstalledOdbcDriversCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs - { - + public partial class GetInstalledOdbcDriversCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + private object[] results; - - internal GetInstalledOdbcDriversCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) - { + + internal GetInstalledOdbcDriversCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { this.results = results; } - + /// - public string[] Result - { - get - { + public string[] Result { + get { this.RaiseExceptionIfNecessary(); return ((string[])(this.results[0])); } } } - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetDSNNamesCompletedEventHandler(object sender, GetDSNNamesCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class GetDSNNamesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs - { - + public partial class GetDSNNamesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + private object[] results; - - internal GetDSNNamesCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) - { + + internal GetDSNNamesCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { this.results = results; } - + /// - public string[] Result - { - get - { + public string[] Result { + get { this.RaiseExceptionIfNecessary(); return ((string[])(this.results[0])); } } } - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetDSNCompletedEventHandler(object sender, GetDSNCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class GetDSNCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs - { - + public partial class GetDSNCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + private object[] results; - - internal GetDSNCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : - base(exception, cancelled, userState) - { + + internal GetDSNCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { this.results = results; } - + /// - public SystemDSN Result - { - get - { + public SystemDSN Result { + get { this.RaiseExceptionIfNecessary(); return ((SystemDSN)(this.results[0])); } } } - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void CreateDSNCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void UpdateDSNCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); - + /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void DeleteDSNCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + public delegate void GetDomainDnsRecordsCompletedEventHandler(object sender, GetDomainDnsRecordsCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetDomainDnsRecordsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetDomainDnsRecordsCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public DnsRecordInfo[] Result { + get { + this.RaiseExceptionIfNecessary(); + return ((DnsRecordInfo[])(this.results[0])); + } + } + } } diff --git a/WebsitePanel/Sources/WebsitePanel.Server/OperatingSystem.asmx.cs b/WebsitePanel/Sources/WebsitePanel.Server/OperatingSystem.asmx.cs index c082133e..20c80ca2 100644 --- a/WebsitePanel/Sources/WebsitePanel.Server/OperatingSystem.asmx.cs +++ b/WebsitePanel/Sources/WebsitePanel.Server/OperatingSystem.asmx.cs @@ -38,6 +38,9 @@ using Microsoft.Web.Services3; using WebsitePanel.Providers; using WebsitePanel.Providers.OS; using WebsitePanel.Server.Utils; +using WebsitePanel.Providers.DNS; +using WebsitePanel.Providers.DomainLookup; +using System.Collections.Generic; namespace WebsitePanel.Server { @@ -737,5 +740,26 @@ namespace WebsitePanel.Server } } #endregion + + #region Dns + + [WebMethod, SoapHeader("settings")] + public DnsRecordInfo[] GetDomainDnsRecords(string domain, string dnsServer, DnsRecordType recordType) + { + try + { + Log.WriteStart("'{0}' GetDomainDnsRecords", ProviderSettings.ProviderName); + var result = OsProvider.GetDomainDnsRecords(domain, dnsServer, recordType); + Log.WriteEnd("'{0}' GetDomainDnsRecords", ProviderSettings.ProviderName); + return result; + } + catch (Exception ex) + { + Log.WriteError(String.Format("'{0}' GetDomainDnsRecords", ProviderSettings.ProviderName), ex); + throw; + } + } + + #endregion } } diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx index f7a9f87f..46df8d92 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx @@ -5593,4 +5593,7 @@ Error creating rds collection. You need to add at least 1 rds server to collection + + Check MX and NS on DNS servers + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/App_LocalResources/DomainLookupView.ascx.Designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/App_LocalResources/DomainLookupView.ascx.Designer.cs new file mode 100644 index 00000000..a654215f --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/App_LocalResources/DomainLookupView.ascx.Designer.cs @@ -0,0 +1,82 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.33440 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WebsitePanel.Portal.ScheduleTaskControls.App_LocalResources { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class DomainLookupView_ascx { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal DomainLookupView_ascx() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WebsitePanel.Portal.ScheduleTaskControls.App_LocalResources.DomainLookupView.ascx" + + "", typeof(DomainLookupView_ascx).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to DNS Servers. + /// + internal static string lblDnsServers { + get { + return ResourceManager.GetString("lblDnsServers", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Please enter dns servers to check.. + /// + internal static string lblDnsServersHint { + get { + return ResourceManager.GetString("lblDnsServersHint", resourceCulture); + } + } + } +} diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/App_LocalResources/DomainLookupView.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/App_LocalResources/DomainLookupView.ascx.resx new file mode 100644 index 00000000..21183eb3 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/App_LocalResources/DomainLookupView.ascx.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + DNS Servers + + + Please enter dns servers to check. + + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/DomainLookupView.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/DomainLookupView.ascx new file mode 100644 index 00000000..52fb0419 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/DomainLookupView.ascx @@ -0,0 +1,19 @@ +<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="DomainLookupView.ascx.cs" Inherits="WebsitePanel.Portal.ScheduleTaskControls.DomainLookupView" %> + + + + + + + + + +
+ + + +
+ + + +
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/DomainLookupView.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/DomainLookupView.ascx.cs new file mode 100644 index 00000000..089d2a4d --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/DomainLookupView.ascx.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using WebsitePanel.EnterpriseServer; +using WebsitePanel.Portal.UserControls.ScheduleTaskView; + +namespace WebsitePanel.Portal.ScheduleTaskControls +{ + public partial class DomainLookupView : EmptyView + { + private static readonly string DnsServersParameter = "DNS_SERVERS"; + private static readonly string MailToParameter = "MAIL_TO"; + + protected void Page_Load(object sender, EventArgs e) + { + + } + + /// + /// Sets scheduler task parameters on view. + /// + /// Parameters list to be set on view. + public override void SetParameters(ScheduleTaskParameterInfo[] parameters) + { + base.SetParameters(parameters); + + this.SetParameter(this.txtDnsServers, DnsServersParameter); + this.SetParameter(this.txtMailTo, MailToParameter); + } + + /// + /// Gets scheduler task parameters from view. + /// + /// Parameters list filled from view. + public override ScheduleTaskParameterInfo[] GetParameters() + { + ScheduleTaskParameterInfo dnsServers = this.GetParameter(this.txtDnsServers, DnsServersParameter); + ScheduleTaskParameterInfo mailTo = this.GetParameter(this.txtMailTo, MailToParameter); + + return new ScheduleTaskParameterInfo[2] { dnsServers, mailTo }; + } + } +} \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/DomainLookupView.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/DomainLookupView.ascx.designer.cs new file mode 100644 index 00000000..f9c000f5 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/DomainLookupView.ascx.designer.cs @@ -0,0 +1,51 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WebsitePanel.Portal.ScheduleTaskControls { + + + public partial class DomainLookupView { + + /// + /// lblDnsServers control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblDnsServers; + + /// + /// txtDnsServers control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.TextBox txtDnsServers; + + /// + /// lblMailTo control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblMailTo; + + /// + /// txtMailTo control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.TextBox txtMailTo; + } +} diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitePanel.Portal.Modules.csproj b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitePanel.Portal.Modules.csproj index 22deb551..fd1d6356 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitePanel.Portal.Modules.csproj +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitePanel.Portal.Modules.csproj @@ -288,6 +288,18 @@ RDSCollectionUsers.ascx + + True + True + DomainLookupView.ascx.resx + + + DomainLookupView.ascx + ASPXCodeBehind + + + DomainLookupView.ascx + SettingsServiceLevels.ascx ASPXCodeBehind @@ -4234,6 +4246,11 @@ + + ResXFileCodeGenerator + DomainLookupView.ascx.Designer.cs + + From 5c239f09337f1e67c42dfb4b764dd48a6d98c721 Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Tue, 18 Nov 2014 00:59:01 -0800 Subject: [PATCH 02/39] 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 - } -} From 133de4b7472c26bfd5a5c8cc4df5a87ce203d4a9 Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Wed, 19 Nov 2014 05:45:10 -0800 Subject: [PATCH 03/39] Mx and ns scheduled tasks fixes --- WebsitePanel/Database/update_db.sql | 104 ++++++++++++++++++ .../Data/DataProvider.cs | 17 ++- .../SchedulerTasks/DomainLookupViewTask.cs | 58 +++++++--- .../DomainLookup/DomainChanges.cs | 6 +- .../DomainLookup/DomainDnsRecordCompare.cs | 2 + .../DomainLookup/ScheduleTaskEmailTemplate.cs | 14 +++ .../WebsitePanel.Providers.Base.csproj | 1 + .../Windows2012.cs | 34 +++--- 8 files changed, 197 insertions(+), 39 deletions(-) create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/ScheduleTaskEmailTemplate.cs diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index 895c2d3f..e2f2f94a 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -6130,8 +6130,112 @@ REFERENCES [dbo].[Domains] ([DomainID]) ON DELETE CASCADE GO +IF EXISTS (SELECT * FROM SYS.TABLES WHERE name = 'ScheduleTasksEmailTemplates') +DROP TABLE ScheduleTasksEmailTemplates +GO +CREATE TABLE ScheduleTasksEmailTemplates +( + [TaskID] [nvarchar](100) NOT NULL, + [ParameterID] [nvarchar](100) NOT NULL, + [Value] [nvarchar](Max) NULL +) +GO + +IF NOT EXISTS (SELECT * FROM [dbo].[ScheduleTasksEmailTemplates] WHERE [TaskID] = N'SCHEDULE_TASK_DOMAIN_LOOKUP' AND [ParameterID]= N'MAIL_BODY' ) +BEGIN +INSERT [dbo].[ScheduleTasksEmailTemplates] ([TaskID], [ParameterID], [Value]) VALUES (N'SCHEDULE_TASK_DOMAIN_LOOKUP', N'MAIL_BODY', N' + + Account Summary Information + + + +
+ + +
+ MX and NS Information +
+ +

+Hello!, +

+ +

+Please, find below details for mx and ns changes. +

+ + + + + + + + + + + + + [RecordRow] + +
DomainDNSRecord TypeDataBase ValueDns Value
+ + +

+If you have any questions regarding your hosting account, feel free to contact our support department at any time. +

+ +

+Best regards +

+ +
+ +') +END +GO + +IF NOT EXISTS (SELECT * FROM [dbo].[ScheduleTasksEmailTemplates] WHERE [TaskID] = N'SCHEDULE_TASK_DOMAIN_LOOKUP' AND [ParameterID]= N'MAIL_DOMAIN_RECORD' ) +BEGIN +INSERT [dbo].[ScheduleTasksEmailTemplates] ([TaskID], [ParameterID], [Value]) VALUES (N'SCHEDULE_TASK_DOMAIN_LOOKUP', N'MAIL_DOMAIN_RECORD',N' + [domain] + [dns] + [recordType] + [dbRecord] + [dnsRecord] + ') +END +GO + -- Procedures for Domai lookup service +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetScheduleTaskEmailTemplate') +DROP PROCEDURE GetScheduleTaskEmailTemplate +GO +CREATE PROCEDURE [dbo].GetScheduleTaskEmailTemplate +( + @TaskID [nvarchar](100) , + @ParameterID [nvarchar](100) +) +AS +SELECT + [TaskID] , + [ParameterID], + [Value] + FROM [dbo].[ScheduleTasksEmailTemplates] where [TaskID] = @TaskID AND [ParameterID] = @ParameterID +GO IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetAllPackageIds') DROP PROCEDURE GetAllPackageIds diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs index 67597939..ceacc208 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs @@ -4743,9 +4743,9 @@ namespace WebsitePanel.EnterpriseServer ); } - public static IDataReader AddDomainDnsRecord(DnsRecordInfo domainDnsRecord) + public static void AddDomainDnsRecord(DnsRecordInfo domainDnsRecord) { - return SqlHelper.ExecuteReader( + SqlHelper.ExecuteReader( ConnectionString, CommandType.StoredProcedure, "AddDomainDnsRecord", @@ -4757,9 +4757,20 @@ namespace WebsitePanel.EnterpriseServer ); } - public static IDataReader DeleteDomainDnsRecord(int id) + public static IDataReader GetScheduleTaskEmailTemplate(string taskId, string parameterId) { return SqlHelper.ExecuteReader( + ConnectionString, + CommandType.StoredProcedure, + "GetScheduleTaskEmailTemplate", + new SqlParameter("@taskId", taskId), + new SqlParameter("@parameterId", parameterId) + ); + } + + public static void DeleteDomainDnsRecord(int id) + { + SqlHelper.ExecuteReader( ConnectionString, CommandType.StoredProcedure, "DeleteDomainDnsRecord", diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs index 765b3544..42b6bbbd 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs @@ -9,10 +9,15 @@ namespace WebsitePanel.EnterpriseServer { public class DomainLookupViewTask : SchedulerTask { + private static readonly string TaskId = "SCHEDULE_TASK_DOMAIN_LOOKUP"; + // Input parameters: private static readonly string DnsServersParameter = "DNS_SERVERS"; private static readonly string MailToParameter = "MAIL_TO"; + private static readonly string MailBodyTemplateParameter = "MAIL_BODY"; + private static readonly string MailBodyDomainRecordTemplateParameter = "MAIL_DOMAIN_RECORD"; + public override void DoWork() { BackgroundTask topTask = TaskManager.TopTask; @@ -57,6 +62,7 @@ namespace WebsitePanel.EnterpriseServer foreach (var domain in domains) { DomainChanges domainChanges = new DomainChanges(); + domainChanges.Domain = domain.DomainName; var mxRecords = ObjectUtils.CreateListFromDataReader(DataProvider.GetDomainMXRecords(domain.DomainId, DnsRecordType.MX)); var nsRecords = ObjectUtils.CreateListFromDataReader(DataProvider.GetDomainMXRecords(domain.DomainId, DnsRecordType.NS)); @@ -70,8 +76,8 @@ namespace WebsitePanel.EnterpriseServer FillRecordData(dnsMxRecords, domain, dnsServer); FillRecordData(dnsNsRecords, domain, dnsServer); - domainChanges.MxChanges.Add(ApplyDomainRecordsChanges(mxRecords, dnsMxRecords, dnsServer)); - domainChanges.NsChanges.Add(ApplyDomainRecordsChanges(nsRecords, dnsNsRecords, dnsServer)); + domainChanges.DnsChanges.Add(ApplyDomainRecordsChanges(mxRecords, dnsMxRecords, dnsServer)); + domainChanges.DnsChanges.Add(ApplyDomainRecordsChanges(nsRecords, dnsNsRecords, dnsServer)); } domainsChanges.Add(domainChanges); @@ -96,18 +102,16 @@ namespace WebsitePanel.EnterpriseServer foreach (var domainChanges in domainsChanges) { - var firstTimeAdditon = domainChanges.MxChanges.All(x => x.DnsRecordsCompare.All(dns => dns.DbRecord == null)) - && domainChanges.NsChanges.All(x => x.DnsRecordsCompare.All(dns => dns.DbRecord == null)); + var firstTimeAdditon = domainChanges.DnsChanges.All(x => x.DnsRecordsCompare.All(dns => dns.DbRecord == null)); if (firstTimeAdditon) { continue; } - bool mxIsChanged = domainChanges.MxChanges.Any(x => x.DnsRecordsCompare.Any(d => d.Status != DomainDnsRecordStatuses.NotChanged)); - bool nsIsChanged = domainChanges.NsChanges.Any(x => x.DnsRecordsCompare.Any(d => d.Status != DomainDnsRecordStatuses.NotChanged)); + bool isChanged = domainChanges.DnsChanges.Any(x => x.DnsRecordsCompare.Any(d => d.Status != DomainDnsRecordStatuses.NotChanged)); - if (mxIsChanged || nsIsChanged) + if (isChanged) { changedDomains.Add(domainChanges); } @@ -129,13 +133,13 @@ namespace WebsitePanel.EnterpriseServer if (dnsRecord != null) { - domainRecordChanges.DnsRecordsCompare.Add(new DomainDnsRecordCompare { DbRecord = record, DnsRecord = dnsRecord, Status = DomainDnsRecordStatuses.NotChanged }); + domainRecordChanges.DnsRecordsCompare.Add(new DomainDnsRecordCompare { DbRecord = record, DnsRecord = dnsRecord, Type= record.RecordType, Status = DomainDnsRecordStatuses.NotChanged }); dnsRecords.Remove(dnsRecord); } else { - domainRecordChanges.DnsRecordsCompare.Add(new DomainDnsRecordCompare { DbRecord = record, DnsRecord = null, Status = DomainDnsRecordStatuses.Removed }); + domainRecordChanges.DnsRecordsCompare.Add(new DomainDnsRecordCompare { DbRecord = record, DnsRecord = null, Type = record.RecordType, Status = DomainDnsRecordStatuses.Removed }); RemoveRecord(record); @@ -145,7 +149,7 @@ namespace WebsitePanel.EnterpriseServer foreach (var record in dnsRecords) { - domainRecordChanges.DnsRecordsCompare.Add(new DomainDnsRecordCompare { DbRecord = null, DnsRecord = record, Status = DomainDnsRecordStatuses.Added }); + domainRecordChanges.DnsRecordsCompare.Add(new DomainDnsRecordCompare { DbRecord = null, DnsRecord = record, Type = record.RecordType, Status = DomainDnsRecordStatuses.Added }); AddRecord(record); @@ -200,11 +204,13 @@ namespace WebsitePanel.EnterpriseServer { BackgroundTask topTask = TaskManager.TopTask; + var bodyTempalte = ObjectUtils.FillObjectFromDataReader(DataProvider.GetScheduleTaskEmailTemplate(TaskId, MailBodyTemplateParameter)); + var domainRecordTemplate = ObjectUtils.FillObjectFromDataReader(DataProvider.GetScheduleTaskEmailTemplate(TaskId, MailBodyDomainRecordTemplateParameter)); + // input parameters - string mailFrom = "wsp@scheduler.noreply"; + string mailFrom = "wsp-scheduler@noreply.net"; string mailTo = (string)topTask.GetParamValue("MAIL_TO"); - string mailSubject = "WSP MX and NS notification"; - string mailBody = "Hello!

"; + string mailSubject = "MX and NS notification"; if (String.IsNullOrEmpty(mailTo)) { @@ -212,8 +218,32 @@ namespace WebsitePanel.EnterpriseServer } else { + var tableRecords = new List(); + + foreach (var domain in domainsChanges) + { + var changes = domain.DnsChanges; + + foreach (var dnsChanged in changes.Where(x=>x.IsChanged)) + { + foreach (var record in dnsChanged.DnsRecordsCompare.Where(x=>x.Status != DomainDnsRecordStatuses.NotChanged)) + { + var tableRow = Utils.ReplaceStringVariable(domainRecordTemplate.Value, "domain", domain.Domain); + tableRow = Utils.ReplaceStringVariable(tableRow, "dns", dnsChanged.DnsServer); + tableRow = Utils.ReplaceStringVariable(tableRow, "recordType", record.Type.ToString()); + tableRow = Utils.ReplaceStringVariable(tableRow, "dbRecord", record.DbRecord != null ? record.DbRecord.Value : "-"); + tableRow = Utils.ReplaceStringVariable(tableRow, "dnsRecord", record.DnsRecord != null ? record.DnsRecord.Value : "-"); + + tableRecords.Add(tableRow); + } + } + } + + + var mailBody = Utils.ReplaceStringVariable(bodyTempalte.Value, "RecordRow", string.Join(" ", tableRecords)); + // send mail message - // MailHelper.SendMessage(mailFrom, mailTo, mailSubject, mailBody, false); + MailHelper.SendMessage(mailFrom, mailTo, mailSubject, mailBody, true); } } diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainChanges.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainChanges.cs index 5bd9f038..9af977ae 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainChanges.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainChanges.cs @@ -9,13 +9,11 @@ namespace WebsitePanel.Providers.DomainLookup { public string Domain { get; set; } - public List MxChanges { get; set; } - public List NsChanges { get; set; } + public List DnsChanges { get; set; } public DomainChanges() { - MxChanges = new List(); - NsChanges = new List(); + DnsChanges = new List(); } } } diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordCompare.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordCompare.cs index f3663b43..e21d0eac 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordCompare.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordCompare.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using WebsitePanel.Providers.DNS; namespace WebsitePanel.Providers.DomainLookup { @@ -10,5 +11,6 @@ namespace WebsitePanel.Providers.DomainLookup public DnsRecordInfo DbRecord { get; set; } public DnsRecordInfo DnsRecord { get; set; } public DomainDnsRecordStatuses Status { get; set; } + public DnsRecordType Type { get; set; } } } diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/ScheduleTaskEmailTemplate.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/ScheduleTaskEmailTemplate.cs new file mode 100644 index 00000000..1ffa6e23 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/ScheduleTaskEmailTemplate.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WebsitePanel.Providers.DomainLookup +{ + public class ScheduleTaskEmailTemplate + { + public string TaskId { get; set; } + public string ParameterID { get; set; } + public string Value { get; set; } + } +} diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj index 576d7cec..4bd21714 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj @@ -90,6 +90,7 @@ + diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2012/Windows2012.cs b/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2012/Windows2012.cs index c034f52e..c9787fe6 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2012/Windows2012.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2012/Windows2012.cs @@ -322,19 +322,22 @@ namespace WebsitePanel.Providers.OS { foreach (var dnsRecordPs in dnsRecordsPs) { - DnsRecordInfo newRecord; + DnsRecordInfo newRecord = null; switch (recordType) { - case DnsRecordType.MX: { newRecord = CreateMxDnsRecordFromPsObject(dnsRecordPs); break; } - case DnsRecordType.NS: { newRecord = CreateNsDnsRecordFromPsObject(dnsRecordPs); break; } + case DnsRecordType.MX: { newRecord = CreateDnsRecordFromPsObject(dnsRecordPs, "NameExchange"); break; } + case DnsRecordType.NS: { newRecord = CreateDnsRecordFromPsObject(dnsRecordPs, "NameHost"); break; } default: continue; } - newRecord.DnsServer = dnsServer; - newRecord.RecordType = recordType; + if (newRecord != null) + { + newRecord.DnsServer = dnsServer; + newRecord.RecordType = recordType; - records.Add(newRecord); + records.Add(newRecord); + } } } @@ -347,21 +350,16 @@ namespace WebsitePanel.Providers.OS return records.ToArray(); } - private DnsRecordInfo CreateMxDnsRecordFromPsObject(PSObject psObject) + private DnsRecordInfo CreateDnsRecordFromPsObject(PSObject psObject, string valueName) { + if (!psObject.Members.Any(x => x.Name == valueName)) + { + return null; + } + var dnsRecord = new DnsRecordInfo { - Value = Convert.ToString(GetPSObjectProperty(psObject, "NameExchange")), - }; - - return dnsRecord; - } - - private DnsRecordInfo CreateNsDnsRecordFromPsObject(PSObject psObject) - { - var dnsRecord = new DnsRecordInfo - { - Value = Convert.ToString(GetPSObjectProperty(psObject, "NameHost")), + Value = Convert.ToString(GetPSObjectProperty(psObject, valueName)), }; return dnsRecord; From dc99a65d0ed1c521aa0fc87c25f140a4a44dc5a9 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Thu, 20 Nov 2014 18:29:45 -0500 Subject: [PATCH 04/39] Added tag build-2.1.0.468 for changeset 2c486d504ef2 From fd023a347d0a6559be989bb96d7335daaafcb199 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Sat, 22 Nov 2014 18:22:26 -0500 Subject: [PATCH 05/39] Added tag build-2.1.0.469 for changeset f81524a8881e From ac3d594fbdc852a11ad1997bffcccbf88f5345ae Mon Sep 17 00:00:00 2001 From: dev_amdtel Date: Wed, 26 Nov 2014 17:31:04 +0400 Subject: [PATCH 06/39] Exchange Shared and Resource mailboxes --- WebsitePanel/Database/update_db.sql | 69 +++++++++++++++++++ .../Packages/Quotas.cs | 3 + .../ExchangeServerController.cs | 26 ++++++- .../HostedSolution/ExchangeAccountType.cs | 5 +- .../HostedSolution/OrganizationStatistics.cs | 30 ++++++++ .../Exchange2013.cs | 5 ++ .../Exchange2010SP2.cs | 4 ++ .../WebsitePanel_SharedResources.ascx.resx | 13 +++- .../ExchangeCreateMailbox.ascx.resx | 6 ++ .../ExchangeCreateMailbox.ascx.cs | 14 ++++ .../ExchangeMailboxGeneralSettings.ascx.cs | 6 ++ .../ExchangeMailboxPermissions.ascx.cs | 10 +++ .../ExchangeServer/ExchangeMailboxes.ascx | 3 + .../ExchangeServer/ExchangeMailboxes.ascx.cs | 24 +++++++ .../ExchangeMailboxes.ascx.designer.cs | 27 ++++++++ 15 files changed, 239 insertions(+), 6 deletions(-) diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index 355e1325..a339dd9c 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -6082,3 +6082,72 @@ set PropertyValue='%PROGRAMFILES(x86)%\PHP\php.exe' where PropertyName='Php4Path' and ProviderId in(101, 105) GO + +-- Exchange2013 Shared and resource mailboxes + +-- Exchange2013 Shared and resource mailboxes Quotas + +IF NOT EXISTS (SELECT * FROM [dbo].[Quotas] WHERE [QuotaName] = 'Exchange2013.SharedMailboxes') +BEGIN +INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID], [HideQuota]) +VALUES (427, 12, 30, N'Exchange2013.SharedMailboxes', N'Shared Mailboxes per Organization', 2, 0, NULL, NULL) +END +GO + +IF NOT EXISTS (SELECT * FROM [dbo].[Quotas] WHERE [QuotaName] = 'Exchange2013.ResourceMailboxes') +BEGIN +INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID], [HideQuota]) +VALUES (428, 12, 31, N'Exchange2013.ResourceMailboxes', N'Resource Mailboxes per Organization', 2, 0, NULL, NULL) +END +GO + +-- Exchange2013 Shared and resource mailboxes Organization statistics + +ALTER PROCEDURE [dbo].[GetExchangeOrganizationStatistics] +( + @ItemID int +) +AS + +DECLARE @ARCHIVESIZE INT +IF -1 in (SELECT B.ArchiveSizeMB FROM ExchangeAccounts AS A INNER JOIN ExchangeMailboxPlans AS B ON A.MailboxPlanId = B.MailboxPlanId WHERE A.ItemID=@ItemID) +BEGIN + SET @ARCHIVESIZE = -1 +END +ELSE +BEGIN + SET @ARCHIVESIZE = (SELECT SUM(B.ArchiveSizeMB) FROM ExchangeAccounts AS A INNER JOIN ExchangeMailboxPlans AS B ON A.MailboxPlanId = B.MailboxPlanId WHERE A.ItemID=@ItemID) +END + +IF -1 IN (SELECT B.MailboxSizeMB FROM ExchangeAccounts AS A INNER JOIN ExchangeMailboxPlans AS B ON A.MailboxPlanId = B.MailboxPlanId WHERE A.ItemID=@ItemID) +BEGIN +SELECT + (SELECT COUNT(*) FROM ExchangeAccounts WHERE (AccountType = 1 OR AccountType = 5 OR AccountType = 6) AND ItemID = @ItemID) AS CreatedMailboxes, + (SELECT COUNT(*) FROM ExchangeAccounts WHERE (AccountType = 10) AND ItemID = @ItemID) AS CreatedSharedMailboxes, + (SELECT COUNT(*) FROM ExchangeAccounts WHERE (AccountType = 11) AND ItemID = @ItemID) AS CreatedResourceMailboxes, + (SELECT COUNT(*) FROM ExchangeAccounts WHERE AccountType = 2 AND ItemID = @ItemID) AS CreatedContacts, + (SELECT COUNT(*) FROM ExchangeAccounts WHERE AccountType = 3 AND ItemID = @ItemID) AS CreatedDistributionLists, + (SELECT COUNT(*) FROM ExchangeAccounts WHERE AccountType = 4 AND ItemID = @ItemID) AS CreatedPublicFolders, + (SELECT COUNT(*) FROM ExchangeOrganizationDomains WHERE ItemID = @ItemID) AS CreatedDomains, + (SELECT MIN(B.MailboxSizeMB) FROM ExchangeAccounts AS A INNER JOIN ExchangeMailboxPlans AS B ON A.MailboxPlanId = B.MailboxPlanId WHERE A.ItemID=@ItemID) AS UsedDiskSpace, + (SELECT MIN(B.RecoverableItemsSpace) FROM ExchangeAccounts AS A INNER JOIN ExchangeMailboxPlans AS B ON A.MailboxPlanId = B.MailboxPlanId WHERE A.ItemID=@ItemID) AS UsedLitigationHoldSpace, + @ARCHIVESIZE AS UsedArchingStorage +END +ELSE +BEGIN +SELECT + (SELECT COUNT(*) FROM ExchangeAccounts WHERE (AccountType = 1 OR AccountType = 5 OR AccountType = 6) AND ItemID = @ItemID) AS CreatedMailboxes, + (SELECT COUNT(*) FROM ExchangeAccounts WHERE (AccountType = 10) AND ItemID = @ItemID) AS CreatedSharedMailboxes, + (SELECT COUNT(*) FROM ExchangeAccounts WHERE (AccountType = 11) AND ItemID = @ItemID) AS CreatedResourceMailboxes, + (SELECT COUNT(*) FROM ExchangeAccounts WHERE AccountType = 2 AND ItemID = @ItemID) AS CreatedContacts, + (SELECT COUNT(*) FROM ExchangeAccounts WHERE AccountType = 3 AND ItemID = @ItemID) AS CreatedDistributionLists, + (SELECT COUNT(*) FROM ExchangeAccounts WHERE AccountType = 4 AND ItemID = @ItemID) AS CreatedPublicFolders, + (SELECT COUNT(*) FROM ExchangeOrganizationDomains WHERE ItemID = @ItemID) AS CreatedDomains, + (SELECT SUM(B.MailboxSizeMB) FROM ExchangeAccounts AS A INNER JOIN ExchangeMailboxPlans AS B ON A.MailboxPlanId = B.MailboxPlanId WHERE A.ItemID=@ItemID) AS UsedDiskSpace, + (SELECT SUM(B.RecoverableItemsSpace) FROM ExchangeAccounts AS A INNER JOIN ExchangeMailboxPlans AS B ON A.MailboxPlanId = B.MailboxPlanId WHERE A.ItemID=@ItemID) AS UsedLitigationHoldSpace, + @ARCHIVESIZE AS UsedArchingStorage +END + + +RETURN +GO diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Packages/Quotas.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Packages/Quotas.cs index 1d2702c2..2c3ec20d 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Packages/Quotas.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Packages/Quotas.cs @@ -123,6 +123,9 @@ order by rg.groupOrder public const string EXCHANGE2013_ARCHIVINGSTORAGE = "Exchange2013.ArchivingStorage"; // Archiving public const string EXCHANGE2013_ARCHIVINGMAILBOXES = "Exchange2013.ArchivingMailboxes"; + public const string EXCHANGE2013_SHAREDMAILBOXES = "Exchange2013.SharedMailboxes"; // Shared and resource mailboxes + public const string EXCHANGE2013_RESOURCEMAILBOXES = "Exchange2013.ResourceMailboxes"; + public const string MSSQL2000_DATABASES = "MsSQL2000.Databases"; // Databases public const string MSSQL2000_USERS = "MsSQL2000.Users"; // Users public const string MSSQL2000_MAXDATABASESIZE = "MsSQL2000.MaxDatabaseSize"; // Max Database Size diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/ExchangeServer/ExchangeServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/ExchangeServer/ExchangeServerController.cs index d0e48fee..36fc7ed3 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/ExchangeServer/ExchangeServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/ExchangeServer/ExchangeServerController.cs @@ -193,6 +193,9 @@ namespace WebsitePanel.EnterpriseServer stats.UsedDiskSpace = tempStats.UsedDiskSpace; stats.UsedLitigationHoldSpace = tempStats.UsedLitigationHoldSpace; stats.UsedArchingStorage = tempStats.UsedArchingStorage; + + stats.CreatedSharedMailboxes = tempStats.CreatedSharedMailboxes; + stats.CreatedResourceMailboxes = tempStats.CreatedResourceMailboxes; } else { @@ -221,6 +224,9 @@ namespace WebsitePanel.EnterpriseServer stats.UsedDiskSpace += tempStats.UsedDiskSpace; stats.UsedLitigationHoldSpace += tempStats.UsedLitigationHoldSpace; stats.UsedArchingStorage += tempStats.UsedArchingStorage; + + stats.CreatedSharedMailboxes += tempStats.CreatedSharedMailboxes; + stats.CreatedResourceMailboxes += tempStats.CreatedResourceMailboxes; } } } @@ -241,6 +247,9 @@ namespace WebsitePanel.EnterpriseServer stats.AllocatedLitigationHoldSpace = cntx.Quotas[Quotas.EXCHANGE2007_RECOVERABLEITEMSSPACE].QuotaAllocatedValue; stats.AllocatedArchingStorage = cntx.Quotas[Quotas.EXCHANGE2013_ARCHIVINGSTORAGE].QuotaAllocatedValue; + stats.AllocatedSharedMailboxes = cntx.Quotas[Quotas.EXCHANGE2013_SHAREDMAILBOXES].QuotaAllocatedValue; + stats.AllocatedResourceMailboxes = cntx.Quotas[Quotas.EXCHANGE2013_RESOURCEMAILBOXES].QuotaAllocatedValue; + return stats; } catch (Exception ex) @@ -1665,8 +1674,21 @@ namespace WebsitePanel.EnterpriseServer // check mailbox quota OrganizationStatistics orgStats = GetOrganizationStatistics(itemId); - if ((orgStats.AllocatedMailboxes > -1) && (orgStats.CreatedMailboxes >= orgStats.AllocatedMailboxes)) - return BusinessErrorCodes.ERROR_EXCHANGE_MAILBOXES_QUOTA_LIMIT; + if (accountType == ExchangeAccountType.SharedMailbox) + { + if ((orgStats.AllocatedSharedMailboxes > -1) && (orgStats.CreatedSharedMailboxes >= orgStats.AllocatedSharedMailboxes)) + return BusinessErrorCodes.ERROR_EXCHANGE_MAILBOXES_QUOTA_LIMIT; + } + else if (accountType == ExchangeAccountType.ResourceMailbox) + { + if ((orgStats.AllocatedResourceMailboxes > -1) && (orgStats.CreatedResourceMailboxes >= orgStats.AllocatedResourceMailboxes)) + return BusinessErrorCodes.ERROR_EXCHANGE_MAILBOXES_QUOTA_LIMIT; + } + else + { + if ((orgStats.AllocatedMailboxes > -1) && (orgStats.CreatedMailboxes >= orgStats.AllocatedMailboxes)) + return BusinessErrorCodes.ERROR_EXCHANGE_MAILBOXES_QUOTA_LIMIT; + } // place log record diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/ExchangeAccountType.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/ExchangeAccountType.cs index 88b0ac93..23ff9cf6 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/ExchangeAccountType.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/ExchangeAccountType.cs @@ -39,7 +39,8 @@ namespace WebsitePanel.Providers.HostedSolution Equipment = 6, User = 7, SecurityGroup = 8, - DefaultSecurityGroup = 9 - + DefaultSecurityGroup = 9, + SharedMailbox = 10, + ResourceMailbox = 11 } } diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/OrganizationStatistics.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/OrganizationStatistics.cs index b8189f82..6d15b8e2 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/OrganizationStatistics.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/OrganizationStatistics.cs @@ -341,6 +341,36 @@ namespace WebsitePanel.Providers.HostedSolution get { return usedArchingStorage; } set { usedArchingStorage = value; } } + + int allocatedSharedMailboxes; + public int AllocatedSharedMailboxes + { + get { return allocatedSharedMailboxes; } + set { allocatedSharedMailboxes = value; } + } + + int createdSharedMailboxes; + public int CreatedSharedMailboxes + { + get { return createdSharedMailboxes; } + set { createdSharedMailboxes = value; } + } + + int allocatedResourceMailboxes; + public int AllocatedResourceMailboxes + { + get { return allocatedResourceMailboxes; } + set { allocatedResourceMailboxes = value; } + } + + int createdResourceMailboxes; + public int CreatedResourceMailboxes + { + get { return createdResourceMailboxes; } + set { createdResourceMailboxes = value; } + } + + } } diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution.Exchange2013/Exchange2013.cs b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution.Exchange2013/Exchange2013.cs index f318fe29..efb94b97 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution.Exchange2013/Exchange2013.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution.Exchange2013/Exchange2013.cs @@ -1942,6 +1942,11 @@ namespace WebsitePanel.Providers.HostedSolution cmd.Parameters.Add("Equipment"); else if (accountType == ExchangeAccountType.Room) cmd.Parameters.Add("Room"); + else if (accountType == ExchangeAccountType.SharedMailbox) + cmd.Parameters.Add("Shared"); + else if (accountType == ExchangeAccountType.ResourceMailbox) + cmd.Parameters.Add("Equipment"); + result = ExecuteShellCommand(runSpace, cmd); diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2010SP2.cs b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2010SP2.cs index fbb33f3a..c39bdbe0 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2010SP2.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2010SP2.cs @@ -369,6 +369,10 @@ namespace WebsitePanel.Providers.HostedSolution cmd.Parameters.Add("Equipment"); else if (accountType == ExchangeAccountType.Room) cmd.Parameters.Add("Room"); + else if (accountType == ExchangeAccountType.SharedMailbox) + cmd.Parameters.Add("Shared"); + else if (accountType == ExchangeAccountType.ResourceMailbox) + cmd.Parameters.Add("Equipment"); result = ExecuteShellCommand(runSpace, cmd); diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx index 7508ff20..e55192d1 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx @@ -5593,7 +5593,16 @@ Error creating rds collection. You need to add at least 1 rds server to collection - - Error deleting rds server from organization: server is used in rds collection + + Resource Mailboxes per Organization + + + Shared Mailboxes per Organization + + + (resource mailbox) + + + (shared mailbox) \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeCreateMailbox.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeCreateMailbox.ascx.resx index a00e1a83..bf6cdd21 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeCreateMailbox.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeCreateMailbox.ascx.resx @@ -186,4 +186,10 @@ * + + Resource Mailbox + + + Shared Mailbox + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeCreateMailbox.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeCreateMailbox.ascx.cs index b91a1f73..68da7689 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeCreateMailbox.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeCreateMailbox.ascx.cs @@ -101,6 +101,20 @@ namespace WebsitePanel.Portal.ExchangeServer } } + if (cntx.Quotas.ContainsKey(Quotas.EXCHANGE2013_SHAREDMAILBOXES)) + { + if (cntx.Quotas[Quotas.EXCHANGE2013_SHAREDMAILBOXES].QuotaAllocatedValue != 0) + rbMailboxType.Items.Add(new System.Web.UI.WebControls.ListItem(GetLocalizedString("SharedMailbox.Text"), "10")); + + } + + if (cntx.Quotas.ContainsKey(Quotas.EXCHANGE2013_RESOURCEMAILBOXES)) + { + if (cntx.Quotas[Quotas.EXCHANGE2013_RESOURCEMAILBOXES].QuotaAllocatedValue != 0) + rbMailboxType.Items.Add(new System.Web.UI.WebControls.ListItem(GetLocalizedString("ResourceMailbox.Text"), "11")); + + } + rowRetentionPolicy.Visible = Utils.CheckQouta(Quotas.EXCHANGE2013_ALLOWRETENTIONPOLICY, cntx); } diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxGeneralSettings.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxGeneralSettings.ascx.cs index d79d614f..39541c59 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxGeneralSettings.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxGeneralSettings.ascx.cs @@ -183,6 +183,12 @@ namespace WebsitePanel.Portal.ExchangeServer } imgVipUser.Visible = account.IsVIP && Cntx.Groups.ContainsKey(ResourceGroups.ServiceLevels); + if (account.AccountType == ExchangeAccountType.SharedMailbox) + litDisplayName.Text += GetSharedLocalizedString("SharedMailbox.Text"); + + if (account.AccountType == ExchangeAccountType.ResourceMailbox) + litDisplayName.Text += GetSharedLocalizedString("ResourceMailbox.Text"); + } catch (Exception ex) { diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxPermissions.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxPermissions.ascx.cs index 171f26cd..ae3449bf 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxPermissions.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxPermissions.ascx.cs @@ -67,6 +67,16 @@ namespace WebsitePanel.Portal.ExchangeServer litDisplayName.Text = mailbox.DisplayName; sendAsPermission.SetAccounts(mailbox.SendAsAccounts); fullAccessPermission.SetAccounts(mailbox.FullAccessAccounts); + + // get account meta + ExchangeAccount account = ES.Services.ExchangeServer.GetAccount(PanelRequest.ItemID, PanelRequest.AccountID); + + if (account.AccountType == ExchangeAccountType.SharedMailbox) + litDisplayName.Text += GetSharedLocalizedString("SharedMailbox.Text"); + + if (account.AccountType == ExchangeAccountType.ResourceMailbox) + litDisplayName.Text += GetSharedLocalizedString("ResourceMailbox.Text"); + } catch (Exception ex) { diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxes.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxes.ascx index 40852b11..47b87af2 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxes.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxes.ascx @@ -25,6 +25,9 @@
+ + + 10 diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxes.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxes.ascx.cs index 1874f821..80682fe2 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxes.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxes.ascx.cs @@ -60,6 +60,10 @@ namespace WebsitePanel.Portal.ExchangeServer if (!IsPostBack) { + chkMailboxes.Checked = true; + chkResourceMailboxes.Checked = true; + chkSharedMailboxes.Checked = true; + BindStats(); } @@ -246,5 +250,25 @@ namespace WebsitePanel.Portal.ExchangeServer return serviceLevel; } + + protected void chkMailboxes_CheckedChanged(object sender, EventArgs e) + { + List accountTypes = new List(); + + if ((!chkMailboxes.Checked)&&(!chkSharedMailboxes.Checked)&&(!chkResourceMailboxes.Checked)) + chkMailboxes.Checked = true; + + if (chkMailboxes.Checked) + accountTypes.AddRange(new string[] {"1","5","6"}); + + if (chkSharedMailboxes.Checked) + accountTypes.Add("10"); + + if (chkResourceMailboxes.Checked) + accountTypes.Add("11"); + + odsAccountsPaged.SelectParameters["accountTypes"].DefaultValue = string.Join(",", accountTypes); + } + } } \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxes.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxes.ascx.designer.cs index 6e9b50b4..1bde4051 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxes.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxes.ascx.designer.cs @@ -66,6 +66,33 @@ namespace WebsitePanel.Portal.ExchangeServer { /// protected global::System.Web.UI.WebControls.Panel SearchPanel; + /// + /// chkMailboxes control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.CheckBox chkMailboxes; + + /// + /// chkResourceMailboxes control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.CheckBox chkResourceMailboxes; + + /// + /// chkSharedMailboxes control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.CheckBox chkSharedMailboxes; + /// /// ddlPageSize control. /// From 97f4ca1d3c40e0f2ac462b3fb83b08abb38e7e04 Mon Sep 17 00:00:00 2001 From: dev_amdtel Date: Wed, 26 Nov 2014 18:06:44 +0400 Subject: [PATCH 07/39] Exchange Shared and Resource mailboxes fix --- .../ExchangeServer/ExchangeMailboxes.ascx | 2 +- .../ExchangeServer/OrganizationHome.ascx | 18 ++++++++++ .../ExchangeServer/OrganizationHome.ascx.cs | 15 ++++++++ .../OrganizationHome.ascx.designer.cs | 36 +++++++++++++++++++ 4 files changed, 70 insertions(+), 1 deletion(-) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxes.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxes.ascx index 47b87af2..53fc882f 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxes.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxes.ascx @@ -108,7 +108,7 @@ OnSelected="odsAccountsPaged_Selected"> - + diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationHome.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationHome.ascx index 9f9e8388..2817164c 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationHome.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationHome.ascx @@ -89,6 +89,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationHome.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationHome.ascx.cs index 1bc84bc7..1de0159c 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationHome.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationHome.ascx.cs @@ -54,6 +54,14 @@ namespace WebsitePanel.Portal.ExchangeServer lnkMailboxes.NavigateUrl = EditUrl("ItemID", PanelRequest.ItemID.ToString(), "mailboxes", "SpaceID=" + PanelSecurity.PackageId.ToString()); + + lnkSharedMailboxes.NavigateUrl = EditUrl("ItemID", PanelRequest.ItemID.ToString(), "mailboxes", + "SpaceID=" + PanelSecurity.PackageId.ToString()); + + lnkResourceMailboxes.NavigateUrl = EditUrl("ItemID", PanelRequest.ItemID.ToString(), "mailboxes", + "SpaceID=" + PanelSecurity.PackageId.ToString()); + + lnkContacts.NavigateUrl = EditUrl("ItemID", PanelRequest.ItemID.ToString(), "contacts", "SpaceID=" + PanelSecurity.PackageId.ToString()); @@ -77,6 +85,13 @@ namespace WebsitePanel.Portal.ExchangeServer mailboxesStats.QuotaValue = exchangeOrgStats.AllocatedMailboxes; if (exchangeOrgStats.AllocatedMailboxes != -1) mailboxesStats.QuotaAvailable = exchangeTenantStats.AllocatedMailboxes - exchangeTenantStats.CreatedMailboxes; + mailboxesSharedStats.QuotaUsedValue = exchangeOrgStats.CreatedSharedMailboxes; + mailboxesSharedStats.QuotaValue = exchangeOrgStats.AllocatedSharedMailboxes; + if (exchangeOrgStats.AllocatedSharedMailboxes != -1) mailboxesSharedStats.QuotaAvailable = exchangeTenantStats.AllocatedSharedMailboxes - exchangeTenantStats.CreatedSharedMailboxes; + + mailboxesResourceStats.QuotaUsedValue = exchangeOrgStats.CreatedResourceMailboxes; + mailboxesResourceStats.QuotaValue = exchangeOrgStats.AllocatedResourceMailboxes; + if (exchangeOrgStats.AllocatedResourceMailboxes != -1) mailboxesResourceStats.QuotaAvailable = exchangeTenantStats.AllocatedResourceMailboxes - exchangeTenantStats.CreatedResourceMailboxes; if (exchangeTenantStats.AllocatedContacts == 0) this.rowContacts.Style.Add("display", "none"); else diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationHome.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationHome.ascx.designer.cs index 062c57df..2a160e51 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationHome.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationHome.ascx.designer.cs @@ -201,6 +201,42 @@ namespace WebsitePanel.Portal.ExchangeServer { /// protected global::WebsitePanel.Portal.QuotaViewer mailboxesStats; + /// + /// lnkSharedMailboxes control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.HyperLink lnkSharedMailboxes; + + /// + /// mailboxesSharedStats control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::WebsitePanel.Portal.QuotaViewer mailboxesSharedStats; + + /// + /// lnkResourceMailboxes control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.HyperLink lnkResourceMailboxes; + + /// + /// mailboxesResourceStats control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::WebsitePanel.Portal.QuotaViewer mailboxesResourceStats; + /// /// rowContacts control. /// From 074c1f06ba95d50cb6e812cbc5f5d094be3adff6 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Wed, 26 Nov 2014 10:23:00 -0500 Subject: [PATCH 08/39] Added tag build-2.1.0.470 for changeset e19f55e1815a From f54b1b84661934f029a58f60b533a25c02e8e06d Mon Sep 17 00:00:00 2001 From: dev_amdtel Date: Thu, 27 Nov 2014 01:09:56 +0400 Subject: [PATCH 09/39] Exchange Shared and Resource mailboxes : db update fix --- WebsitePanel/Database/update_db.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index a339dd9c..406cde00 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -6090,7 +6090,7 @@ GO IF NOT EXISTS (SELECT * FROM [dbo].[Quotas] WHERE [QuotaName] = 'Exchange2013.SharedMailboxes') BEGIN INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID], [HideQuota]) -VALUES (427, 12, 30, N'Exchange2013.SharedMailboxes', N'Shared Mailboxes per Organization', 2, 0, NULL, NULL) +VALUES (429, 12, 30, N'Exchange2013.SharedMailboxes', N'Shared Mailboxes per Organization', 2, 0, NULL, NULL) END GO From 6b48a2412dee3981e470495c34b5da3816670250 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Wed, 26 Nov 2014 17:33:35 -0500 Subject: [PATCH 10/39] Added tag build-2.1.0.471 for changeset 79f591c9bd09 From b4ce9904b400d4628865f216e37ffaf6877aa375 Mon Sep 17 00:00:00 2001 From: dev_amdtel Date: Thu, 27 Nov 2014 19:10:06 +0400 Subject: [PATCH 11/39] Exchange Shared and Resource mailboxes : AccountType fix --- WebsitePanel/Database/update_db.sql | 8 +++--- .../ExchangeServerController.cs | 2 +- .../HostedSolution/ExchangeAccountType.cs | 3 +-- .../Exchange2013.cs | 2 -- .../Exchange2010SP2.cs | 2 -- .../WebsitePanel_SharedResources.ascx.resx | 7 +++-- .../Default/Images/Exchange/shared_16.gif | Bin 0 -> 226 bytes .../ExchangeCreateMailbox.ascx.resx | 3 --- .../ExchangeCreateMailbox.ascx.cs | 25 +++++++++++------- .../ExchangeMailboxGeneralSettings.ascx.cs | 7 +++-- .../ExchangeMailboxPermissions.ascx.cs | 7 +++-- .../ExchangeServer/ExchangeMailboxes.ascx | 2 +- .../ExchangeServer/ExchangeMailboxes.ascx.cs | 7 +++-- 13 files changed, 43 insertions(+), 32 deletions(-) create mode 100644 WebsitePanel/Sources/WebsitePanel.WebPortal/App_Themes/Default/Images/Exchange/shared_16.gif diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index 406cde00..69079c48 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -6122,9 +6122,9 @@ END IF -1 IN (SELECT B.MailboxSizeMB FROM ExchangeAccounts AS A INNER JOIN ExchangeMailboxPlans AS B ON A.MailboxPlanId = B.MailboxPlanId WHERE A.ItemID=@ItemID) BEGIN SELECT - (SELECT COUNT(*) FROM ExchangeAccounts WHERE (AccountType = 1 OR AccountType = 5 OR AccountType = 6) AND ItemID = @ItemID) AS CreatedMailboxes, + (SELECT COUNT(*) FROM ExchangeAccounts WHERE (AccountType = 1) AND ItemID = @ItemID) AS CreatedMailboxes, (SELECT COUNT(*) FROM ExchangeAccounts WHERE (AccountType = 10) AND ItemID = @ItemID) AS CreatedSharedMailboxes, - (SELECT COUNT(*) FROM ExchangeAccounts WHERE (AccountType = 11) AND ItemID = @ItemID) AS CreatedResourceMailboxes, + (SELECT COUNT(*) FROM ExchangeAccounts WHERE (AccountType = 5 OR AccountType = 6) AND ItemID = @ItemID) AS CreatedResourceMailboxes, (SELECT COUNT(*) FROM ExchangeAccounts WHERE AccountType = 2 AND ItemID = @ItemID) AS CreatedContacts, (SELECT COUNT(*) FROM ExchangeAccounts WHERE AccountType = 3 AND ItemID = @ItemID) AS CreatedDistributionLists, (SELECT COUNT(*) FROM ExchangeAccounts WHERE AccountType = 4 AND ItemID = @ItemID) AS CreatedPublicFolders, @@ -6136,9 +6136,9 @@ END ELSE BEGIN SELECT - (SELECT COUNT(*) FROM ExchangeAccounts WHERE (AccountType = 1 OR AccountType = 5 OR AccountType = 6) AND ItemID = @ItemID) AS CreatedMailboxes, + (SELECT COUNT(*) FROM ExchangeAccounts WHERE (AccountType = 1) AND ItemID = @ItemID) AS CreatedMailboxes, (SELECT COUNT(*) FROM ExchangeAccounts WHERE (AccountType = 10) AND ItemID = @ItemID) AS CreatedSharedMailboxes, - (SELECT COUNT(*) FROM ExchangeAccounts WHERE (AccountType = 11) AND ItemID = @ItemID) AS CreatedResourceMailboxes, + (SELECT COUNT(*) FROM ExchangeAccounts WHERE (AccountType = 5 OR AccountType = 6) AND ItemID = @ItemID) AS CreatedResourceMailboxes, (SELECT COUNT(*) FROM ExchangeAccounts WHERE AccountType = 2 AND ItemID = @ItemID) AS CreatedContacts, (SELECT COUNT(*) FROM ExchangeAccounts WHERE AccountType = 3 AND ItemID = @ItemID) AS CreatedDistributionLists, (SELECT COUNT(*) FROM ExchangeAccounts WHERE AccountType = 4 AND ItemID = @ItemID) AS CreatedPublicFolders, diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/ExchangeServer/ExchangeServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/ExchangeServer/ExchangeServerController.cs index 36fc7ed3..df7c368a 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/ExchangeServer/ExchangeServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/ExchangeServer/ExchangeServerController.cs @@ -1679,7 +1679,7 @@ namespace WebsitePanel.EnterpriseServer if ((orgStats.AllocatedSharedMailboxes > -1) && (orgStats.CreatedSharedMailboxes >= orgStats.AllocatedSharedMailboxes)) return BusinessErrorCodes.ERROR_EXCHANGE_MAILBOXES_QUOTA_LIMIT; } - else if (accountType == ExchangeAccountType.ResourceMailbox) + else if ((accountType == ExchangeAccountType.Room) || (accountType == ExchangeAccountType.Equipment)) { if ((orgStats.AllocatedResourceMailboxes > -1) && (orgStats.CreatedResourceMailboxes >= orgStats.AllocatedResourceMailboxes)) return BusinessErrorCodes.ERROR_EXCHANGE_MAILBOXES_QUOTA_LIMIT; diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/ExchangeAccountType.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/ExchangeAccountType.cs index 23ff9cf6..fdeaa6f2 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/ExchangeAccountType.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/ExchangeAccountType.cs @@ -40,7 +40,6 @@ namespace WebsitePanel.Providers.HostedSolution User = 7, SecurityGroup = 8, DefaultSecurityGroup = 9, - SharedMailbox = 10, - ResourceMailbox = 11 + SharedMailbox = 10 } } diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution.Exchange2013/Exchange2013.cs b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution.Exchange2013/Exchange2013.cs index efb94b97..01909d57 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution.Exchange2013/Exchange2013.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution.Exchange2013/Exchange2013.cs @@ -1944,8 +1944,6 @@ namespace WebsitePanel.Providers.HostedSolution cmd.Parameters.Add("Room"); else if (accountType == ExchangeAccountType.SharedMailbox) cmd.Parameters.Add("Shared"); - else if (accountType == ExchangeAccountType.ResourceMailbox) - cmd.Parameters.Add("Equipment"); result = ExecuteShellCommand(runSpace, cmd); diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2010SP2.cs b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2010SP2.cs index c39bdbe0..7ab55d2e 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2010SP2.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2010SP2.cs @@ -371,8 +371,6 @@ namespace WebsitePanel.Providers.HostedSolution cmd.Parameters.Add("Room"); else if (accountType == ExchangeAccountType.SharedMailbox) cmd.Parameters.Add("Shared"); - else if (accountType == ExchangeAccountType.ResourceMailbox) - cmd.Parameters.Add("Equipment"); result = ExecuteShellCommand(runSpace, cmd); diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx index e55192d1..175a1e7d 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx @@ -5599,10 +5599,13 @@ Shared Mailboxes per Organization - - (resource mailbox) + + (room mailbox) (shared mailbox) + + (equipment mailbox) + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Themes/Default/Images/Exchange/shared_16.gif b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Themes/Default/Images/Exchange/shared_16.gif new file mode 100644 index 0000000000000000000000000000000000000000..17af30c4d8911569fe69630f42df4aeb66833f24 GIT binary patch literal 226 zcmZ?wbhEHb6krfwI3mEHpr9ZiAaMWw{rB(RpFe+o{rdI&{rv?61qlfW0RaK?=g&7V zFmP~i*uQ^&eSJLx1H=FS|A8d&K=CIFBLmPX9gr4~oeZq;3Mzdmne#MO8u(cWbvA5S zE@acd#CzJ)rtxqt1LGW?ezqka12}}#k0*ce(BV=$9`GeWq)7G9S%$(GMSrQ2Jds-@ k3hsI^Sm;RPHC(!qpt_5XGfRb;x2>I*Nw2#{MUlZ80CkpKVy literal 0 HcmV?d00001 diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeCreateMailbox.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeCreateMailbox.ascx.resx index bf6cdd21..0d07fca4 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeCreateMailbox.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeCreateMailbox.ascx.resx @@ -186,9 +186,6 @@ * - - Resource Mailbox - Shared Mailbox diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeCreateMailbox.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeCreateMailbox.ascx.cs index 68da7689..fb1e73da 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeCreateMailbox.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeCreateMailbox.ascx.cs @@ -91,29 +91,36 @@ namespace WebsitePanel.Portal.ExchangeServer if (plans.Length == 0) btnCreate.Enabled = false; + bool allowResourceMailbox = false; + if (cntx.Quotas.ContainsKey(Quotas.EXCHANGE2007_ISCONSUMER)) { if (cntx.Quotas[Quotas.EXCHANGE2007_ISCONSUMER].QuotaAllocatedValue != 1) { locSubscriberNumber.Visible = txtSubscriberNumber.Visible = valRequireSubscriberNumber.Enabled = false; - rbMailboxType.Items.Add(new System.Web.UI.WebControls.ListItem(GetLocalizedString("RoomMailbox.Text"), "5")); - rbMailboxType.Items.Add(new System.Web.UI.WebControls.ListItem(GetLocalizedString("EquipmentMailbox.Text"), "6")); + allowResourceMailbox = true; } } + if (cntx.Quotas.ContainsKey(Quotas.EXCHANGE2013_RESOURCEMAILBOXES)) + { + if (cntx.Quotas[Quotas.EXCHANGE2013_RESOURCEMAILBOXES].QuotaAllocatedValue != 0) + allowResourceMailbox = true; + } + + + if (allowResourceMailbox) + { + rbMailboxType.Items.Add(new System.Web.UI.WebControls.ListItem(GetLocalizedString("RoomMailbox.Text"), "5")); + rbMailboxType.Items.Add(new System.Web.UI.WebControls.ListItem(GetLocalizedString("EquipmentMailbox.Text"), "6")); + } + if (cntx.Quotas.ContainsKey(Quotas.EXCHANGE2013_SHAREDMAILBOXES)) { if (cntx.Quotas[Quotas.EXCHANGE2013_SHAREDMAILBOXES].QuotaAllocatedValue != 0) rbMailboxType.Items.Add(new System.Web.UI.WebControls.ListItem(GetLocalizedString("SharedMailbox.Text"), "10")); - } - if (cntx.Quotas.ContainsKey(Quotas.EXCHANGE2013_RESOURCEMAILBOXES)) - { - if (cntx.Quotas[Quotas.EXCHANGE2013_RESOURCEMAILBOXES].QuotaAllocatedValue != 0) - rbMailboxType.Items.Add(new System.Web.UI.WebControls.ListItem(GetLocalizedString("ResourceMailbox.Text"), "11")); - - } rowRetentionPolicy.Visible = Utils.CheckQouta(Quotas.EXCHANGE2013_ALLOWRETENTIONPOLICY, cntx); } diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxGeneralSettings.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxGeneralSettings.ascx.cs index 39541c59..edc9b2ec 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxGeneralSettings.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxGeneralSettings.ascx.cs @@ -186,8 +186,11 @@ namespace WebsitePanel.Portal.ExchangeServer if (account.AccountType == ExchangeAccountType.SharedMailbox) litDisplayName.Text += GetSharedLocalizedString("SharedMailbox.Text"); - if (account.AccountType == ExchangeAccountType.ResourceMailbox) - litDisplayName.Text += GetSharedLocalizedString("ResourceMailbox.Text"); + if (account.AccountType == ExchangeAccountType.Room) + litDisplayName.Text += GetSharedLocalizedString("RoomMailbox.Text"); + + if (account.AccountType == ExchangeAccountType.Equipment) + litDisplayName.Text += GetSharedLocalizedString("EquipmentMailbox.Text"); } catch (Exception ex) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxPermissions.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxPermissions.ascx.cs index ae3449bf..39eb5c30 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxPermissions.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxPermissions.ascx.cs @@ -74,8 +74,11 @@ namespace WebsitePanel.Portal.ExchangeServer if (account.AccountType == ExchangeAccountType.SharedMailbox) litDisplayName.Text += GetSharedLocalizedString("SharedMailbox.Text"); - if (account.AccountType == ExchangeAccountType.ResourceMailbox) - litDisplayName.Text += GetSharedLocalizedString("ResourceMailbox.Text"); + if (account.AccountType == ExchangeAccountType.Room) + litDisplayName.Text += GetSharedLocalizedString("RoomMailbox.Text"); + + if (account.AccountType == ExchangeAccountType.Equipment) + litDisplayName.Text += GetSharedLocalizedString("EquipmentMailbox.Text"); } catch (Exception ex) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxes.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxes.ascx index 53fc882f..aba30904 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxes.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxes.ascx @@ -108,7 +108,7 @@ OnSelected="odsAccountsPaged_Selected"> - + diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxes.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxes.ascx.cs index 80682fe2..09f60d64 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxes.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxes.ascx.cs @@ -151,6 +151,7 @@ namespace WebsitePanel.Portal.ExchangeServer { ExchangeAccountType accountType = (ExchangeAccountType)accountTypeId; string imgName = "mailbox_16.gif"; + if (accountType == ExchangeAccountType.Contact) imgName = "contact_16.gif"; else if (accountType == ExchangeAccountType.DistributionList) @@ -159,6 +160,8 @@ namespace WebsitePanel.Portal.ExchangeServer imgName = "room_16.gif"; else if (accountType == ExchangeAccountType.Equipment) imgName = "equipment_16.gif"; + else if (accountType == ExchangeAccountType.SharedMailbox) + imgName = "shared_16.gif"; if (vip && cntx.Groups.ContainsKey(ResourceGroups.ServiceLevels)) imgName = "vip_user_16.png"; @@ -259,13 +262,13 @@ namespace WebsitePanel.Portal.ExchangeServer chkMailboxes.Checked = true; if (chkMailboxes.Checked) - accountTypes.AddRange(new string[] {"1","5","6"}); + accountTypes.Add("1"); if (chkSharedMailboxes.Checked) accountTypes.Add("10"); if (chkResourceMailboxes.Checked) - accountTypes.Add("11"); + accountTypes.AddRange(new string[] {"5","6"}); odsAccountsPaged.SelectParameters["accountTypes"].DefaultValue = string.Join(",", accountTypes); } From 9b9ff1f6e2701c3f003c5e6c4337760ad772e592 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Thu, 27 Nov 2014 10:34:06 -0500 Subject: [PATCH 12/39] Added tag build-2.1.0.472 for changeset e2c6a01ca981 From 52a83bfa61ff5b64485ed072a098937eb2ee68a9 Mon Sep 17 00:00:00 2001 From: dev_amdtel Date: Fri, 28 Nov 2014 19:48:26 +0400 Subject: [PATCH 13/39] Exchange Shared and Resource mailboxes : Import.CsvBulk fix --- .../ExchangeImport.cs | 54 ++++++++++++++++--- 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/WebsitePanel/Sources/Tools/WebsitePanel.Import.CsvBulk/ExchangeImport.cs b/WebsitePanel/Sources/Tools/WebsitePanel.Import.CsvBulk/ExchangeImport.cs index 4988105d..1a7a64ab 100644 --- a/WebsitePanel/Sources/Tools/WebsitePanel.Import.CsvBulk/ExchangeImport.cs +++ b/WebsitePanel/Sources/Tools/WebsitePanel.Import.CsvBulk/ExchangeImport.cs @@ -46,7 +46,10 @@ namespace WebsitePanel.Import.CsvBulk { Mailbox, Contact, - User + User, + Room, + Equipment, + SharedMailbox } /// @@ -487,9 +490,12 @@ namespace WebsitePanel.Import.CsvBulk if (!StringEquals(typeName, "Mailbox") && !StringEquals(typeName, "Contact") && - !StringEquals(typeName, "User")) + !StringEquals(typeName, "User")&& + !StringEquals(typeName, "Room")&& + !StringEquals(typeName, "Equipment")&& + !StringEquals(typeName, "SharedMailbox")) { - Log.WriteError(string.Format("Error at line {0}: field 'Type' is invalid. Should be 'Mailbox' or 'Contact' or 'User'", index + 1)); + Log.WriteError(string.Format("Error at line {0}: field 'Type' is invalid. Should be 'Mailbox' or 'Contact' or 'User' or 'Room' or 'Equipment' or 'SharedMailbox'", index + 1)); return false; } @@ -524,7 +530,7 @@ namespace WebsitePanel.Import.CsvBulk if (type == AccountTypes.Mailbox) { //create mailbox using web service - if (!CreateMailbox(index, orgId, displayName, emailAddress, password, firstName, middleName, lastName, + if (!CreateMailbox(ExchangeAccountType.Mailbox, index, orgId, displayName, emailAddress, password, firstName, middleName, lastName, address, city, state, zip, country, jobTitle, company, department, office, businessPhone, fax, homePhone, mobilePhone, pager, webPage, notes, planId)) { @@ -532,6 +538,42 @@ namespace WebsitePanel.Import.CsvBulk } totalMailboxes++; } + if (type == AccountTypes.Room) + { + //create mailbox using web service + if (!CreateMailbox(ExchangeAccountType.Room, index, orgId, displayName, emailAddress, password, firstName, middleName, lastName, + address, city, state, zip, country, jobTitle, company, department, office, + businessPhone, fax, homePhone, mobilePhone, pager, webPage, notes, planId)) + { + return false; + } + totalMailboxes++; + } + if (type == AccountTypes.Equipment) + { + //create mailbox using web service + if (!CreateMailbox(ExchangeAccountType.Equipment, index, orgId, displayName, emailAddress, password, firstName, middleName, lastName, + address, city, state, zip, country, jobTitle, company, department, office, + businessPhone, fax, homePhone, mobilePhone, pager, webPage, notes, planId)) + { + return false; + } + totalMailboxes++; + } + if (type == AccountTypes.SharedMailbox) + { + //create mailbox using web service + if (!CreateMailbox(ExchangeAccountType.SharedMailbox, index, orgId, displayName, emailAddress, password, firstName, middleName, lastName, + address, city, state, zip, country, jobTitle, company, department, office, + businessPhone, fax, homePhone, mobilePhone, pager, webPage, notes, planId)) + { + return false; + } + totalMailboxes++; + } + + + else if (type == AccountTypes.Contact) { //create contact using web service @@ -561,7 +603,7 @@ namespace WebsitePanel.Import.CsvBulk /// /// Creates mailbox /// - private bool CreateMailbox(int index, int orgId, string displayName, string emailAddress, string password, string firstName, string middleName, string lastName, + private bool CreateMailbox(ExchangeAccountType exchangeAccountType, int index, int orgId, string displayName, string emailAddress, string password, string firstName, string middleName, string lastName, string address, string city, string state, string zip, string country, string jobTitle, string company, string department, string office, string businessPhone, string fax, string homePhone, string mobilePhone, string pager, string webPage, string notes, int planId) { @@ -574,7 +616,7 @@ namespace WebsitePanel.Import.CsvBulk //create mailbox //ES.Services.ExchangeServer. string accountName = string.Empty; - int accountId = ES.Services.ExchangeServer.CreateMailbox(orgId, 0, ExchangeAccountType.Mailbox, accountName, displayName, name, domain, password, false, string.Empty, planId, -1, string.Empty, false); + int accountId = ES.Services.ExchangeServer.CreateMailbox(orgId, 0, exchangeAccountType, accountName, displayName, name, domain, password, false, string.Empty, planId, -1, string.Empty, false); if (accountId < 0) { string errorMessage = GetErrorMessage(accountId); From b3b60fd3d7cccf3255434e3e667b76e05c155ed5 Mon Sep 17 00:00:00 2001 From: dev_amdtel Date: Fri, 28 Nov 2014 20:44:50 +0400 Subject: [PATCH 14/39] Exchange Shared and Resource mailboxes : Import.Enterprise fix --- .../OrganizationImporter.cs | 54 ++++++++++++------- 1 file changed, 36 insertions(+), 18 deletions(-) diff --git a/WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/OrganizationImporter.cs b/WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/OrganizationImporter.cs index e8f7f563..72a5aebe 100644 --- a/WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/OrganizationImporter.cs +++ b/WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/OrganizationImporter.cs @@ -780,25 +780,43 @@ namespace WebsitePanel.Import.Enterprise return userId; } int mailboxType = (int)type.Value; + + PropertyValueCollection typeDetails = entry.Properties["msExchRecipientTypeDetails"]; + int mailboxTypeDetails = 0; + if (typeDetails!=null) + { + if (typeDetails.Value != null) + mailboxTypeDetails = (int)typeDetails.Value; + } + ExchangeAccountType accountType = ExchangeAccountType.Undefined; - switch (mailboxType) - { - case 1073741824: - Log.WriteInfo("Account type : mailbox"); - accountType = ExchangeAccountType.Mailbox; - break; - case 7: - Log.WriteInfo("Account type : room"); - accountType = ExchangeAccountType.Room; - break; - case 8: - Log.WriteInfo("Account type : equipment"); - accountType = ExchangeAccountType.Equipment; - break; - default: - Log.WriteInfo("Account type : unknown"); - return userId; - } + + if (mailboxTypeDetails == 4) + { + Log.WriteInfo("Account type : shared mailbox"); + accountType = ExchangeAccountType.SharedMailbox; + } + else + { + switch (mailboxType) + { + case 1073741824: + Log.WriteInfo("Account type : mailbox"); + accountType = ExchangeAccountType.Mailbox; + break; + case 7: + Log.WriteInfo("Account type : room"); + accountType = ExchangeAccountType.Room; + break; + case 8: + Log.WriteInfo("Account type : equipment"); + accountType = ExchangeAccountType.Equipment; + break; + default: + Log.WriteInfo("Account type : unknown"); + return userId; + } + } UpdateExchangeAccount(userId, accountName, accountType, displayName, email, false, string.Empty, samName, string.Empty); From 25fdedd22121faff7641a78164d43564634d0562 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Fri, 28 Nov 2014 12:28:28 -0500 Subject: [PATCH 15/39] Added tag build-2.1.0.473 for changeset a9692feac46f From eb9b311bba406c2f8ab7f2d7f007ee92b2cf93a9 Mon Sep 17 00:00:00 2001 From: Olov Karlsson Date: Sun, 30 Nov 2014 09:13:06 +0100 Subject: [PATCH 16/39] IIS SSL updates, mostly SNI/CCS-related, but also a lot of UI fixes/improvements --- .../SSL/SSLModuleService80.cs | 305 ++++++++++-------- .../WebsitePanel/WebSitesEditSite.ascx.cs | 4 +- .../WebsitePanel/WebsitesSSL.ascx | 18 +- .../WebsitePanel/WebsitesSSL.ascx.cs | 255 ++++++--------- .../WebsitePanel/WebsitesSSL.ascx.designer.cs | 61 ++-- 5 files changed, 299 insertions(+), 344 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/SSL/SSLModuleService80.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/SSL/SSLModuleService80.cs index 01baf828..1395bde6 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/SSL/SSLModuleService80.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/SSL/SSLModuleService80.cs @@ -49,14 +49,6 @@ namespace WebsitePanel.Providers.Web.Iis // We need to move it into "WebHosting" store // Get certificate var servercert = GetServerCertificates(StoreName.My.ToString()).Single(c => c.FriendlyName == cert.FriendlyName); - if (UseCCS) - { - // Delete existing certificate, if any. This is needed to install a new binding - if (CheckCertificate(website)) - { - DeleteCertificate(GetCurrentSiteCertificate(website), website); - } - } // Get certificate data - the one we just added to "Personal" store var storeMy = new X509Store(StoreName.My, StoreLocation.LocalMachine); @@ -64,6 +56,7 @@ namespace WebsitePanel.Providers.Web.Iis X509CertificateCollection existCerts2 = storeMy.Certificates.Find(X509FindType.FindBySerialNumber, servercert.SerialNumber, false); var certData = existCerts2[0].Export(X509ContentType.Pfx); storeMy.Close(); + var x509Cert = new X509Certificate2(certData); if (UseCCS) { @@ -74,7 +67,6 @@ namespace WebsitePanel.Providers.Web.Iis { // Add new certificate to "WebHosting" store var store = new X509Store(CertificateStoreName, StoreLocation.LocalMachine); - var x509Cert = new X509Certificate2(certData); store.Open(OpenFlags.ReadWrite); store.Add(x509Cert); store.Close(); @@ -85,6 +77,7 @@ namespace WebsitePanel.Providers.Web.Iis X509CertificateCollection existCerts = storeMy.Certificates.Find(X509FindType.FindBySerialNumber, servercert.SerialNumber, false); storeMy.Remove((X509Certificate2)existCerts[0]); storeMy.Close(); + // Fill object with certificate data cert.SerialNumber = servercert.SerialNumber; cert.ValidFrom = servercert.ValidFrom; @@ -99,7 +92,7 @@ namespace WebsitePanel.Providers.Web.Iis DeleteCertificate(GetCurrentSiteCertificate(website), website); } - AddBinding(cert, website); + AddBinding(x509Cert, website); } } catch (Exception ex) @@ -113,8 +106,10 @@ namespace WebsitePanel.Providers.Web.Iis public new List GetServerCertificates() { - // Use Web Hosting store - new for IIS 8.0 - return GetServerCertificates(CertificateStoreName); + // Get certificates from both WebHosting and My (Personal) store + var certificates = GetServerCertificates(CertificateStoreName); + certificates.AddRange(GetServerCertificates(StoreName.My.ToString())); + return certificates; } public new SSLCertificate ImportCertificate(WebSite website) @@ -134,12 +129,12 @@ namespace WebsitePanel.Providers.Web.Iis }; } - return certificate; + return certificate ?? (new SSLCertificate {Success = false, Certificate = "No certificate in binding on server, please remove or edit binding"}); } public new SSLCertificate InstallPfx(byte[] certificate, string password, WebSite website) { - SSLCertificate newcert, oldcert = null; + SSLCertificate newcert = null, oldcert = null; // Ensure we perform operations safely and preserve the original state during all manipulations, save the oldcert if one is used if (CheckCertificate(website)) @@ -170,7 +165,7 @@ namespace WebsitePanel.Providers.Web.Iis writer.Write(certData); writer.Flush(); writer.Close(); - // Certificated saved + // Certificate saved } catch (Exception ex) { @@ -189,7 +184,6 @@ namespace WebsitePanel.Providers.Web.Iis try { store.Open(OpenFlags.ReadWrite); - store.Add(x509Cert); } catch (Exception ex) @@ -205,82 +199,38 @@ namespace WebsitePanel.Providers.Web.Iis } // Step 2: Instantiate a copy of new X.509 certificate - try - { - store.Open(OpenFlags.ReadWrite); - newcert = GetSSLCertificateFromX509Certificate2(x509Cert); - } - catch (Exception ex) - { - if (!UseCCS) - { - // Rollback X.509 store changes - store.Remove(x509Cert); - } - // Log error - Log.WriteError("SSLModuleService could not instantiate a copy of new X.509 certificate. All previous changes have been rolled back.", ex); - // Re-throw - throw; - } - finally - { - store.Close(); - } + try + { + newcert = GetSSLCertificateFromX509Certificate2(x509Cert); + } + catch (Exception ex) + { + HandleExceptionAndRollbackCertificate(store, x509Cert, null, website, "SSLModuleService could not instantiate a copy of new X.509 certificate.", ex); + } - if (!UseCCS) - { - // Step 3: Remove old certificate from the web site if any - try - { - store.Open(OpenFlags.ReadWrite); - // Check if certificate already exists, remove it. - if (oldcert != null) - DeleteCertificate(oldcert, website); - } - catch (Exception ex) - { - // Rollback X.509 store changes - store.Remove(x509Cert); - // Log the error - Log.WriteError( - String.Format("SSLModuleService could not remove existing certificate from '{0}' web site. All changes have been rolled back.", website.Name), ex); - // Re-throw - throw; - } - finally - { - store.Close(); - } - } + // Step 3: Remove old certificate from the web site if any + try + { + // Check if certificate already exists, remove it. + if (oldcert != null) + { + DeleteCertificate(oldcert, website); + } + } + catch (Exception ex) + { + HandleExceptionAndRollbackCertificate(store, x509Cert, null, website, string.Format("SSLModuleService could not remove existing certificate from '{0}' web site.", website.Name), ex); + } - // Step 4: Register new certificate with HTTPS binding on the web site - try - { - //if (!UseCCS) - //{ - // store.Open(OpenFlags.ReadWrite); - //} - - AddBinding(newcert, website); - } - catch (Exception ex) - { - if (!UseCCS) - { - // Install old certificate back if any - store.Open(OpenFlags.ReadWrite); - if (oldcert != null) - InstallCertificate(oldcert, website); - // Rollback X.509 store changes - store.Remove(x509Cert); - store.Close(); - } - // Log the error - Log.WriteError( - String.Format("SSLModuleService could not add new X.509 certificate to '{0}' web site. All changes have been rolled back.", website.Name), ex); - // Re-throw - throw; - } + // Step 4: Register new certificate with HTTPS binding on the web site + try + { + AddBinding(x509Cert, website); + } + catch (Exception ex) + { + HandleExceptionAndRollbackCertificate(store, x509Cert, oldcert, website, String.Format("SSLModuleService could not add new X.509 certificate to '{0}' web site.", website.Name), ex); + } return newcert; } @@ -319,32 +269,44 @@ namespace WebsitePanel.Providers.Web.Iis } - public new void AddBinding(SSLCertificate certificate, WebSite website) + public void AddBinding(X509Certificate2 certificate, WebSite website) { using (var srvman = GetServerManager()) { - var store = new X509Store(CertificateStoreName, StoreLocation.LocalMachine); - store.Open(OpenFlags.ReadOnly); - // Look for dedicated ip var dedicatedIp = SiteHasBindingWithDedicatedIp(srvman, website); - var bindingInformation = string.Format("{0}:443:{1}", website.SiteIPAddress, dedicatedIp ? "" : certificate.Hostname); + // Look for all the hostnames this certificate is valid for if we are using SNI + var hostNames = new List(); - Binding siteBinding = UseCCS ? - srvman.Sites[website.SiteId].Bindings.Add(bindingInformation, "https") : - srvman.Sites[website.SiteId].Bindings.Add(bindingInformation, certificate.Hash, store.Name); + if (!dedicatedIp) + { + hostNames.AddRange(from extension in certificate.Extensions.Cast() where extension.Oid.FriendlyName == "Subject Alternative Name" select extension.Format(true)); + } + + if (!hostNames.Any()) + { + hostNames.Add(certificate.GetNameInfo(X509NameType.SimpleName, false)); + } + + // For every hostname (only one if using old school dedicated IP binding) + foreach (var hostName in hostNames) + { + var bindingInformation = string.Format("{0}:443:{1}", website.SiteIPAddress ?? "*", dedicatedIp ? "" : hostName); + + Binding siteBinding = UseCCS ? + srvman.Sites[website.SiteId].Bindings.Add(bindingInformation, "https") : + srvman.Sites[website.SiteId].Bindings.Add(bindingInformation, certificate.GetCertHash(), CertificateStoreName); - if (UseSNI) - { - siteBinding.SslFlags |= SslFlags.Sni; + if (UseSNI && !dedicatedIp) + { + siteBinding.SslFlags |= SslFlags.Sni; + } + if (UseCCS) + { + siteBinding.SslFlags |= SslFlags.CentralCertStore; + } } - if (UseCCS) - { - siteBinding.SslFlags |= SslFlags.CentralCertStore; - } - - store.Close(); srvman.CommitChanges(); } @@ -352,7 +314,9 @@ namespace WebsitePanel.Providers.Web.Iis public new ResultObject DeleteCertificate(SSLCertificate certificate, WebSite website) { - var result = new ResultObject() { IsSuccess = true }; + // This method removes all https bindings and all certificates associated with them. + // Old implementation (IIS70) removed a single binding (there could not be more than one) and the first certificate that matched via serial number + var result = new ResultObject { IsSuccess = true }; if (certificate == null) { @@ -361,35 +325,70 @@ namespace WebsitePanel.Providers.Web.Iis try { - // Regardless of the CCS setting on the server, we try to find and remove the certificate from both CCS and WebHosting Store. - // This is because we don't know how this was set when the certificate was added + var certificatesAndStoreNames = new List>(); - if (!string.IsNullOrWhiteSpace(CCSUncPath) && Directory.Exists(CCSUncPath)) + // User servermanager to get aLL SSL-bindings on this website and try to remove the certificates used + using (var srvman = GetServerManager()) { - // This is where it will be if CCS is used - var path = GetCCSPath(certificate.Hostname); - if (File.Exists(path)) + + var site = srvman.Sites[website.Name]; + var bindings = site.Bindings.Where(b => b.Protocol == "https"); + + foreach (Binding binding in bindings.ToList()) { - File.Delete(path); + if (binding.SslFlags.HasFlag(SslFlags.CentralCertStore)) + { + if (!string.IsNullOrWhiteSpace(CCSUncPath) && Directory.Exists(CCSUncPath)) + { + // This is where it will be if CCS is used + var path = GetCCSPath(certificate.Hostname); + if (File.Exists(path)) + { + File.Delete(path); + } + + // If binding with hostname, also try to delete with the hostname in the binding + // This is because if SNI is used, several bindings are created for every valid name in the cerificate, but only one name exists in the SSLCertificate + if (!string.IsNullOrEmpty(binding.Host)) + { + path = GetCCSPath(binding.Host); + if (File.Exists(path)) + { + File.Delete(path); + } + } + } + } + else + { + var certificateAndStoreName = new Tuple(binding.CertificateStoreName, binding.CertificateHash); + + if (!string.IsNullOrEmpty(binding.CertificateStoreName) && !certificatesAndStoreNames.Contains(certificateAndStoreName)) + { + certificatesAndStoreNames.Add(certificateAndStoreName); + } + } + + // Remove binding from site + site.Bindings.Remove(binding); } - } - // Now delete all certs with the same serialnumber in WebHosting Store - var store = new X509Store(CertificateStoreName, StoreLocation.LocalMachine); - store.Open(OpenFlags.MaxAllowed); + srvman.CommitChanges(); - var certs = store.Certificates.Find(X509FindType.FindBySerialNumber, certificate.SerialNumber, false); - foreach (var cert in certs) - { - store.Remove(cert); - } + foreach (var certificateAndStoreName in certificatesAndStoreNames) + { + // Delete all certs with the same serialnumber in Store + var store = new X509Store(certificateAndStoreName.Item1, StoreLocation.LocalMachine); + store.Open(OpenFlags.MaxAllowed); - store.Close(); + var certs = store.Certificates.Find(X509FindType.FindByThumbprint, BitConverter.ToString(certificateAndStoreName.Item2).Replace("-", ""), false); + foreach (var cert in certs) + { + store.Remove(cert); + } - // Remove binding from site - if (CheckCertificate(website)) - { - RemoveBinding(certificate, website); + store.Close(); + } } } catch (Exception ex) @@ -409,9 +408,7 @@ namespace WebsitePanel.Providers.Web.Iis var site = srvman.Sites[website.SiteId]; var sslBinding = site.Bindings.First(b => b.Protocol == "https"); - X509Certificate2 cert = null; - - // If the certificate is in the central store + // If the certificate is in the central store if (((SslFlags)Enum.Parse(typeof(SslFlags), sslBinding["sslFlags"].ToString())).HasFlag(SslFlags.CentralCertStore)) { // Let's try to match binding host and certificate filename @@ -423,23 +420,19 @@ namespace WebsitePanel.Providers.Web.Iis // Read certificate data from file var certData = new byte[fileStream.Length]; fileStream.Read(certData, 0, (int) fileStream.Length); - cert = new X509Certificate2(certData, CCSCommonPassword); + var cert = new X509Certificate2(certData, CCSCommonPassword); fileStream.Close(); + return GetSSLCertificateFromX509Certificate2(cert); } } else { - var currentHash = sslBinding.CertificateHash; - var store = new X509Store(CertificateStoreName, StoreLocation.LocalMachine); - store.Open(OpenFlags.ReadOnly); - - cert = store.Certificates.Cast().Single(c => Convert.ToBase64String(c.GetCertHash()) == Convert.ToBase64String(currentHash)); - - store.Close(); + var currentHash = Convert.ToBase64String(sslBinding.CertificateHash); + return GetServerCertificates().FirstOrDefault(c => Convert.ToBase64String(c.Hash) == currentHash); } - - return GetSSLCertificateFromX509Certificate2(cert); } + + return null; } private static List GetServerCertificates(string certificateStoreName) @@ -504,5 +497,33 @@ namespace WebsitePanel.Providers.Web.Iis return false; } } + + private void HandleExceptionAndRollbackCertificate(X509Store store, X509Certificate2 x509Cert, SSLCertificate oldCert, WebSite webSite, string errorMessage, Exception ex) + { + if (!UseCCS) + { + try + { + // Rollback X.509 store changes + store.Open(OpenFlags.ReadWrite); + store.Remove(x509Cert); + store.Close(); + } + catch (Exception) + { + Log.WriteError("SSLModuleService could not rollback and remove certificate from store", ex); + } + + // Install old certificate back if any + if (oldCert != null) + InstallCertificate(oldCert, webSite); + } + + // Log the error + Log.WriteError(errorMessage + " All changes have been rolled back.", ex); + + // Re-throw + throw ex; + } } } diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx.cs index 5d5a954d..2b53d79e 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx.cs @@ -109,7 +109,7 @@ namespace WebsitePanel.Portal { var filteredTabs = TabsList.FilterTabsByHostingPlanQuotas(PackageId).ToList(); - // remove "SSL" tab for a site with dynamic IP + // remove "SSL" tab for a site with dynamic IP and not SNI enabled var sslTab = filteredTabs.SingleOrDefault(t => t.Id == "SSL"); if (!AllowSsl && sslTab != null) filteredTabs.Remove(sslTab); @@ -1071,6 +1071,7 @@ namespace WebsitePanel.Portal sharedIP.Visible = false; switchToDedicatedIP.Visible = true; + WebsitesSSLControl.InstalledCert = null; } protected void cmdSwitchToSharedIP_Click(object sender, EventArgs e) @@ -1090,6 +1091,7 @@ namespace WebsitePanel.Portal dlTabs.SelectedIndex = 0; + WebsitesSSLControl.InstalledCert = null; } catch (Exception ex) { diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitesSSL.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitesSSL.ascx index 93b38d0f..b7c51011 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitesSSL.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitesSSL.ascx @@ -141,6 +141,8 @@

+
@@ -151,13 +153,7 @@ - - - - - - - + @@ -173,7 +169,7 @@ + ControlToValidate="txtCompany" ErrorMessage="*" /> @@ -196,7 +192,7 @@ + ControlToValidate="txtState" Display="Dynamic" ErrorMessage="*" /> @@ -204,7 +200,7 @@ + ControlToValidate="txtCity" ErrorMessage="*" />
@@ -254,6 +250,8 @@
+ diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitesSSL.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitesSSL.ascx.cs index 91e97c36..d6897098 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitesSSL.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitesSSL.ascx.cs @@ -135,10 +135,18 @@ namespace WebsitePanel.Portal } } - private void BindListOfAvailableSslDomains(string websiteName, string domainName) - { - rbSiteCertificate.Text = websiteName; - rbDomainCertificate.Text = "*." + domainName; + private void BindListOfAvailableSslDomains(string defaultBindingName) + { + var domains = ES.Services.WebServers.GetWebSitePointers(SiteId).ToList(); + + // If no pointers at all, add website default domain + if (domains.All(d => d.DomainName != defaultBindingName)) + { + domains.Add(new DomainInfo() { DomainName = defaultBindingName, IsDomainPointer = false}); + } + + ddlbSiteCertificate.Items.AddRange(domains.Select(d => new ListItem(d.DomainName)).ToArray()); + ddlbSiteCertificate.Items.AddRange(domains.Where(d => !d.IsDomainPointer).Select(d => new ListItem("*." + d.DomainName)).ToArray()); } public void BindWebItem(WebVirtualDirectory item) @@ -148,106 +156,10 @@ namespace WebsitePanel.Portal // Skip processing virtual directories, otherwise we will likely run into a trouble if (webSite == null) return; - // - bool hasactive = false; - bool haspending = false; - SiteId = item.Id; - // - try - { - SSLCertificate[] certificates = ES.Services.WebServers.GetCertificatesForSite(item.Id); + SiteId = item.Id; - SSLNotInstalled.Visible = true; - - DomainInfo[] domains = ES.Services.Servers.GetDomains(PanelSecurity.PackageId); - string zoneName = string.Empty; - foreach (DomainInfo d in domains) - { - if (d.WebSiteId == SiteId) - { - zoneName = d.ZoneName; - break; - } - } - - // - BindListOfAvailableSslDomains(webSite.Name, zoneName); - - if (certificates.Length > 0) - { - foreach (SSLCertificate cert in certificates) - { - if (cert.Installed) - { - hasactive = true; - } - else - { - haspending = true; - } - } - } - - // Web site has active certificate - if (hasactive) - { - tabInstalled.Visible = true; - tabInstalled.Enabled = true; - tabInstalled.HeaderText = GetLocalizedString("tabInstalled.Text"); - - InstalledCert = (from c in certificates - where c.Installed == true - select c).SingleOrDefault(); - // - BindCertificateFields(); - // Attention please, the certificate is about to expire! - TimeSpan daystoexp = DateTime.Now - InstalledCert.ExpiryDate; - if (daystoexp.Days < 30) - { - lblInstalledExpiration.ForeColor = System.Drawing.Color.Red; - } - // Put some data to the ViewState - ViewState["SSLID"] = InstalledCert.id; - ViewState["SSLSerial"] = InstalledCert.SerialNumber; - // - if (!haspending) - { - btnShowpnlCSR.Attributes.Add("OnClientClick", "return confirm('" + GetLocalizedString("btnInstallConfirm.Text") + "');"); - btnShowUpload.Attributes.Add("OnClientClick", "return confirm('" + GetLocalizedString("btnInstallConfirm.Text") + "');"); - SSLNotInstalledHeading.Text = GetLocalizedString("SSLInstalledNewHeading.Text"); - SSLNotInstalledDescription.Text = GetLocalizedString("SSLInstalledNewDescription.Text"); - } - } - - // Web site has pending certificate - if (haspending) - { - tabCSR.HeaderText = GetLocalizedString("tabPendingCertificate.HeaderText");//"Pending Certificate"; - SSLNotInstalled.Visible = false; - pnlInstallCertificate.Visible = true; - SSLCertificate pending = (from c in certificates - where c.Installed == false - select c).Single(); - ViewState["CSRID"] = pending.id; - txtCSR.Text = pending.CSR; - txtCSR.Attributes.Add("onfocus", "this.select();"); - if (InstalledCert != null) - { - btnInstallCertificate.Attributes.Add("OnClientClick", "return confirm('" + GetLocalizedString("btnInstallConfirm.Text") + "');"); - } - } - - if (!hasactive && ES.Services.WebServers.CheckCertificate(item.Id).IsSuccess) - { - SSLNotInstalled.Visible = false; - SSLImport.Visible = true; - } - } - catch (Exception ex) - { - messageBox.ShowErrorMessage("WEB_GET_SSL", ex); - } + RefreshControlLayout(); } protected void btnShowpnlCSR_click(object sender, EventArgs e) @@ -271,7 +183,8 @@ namespace WebsitePanel.Portal L={3}, S={4}, C={5}", - rbSiteCertificate.Checked ? rbSiteCertificate.Text : rbDomainCertificate.Text, + //rbSiteCertificate.Checked ? rbSiteCertificate.Text : rbDomainCertificate.Text, + ddlbSiteCertificate.SelectedValue, txtCompany.Text, txtOU.Text, txtCity.Text, @@ -279,7 +192,7 @@ namespace WebsitePanel.Portal lstCountries.SelectedValue); SSLCertificate certificate = new SSLCertificate(); - certificate.Hostname = rbSiteCertificate.Checked ? rbSiteCertificate.Text : rbDomainCertificate.Text; + certificate.Hostname = ddlbSiteCertificate.SelectedValue; //rbSiteCertificate.Checked ? rbSiteCertificate.Text : rbDomainCertificate.Text; certificate.DistinguishedName = distinguishedName; certificate.CSRLength = Convert.ToInt32(lstBits.SelectedValue); certificate.Organisation = txtCompany.Text; @@ -336,7 +249,7 @@ namespace WebsitePanel.Portal OU={2}, L={3}, S={4}, - C={5}", rbSiteCertificate.Checked ? rbSiteCertificate.Text : rbDomainCertificate.Text, + C={5}", ddlbSiteCertificate.SelectedValue, //rbSiteCertificate.Checked ? rbSiteCertificate.Text : rbDomainCertificate.Text, txtCompany.Text, txtOU.Text, txtCity.Text, @@ -344,7 +257,7 @@ namespace WebsitePanel.Portal lstCountries.SelectedValue); SSLCertificate certificate = new SSLCertificate(); - certificate.Hostname = rbSiteCertificate.Checked ? rbSiteCertificate.Text : rbDomainCertificate.Text; + certificate.Hostname = ddlbSiteCertificate.SelectedValue; //rbSiteCertificate.Checked ? rbSiteCertificate.Text : rbDomainCertificate.Text; certificate.DistinguishedName = distinguishedName; certificate.CSRLength = Convert.ToInt32(lstBits.SelectedValue); certificate.Organisation = txtCompany.Text; @@ -369,7 +282,7 @@ namespace WebsitePanel.Portal pnlCSR.Visible = false; ViewState["CSRID"] = certificate.id; txtCSR.Attributes.Add("onfocus", "this.select();"); - RefreshControlLayout(PanelRequest.ItemID); + RefreshControlLayout(); TabContainer1.ActiveTab = TabContainer1.Tabs[0]; messageBox.ShowSuccessMessage(WEB_GEN_CSR); } @@ -402,7 +315,7 @@ namespace WebsitePanel.Portal // TabContainer1.ActiveTab = tabInstalled; - RefreshControlLayout(webSiteId); + RefreshControlLayout(); } protected void btnInstallPFX_Click(object sender, EventArgs e) @@ -428,13 +341,14 @@ namespace WebsitePanel.Portal if (result.IsSuccess.Equals(false)) { messageBox.ShowErrorMessage("WEB_INSTALL_CSR"); - return; + RefreshControlLayout(); + return; } // messageBox.ShowSuccessMessage("WEB_INSTALL_CSR"); SSLNotInstalled.Visible = false; tabInstalled.Visible = true; - RefreshControlLayout(SiteId); + RefreshControlLayout(); } protected void BindCertificateFields() @@ -560,43 +474,43 @@ namespace WebsitePanel.Portal if (!result.IsSuccess) { messageBox.ShowErrorMessage("WEB_INSTALL_CSR"); + RefreshControlLayout(); return; } // Show success message and display appropriate controls messageBox.ShowSuccessMessage("WEB_INSTALL_CSR"); - SSLNotInstalled.Visible = false; - tabInstalled.Visible = true; - // - RefreshControlLayout(webSiteId); + + RefreshControlLayout(); } - protected void RefreshControlLayout(int webSiteId) + public void RefreshControlLayout() { - bool hasActiveCert = false; - bool hasPendingCert = false; - // + // + bool hasactive = false; + bool haspending = false; + try { - SSLCertificate[] certificates = ES.Services.WebServers.GetCertificatesForSite(webSiteId); + var webSite = ES.Services.WebServers.GetWebSite(SiteId); - WebSite item = ES.Services.WebServers.GetWebSite(webSiteId); + // Get all certificate infos stored in database + SSLCertificate[] certificates = ES.Services.WebServers.GetCertificatesForSite(SiteId); - SSLNotInstalled.Visible = true; - // + // Set some default visible values, states and texts + tabInstalled.Visible = false; + tabInstalled.Enabled = false; + SSLNotInstalled.Visible = true; + SSLImport.Visible = false; + pnlCSR.Visible = false; + pnlShowUpload.Visible = false; + pnlInstallCertificate.Visible = false; - DomainInfo[] domains = ES.Services.Servers.GetDomains(PanelSecurity.PackageId); - string zoneName = string.Empty; - foreach (DomainInfo d in domains) - { - if (d.WebSiteId == item.Id) - { - zoneName = d.ZoneName; - break; - } - } + btnShowpnlCSR.Attributes.Remove("OnClientClick"); + btnShowUpload.Attributes.Remove("OnClientClick"); + SSLNotInstalledHeading.Text = GetLocalizedString("SSLNotInstalledHeading.Text"); + SSLNotInstalledDescription.Text = GetLocalizedString("SSLNotInstalledDescription.Text"); - // - BindListOfAvailableSslDomains(item.Name, zoneName); + BindListOfAvailableSslDomains(webSite.Name); if (certificates.Length > 0) { @@ -604,16 +518,17 @@ namespace WebsitePanel.Portal { if (cert.Installed) { - hasActiveCert = true; + hasactive = true; } else { - hasPendingCert = true; + haspending = true; } } } - if (hasActiveCert) + // Web site has active certificate + if (hasactive) { tabInstalled.Visible = true; tabInstalled.Enabled = true; @@ -622,18 +537,19 @@ namespace WebsitePanel.Portal InstalledCert = (from c in certificates where c.Installed == true select c).SingleOrDefault(); - - TimeSpan daystoexp = DateTime.Now - InstalledCert.ExpiryDate; - - BindCertificateFields(); // - bool certAbout2Exp = daystoexp.Days < 30 - ? lblInstalledExpiration.ForeColor == System.Drawing.Color.Red - : lblInstalledExpiration.ForeColor == System.Drawing.Color.Black; + BindCertificateFields(); + // Attention please, the certificate is about to expire! + TimeSpan daystoexp = InstalledCert.ExpiryDate - DateTime.Now; + if (daystoexp.Days < 30) + { + lblInstalledExpiration.ForeColor = System.Drawing.Color.Red; + } + // Put some data to the ViewState ViewState["SSLID"] = InstalledCert.id; ViewState["SSLSerial"] = InstalledCert.SerialNumber; - - if (!hasPendingCert) + // + if (!haspending) { btnShowpnlCSR.Attributes.Add("OnClientClick", "return confirm('" + GetLocalizedString("btnInstallConfirm.Text") + "');"); btnShowUpload.Attributes.Add("OnClientClick", "return confirm('" + GetLocalizedString("btnInstallConfirm.Text") + "');"); @@ -642,9 +558,10 @@ namespace WebsitePanel.Portal } } - if (hasPendingCert) + // Web site has pending certificate + if (haspending) { - tabCSR.HeaderText = GetLocalizedString("tabPendingCertificate.HeaderText"); + tabCSR.HeaderText = GetLocalizedString("tabPendingCertificate.HeaderText");//"Pending Certificate"; SSLNotInstalled.Visible = false; pnlInstallCertificate.Visible = true; SSLCertificate pending = (from c in certificates @@ -653,12 +570,17 @@ namespace WebsitePanel.Portal ViewState["CSRID"] = pending.id; txtCSR.Text = pending.CSR; txtCSR.Attributes.Add("onfocus", "this.select();"); - if (InstalledCert != null) { btnInstallCertificate.Attributes.Add("OnClientClick", "return confirm('" + GetLocalizedString("btnInstallConfirm.Text") + "');"); } } + + if (!hasactive && ES.Services.WebServers.CheckCertificate(SiteId).IsSuccess) + { + SSLNotInstalled.Visible = false; + SSLImport.Visible = true; + } } catch (Exception ex) { @@ -668,7 +590,10 @@ namespace WebsitePanel.Portal protected void SetCertHostnameSelection(string hostname) { - rbSiteCertificate.Checked = (rbSiteCertificate.Text == hostname); + if (ddlbSiteCertificate.Items.Contains(new ListItem(hostname))) + { + ddlbSiteCertificate.SelectedValue = hostname; + } } protected void SetCertCountrySelection(string country) @@ -701,5 +626,33 @@ namespace WebsitePanel.Portal listCtl.ClearSelection(); li.Selected = true; } - } + + protected void btnCancelRequest_Click(object sender, EventArgs e) + { + ResultObject result = null; + try + { + result = ES.Services.WebServers.DeleteCertificateRequest(SiteId, (int)ViewState["CSRID"]); + } + catch (Exception ex) + { + messageBox.ShowErrorMessage(WEB_SSL_DELETE, ex); + } + // + if (!result.IsSuccess) + { + messageBox.ShowErrorMessage(WEB_SSL_DELETE); + return; + } + // + SSLNotInstalled.Visible = true; + pnlCSR.Visible = false; + pnlInstallCertificate.Visible = false; + } + + protected void btnDeleteAll_Click(object sender, EventArgs e) + { + DeleteCertificate(SiteId, new SSLCertificate()); + } + } } \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitesSSL.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitesSSL.ascx.designer.cs index a6707def..0434502a 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitesSSL.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitesSSL.ascx.designer.cs @@ -1,32 +1,4 @@ -// 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. - -//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ // // This code was generated by a tool. // @@ -355,6 +327,15 @@ namespace WebsitePanel.Portal { ///
protected global::System.Web.UI.WebControls.Button btnImport; + /// + /// btnDeleteAll control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Button btnDeleteAll; + /// /// pnlCSR control. /// @@ -374,22 +355,13 @@ namespace WebsitePanel.Portal { protected global::System.Web.UI.WebControls.Localize SelectCertType; /// - /// rbSiteCertificate control. + /// ddlbSiteCertificate control. /// /// /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::System.Web.UI.WebControls.RadioButton rbSiteCertificate; - - /// - /// rbDomainCertificate control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.RadioButton rbDomainCertificate; + protected global::System.Web.UI.WebControls.DropDownList ddlbSiteCertificate; /// /// sslBitLength control. @@ -678,5 +650,14 @@ namespace WebsitePanel.Portal { /// To modify move field declaration from designer file to code-behind file. /// protected global::System.Web.UI.WebControls.Button btnInstallCertificate; + + /// + /// btnCancelRequest control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Button btnCancelRequest; } } From dbcdf29ed2903537188cb6d5bd183680482ee6c4 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Sun, 30 Nov 2014 07:52:09 -0500 Subject: [PATCH 17/39] Added tag build-2.1.0.474 for changeset 649c8f1906e6 From 14a1a06dd192590792bf4f5f2e2c64d5ee8beedb Mon Sep 17 00:00:00 2001 From: Olov Karlsson Date: Mon, 1 Dec 2014 22:38:17 +0100 Subject: [PATCH 18/39] Corrected the way alternate names from a certificate is extracted and used --- .../SSL/SSLModuleService80.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/SSL/SSLModuleService80.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/SSL/SSLModuleService80.cs index 1395bde6..3e1a6382 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/SSL/SSLModuleService80.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/SSL/SSLModuleService80.cs @@ -281,12 +281,15 @@ namespace WebsitePanel.Providers.Web.Iis if (!dedicatedIp) { - hostNames.AddRange(from extension in certificate.Extensions.Cast() where extension.Oid.FriendlyName == "Subject Alternative Name" select extension.Format(true)); + hostNames.AddRange(certificate.Extensions.Cast() + .Where(e => e.Oid.FriendlyName == "Subject Alternative Name") + .Select(e => e.Format(true).Replace("DNS Name=", ""))); } - if (!hostNames.Any()) + var simpleName = certificate.GetNameInfo(X509NameType.SimpleName, false); + if (hostNames.All(h => h != simpleName)) { - hostNames.Add(certificate.GetNameInfo(X509NameType.SimpleName, false)); + hostNames.Add(simpleName); } // For every hostname (only one if using old school dedicated IP binding) From ebf1665dbc31a2f10c0e00c43285146858615cbb Mon Sep 17 00:00:00 2001 From: Olov Karlsson Date: Tue, 2 Dec 2014 08:49:47 +0100 Subject: [PATCH 19/39] And now alternate names can be extracted from certificates on machines other then US/english --- .../SSL/SSLModuleService80.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/SSL/SSLModuleService80.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/SSL/SSLModuleService80.cs index 3e1a6382..1ba070aa 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/SSL/SSLModuleService80.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/SSL/SSLModuleService80.cs @@ -282,8 +282,8 @@ namespace WebsitePanel.Providers.Web.Iis if (!dedicatedIp) { hostNames.AddRange(certificate.Extensions.Cast() - .Where(e => e.Oid.FriendlyName == "Subject Alternative Name") - .Select(e => e.Format(true).Replace("DNS Name=", ""))); + .Where(e => e.Oid.Value == "2.5.29.17") // Subject Alternative Names + .SelectMany(e => e.Format(true).Split(new[] {"\r\n", "\n", "\n"}, StringSplitOptions.RemoveEmptyEntries).Select(s => s.Split('=')[1]))); } var simpleName = certificate.GetNameInfo(X509NameType.SimpleName, false); From 519eb1f9ebc0afe322c3596caa99a0796e9c734a Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Tue, 2 Dec 2014 08:47:21 -0500 Subject: [PATCH 20/39] Added tag build-2.1.0.475 for changeset 709c1fd61109 From 1f5d09fbb1fe16276278bfa66b1d261a95e15fe1 Mon Sep 17 00:00:00 2001 From: dev_amdtel Date: Tue, 2 Dec 2014 19:09:00 +0400 Subject: [PATCH 21/39] Import.Enterprise fix --- .../ApplicationForm.cs | 66 +++++++++++++------ .../OrganizationImporter.cs | 30 +++++---- 2 files changed, 64 insertions(+), 32 deletions(-) diff --git a/WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/ApplicationForm.cs b/WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/ApplicationForm.cs index fb403a0a..deefb00d 100644 --- a/WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/ApplicationForm.cs +++ b/WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/ApplicationForm.cs @@ -164,34 +164,60 @@ namespace WebsitePanel.Import.Enterprise type = null; email = null; name = (string)child.Properties["name"].Value; + //account type typeProp = child.Properties["msExchRecipientDisplayType"]; + + int typeDetails = 0; + PropertyValueCollection typeDetailsProp = child.Properties["msExchRecipientTypeDetails"]; + if (typeDetailsProp != null) + { + if (typeDetailsProp.Value != null) + { + try + { + object adsLargeInteger = typeDetailsProp.Value; + typeDetails = (Int32)adsLargeInteger.GetType().InvokeMember("LowPart", System.Reflection.BindingFlags.GetProperty, null, adsLargeInteger, null); + } + catch { } // just skip + } + } + switch (child.SchemaClassName) { case "user": email = (string)child.Properties["userPrincipalName"].Value; - if (typeProp == null || typeProp.Value == null) - { - type = "User"; - } - else - { - int mailboxType = (int)typeProp.Value; - switch (mailboxType) - { - case 1073741824: - type = "User Mailbox"; - break; - case 7: - type = "Room Mailbox"; - break; - case 8: - type = "Equipment Mailbox"; - break; - } - } + if (typeDetails == 4) + { + type = "Shared Mailbox"; + } + else + { + + if (typeProp == null || typeProp.Value == null) + { + type = "User"; + } + else + { + int mailboxType = (int)typeProp.Value; + + switch (mailboxType) + { + case 1073741824: + type = "User Mailbox"; + break; + case 7: + type = "Room Mailbox"; + break; + case 8: + type = "Equipment Mailbox"; + break; + } + } + } if (!string.IsNullOrEmpty(type)) { diff --git a/WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/OrganizationImporter.cs b/WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/OrganizationImporter.cs index 72a5aebe..7044ddeb 100644 --- a/WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/OrganizationImporter.cs +++ b/WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/OrganizationImporter.cs @@ -781,12 +781,20 @@ namespace WebsitePanel.Import.Enterprise } int mailboxType = (int)type.Value; - PropertyValueCollection typeDetails = entry.Properties["msExchRecipientTypeDetails"]; int mailboxTypeDetails = 0; + PropertyValueCollection typeDetails = entry.Properties["msExchRecipientTypeDetails"]; if (typeDetails!=null) { if (typeDetails.Value != null) - mailboxTypeDetails = (int)typeDetails.Value; + { + try + { + object adsLargeInteger = typeDetails.Value; + mailboxTypeDetails = (Int32)adsLargeInteger.GetType().InvokeMember("LowPart", System.Reflection.BindingFlags.GetProperty, null, adsLargeInteger, null); + } + catch { } // just skip + + } } ExchangeAccountType accountType = ExchangeAccountType.Undefined; @@ -831,18 +839,16 @@ namespace WebsitePanel.Import.Enterprise if (emailAddress.ToLower().StartsWith("smtp:")) emailAddress = emailAddress.Substring(5); - - if (!emailAddress.Equals(defaultEmail, StringComparison.InvariantCultureIgnoreCase)) + if (EmailAddressExists(emailAddress)) { - if (EmailAddressExists(emailAddress)) - { - Log.WriteInfo(string.Format("Email address {0} already exists. Skipped", emailAddress)); - continue; - } - // register email address - Log.WriteInfo(string.Format("Importing email {0}", emailAddress)); - AddAccountEmailAddress(userId, emailAddress); + if ((!emailAddress.Equals(defaultEmail, StringComparison.InvariantCultureIgnoreCase)) && (!emailAddress.Equals(email, StringComparison.InvariantCultureIgnoreCase))) + Log.WriteInfo(string.Format("Email address {0} already exists. Skipped", emailAddress)); + + continue; } + // register email address + Log.WriteInfo(string.Format("Importing email {0}", emailAddress)); + AddAccountEmailAddress(userId, emailAddress); } } Log.WriteEnd("User imported"); From 5b8f12d005f4ac7f287e265267046f834bc900f6 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Tue, 2 Dec 2014 10:41:56 -0500 Subject: [PATCH 22/39] Added tag build-2.1.0.476 for changeset 7b88d21cc19a From dede5472cc2cb019d308a51f48037eb634872fa5 Mon Sep 17 00:00:00 2001 From: dev_amdtel Date: Thu, 4 Dec 2014 12:54:00 +0400 Subject: [PATCH 23/39] wsp-10079 editing website properties returns you to wrong page. part 1 --- .../ExchangeMailboxGeneralSettings.ascx.resx | 5 +- .../ExchangeMailboxMailFlowSettings.ascx.resx | 5 +- .../ExchangeMailboxMemberOf.ascx.resx | 6 - .../ExchangeMailboxPermissions.ascx.resx | 5 +- .../OrganizationUserGeneralSettings.ascx.resx | 5 +- .../OrganizationUserMemberOf.ascx.resx | 6 - .../ExchangeMailboxGeneralSettings.ascx | 9 +- .../ExchangeMailboxGeneralSettings.ascx.cs | 2 + ...ngeMailboxGeneralSettings.ascx.designer.cs | 22 +-- .../ExchangeMailboxMailFlowSettings.ascx | 6 +- .../ExchangeMailboxMailFlowSettings.ascx.cs | 2 + ...geMailboxMailFlowSettings.ascx.designer.cs | 13 +- .../ExchangeMailboxMemberOf.ascx | 7 +- .../ExchangeMailboxMemberOf.ascx.designer.cs | 13 +- .../ExchangeMailboxPermissions.ascx | 6 +- .../ExchangeMailboxPermissions.ascx.cs | 4 + ...xchangeMailboxPermissions.ascx.designer.cs | 13 +- .../OrganizationUserGeneralSettings.ascx | 7 +- .../OrganizationUserGeneralSettings.ascx.cs | 2 + ...zationUserGeneralSettings.ascx.designer.cs | 13 +- .../OrganizationUserMemberOf.ascx | 7 +- .../OrganizationUserMemberOf.ascx.designer.cs | 13 +- .../ItemButtonPanel.ascx.resx | 126 ++++++++++++++++++ .../UserControls/ItemButtonPanel.ascx | 5 + .../UserControls/ItemButtonPanel.ascx.cs | 85 ++++++++++++ .../ItemButtonPanel.ascx.designer.cs | 33 +++++ .../WebsitePanel.Portal.Modules.csproj | 11 ++ 27 files changed, 314 insertions(+), 117 deletions(-) create mode 100644 WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/App_LocalResources/ItemButtonPanel.ascx.resx create mode 100644 WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/ItemButtonPanel.ascx create mode 100644 WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/ItemButtonPanel.ascx.cs create mode 100644 WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/ItemButtonPanel.ascx.designer.cs diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeMailboxGeneralSettings.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeMailboxGeneralSettings.ascx.resx index 9b7b5be3..e3520cf0 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeMailboxGeneralSettings.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeMailboxGeneralSettings.ascx.resx @@ -117,12 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + ShowProgressDialog('Updating mailbox settings...'); - - Save Changes - Disable Mailbox diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeMailboxMailFlowSettings.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeMailboxMailFlowSettings.ascx.resx index 9ed871cb..a245ae1d 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeMailboxMailFlowSettings.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeMailboxMailFlowSettings.ascx.resx @@ -117,12 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + ShowProgressDialog('Updating mailbox settings...'); - - Save Changes - Deliver messages to both forwarding address and mailbox diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeMailboxMemberOf.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeMailboxMemberOf.ascx.resx index c243cc33..83035c26 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeMailboxMemberOf.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeMailboxMemberOf.ascx.resx @@ -117,12 +117,6 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - ShowProgressDialog('Updating...'); - - - Save Changes - Edit Mailbox diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeMailboxPermissions.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeMailboxPermissions.ascx.resx index 9c1cac80..109aa29f 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeMailboxPermissions.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/ExchangeMailboxPermissions.ascx.resx @@ -117,12 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + ShowProgressDialog('Updating mailbox permissions...'); - - Save Changes - diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/OrganizationUserGeneralSettings.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/OrganizationUserGeneralSettings.ascx.resx index b21e975e..732e6c03 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/OrganizationUserGeneralSettings.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/OrganizationUserGeneralSettings.ascx.resx @@ -117,12 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + ShowProgressDialog('Updating user settings...'); - - Save Changes - Disable User diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/OrganizationUserMemberOf.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/OrganizationUserMemberOf.ascx.resx index 81ca9211..5fa94e6c 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/OrganizationUserMemberOf.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/OrganizationUserMemberOf.ascx.resx @@ -117,12 +117,6 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - ShowProgressDialog('Updating...'); - - - Save Changes - Edit User diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxGeneralSettings.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxGeneralSettings.ascx index 77f97218..d323d473 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxGeneralSettings.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxGeneralSettings.ascx @@ -7,8 +7,9 @@ <%@ Register Src="../UserControls/EnableAsyncTasksSupport.ascx" TagName="EnableAsyncTasksSupport" TagPrefix="wsp" %> <%@ Register Src="UserControls/MailboxPlanSelector.ascx" TagName="MailboxPlanSelector" TagPrefix="wsp" %> <%@ Register Src="../UserControls/QuotaViewer.ascx" TagName="QuotaViewer" TagPrefix="wsp" %> +<%@ Register Src="../UserControls/ItemButtonPanel.ascx" TagName="ItemButtonPanel" TagPrefix="wsp" %> -<%-- < wsp:EnableAsyncTasksSupport id="asyncTasks" runat="server"/> --%> +
@@ -157,10 +158,8 @@
- - +
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxGeneralSettings.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxGeneralSettings.ascx.cs index edc9b2ec..69b9139f 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxGeneralSettings.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxGeneralSettings.ascx.cs @@ -81,6 +81,8 @@ namespace WebsitePanel.Portal.ExchangeServer } secRetentionPolicy.Visible = Utils.CheckQouta(Quotas.EXCHANGE2013_ALLOWRETENTIONPOLICY, Cntx); + + buttonPanel.OnSaveClientClick = GetLocalizedString("buttonPanel.OnSaveClientClick"); } int planId = -1; diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxGeneralSettings.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxGeneralSettings.ascx.designer.cs index 9f3029a2..be14fb27 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxGeneralSettings.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxGeneralSettings.ascx.designer.cs @@ -12,6 +12,15 @@ namespace WebsitePanel.Portal.ExchangeServer { public partial class ExchangeMailboxGeneralSettings { + /// + /// asyncTasks control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::WebsitePanel.Portal.EnableAsyncTasksSupport asyncTasks; + /// /// Image1 control. /// @@ -382,22 +391,13 @@ namespace WebsitePanel.Portal.ExchangeServer { protected global::System.Web.UI.WebControls.Label lblExchangeGuid; /// - /// btnSave control. + /// buttonPanel control. /// /// /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::System.Web.UI.WebControls.Button btnSave; - - /// - /// btnSaveExit control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Button btnSaveExit; + protected global::WebsitePanel.Portal.ItemButtonPanel buttonPanel; /// /// ValidationSummary1 control. diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxMailFlowSettings.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxMailFlowSettings.ascx index ed7b7c73..b7d2386b 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxMailFlowSettings.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxMailFlowSettings.ascx @@ -8,6 +8,7 @@ <%@ Register Src="UserControls/AccountsList.ascx" TagName="AccountsList" TagPrefix="wsp" %> <%@ Register TagPrefix="wsp" TagName="CollapsiblePanel" Src="../UserControls/CollapsiblePanel.ascx" %> <%@ Register Src="../UserControls/EnableAsyncTasksSupport.ascx" TagName="EnableAsyncTasksSupport" TagPrefix="wsp" %> +<%@ Register Src="../UserControls/ItemButtonPanel.ascx" TagName="ItemButtonPanel" TagPrefix="wsp" %> @@ -110,9 +111,8 @@
- - +
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxMailFlowSettings.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxMailFlowSettings.ascx.cs index 51c04f98..bd633f88 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxMailFlowSettings.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxMailFlowSettings.ascx.cs @@ -49,6 +49,8 @@ namespace WebsitePanel.Portal.ExchangeServer if (!IsPostBack) { BindSettings(); + + buttonPanel.OnSaveClientClick = GetLocalizedString("buttonPanel.OnSaveClientClick"); } } diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxMailFlowSettings.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxMailFlowSettings.ascx.designer.cs index 1ed59e75..f396c6b4 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxMailFlowSettings.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxMailFlowSettings.ascx.designer.cs @@ -247,22 +247,13 @@ namespace WebsitePanel.Portal.ExchangeServer { protected global::System.Web.UI.WebControls.CheckBox chkPmmAllowed; /// - /// btnSave control. + /// buttonPanel control. /// /// /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::System.Web.UI.WebControls.Button btnSave; - - /// - /// btnSaveExit control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Button btnSaveExit; + protected global::WebsitePanel.Portal.ItemButtonPanel buttonPanel; /// /// ValidationSummary1 control. diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxMemberOf.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxMemberOf.ascx index 452914dc..0e144703 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxMemberOf.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxMemberOf.ascx @@ -7,6 +7,7 @@ <%@ Register Src="../UserControls/EnableAsyncTasksSupport.ascx" TagName="EnableAsyncTasksSupport" TagPrefix="wsp" %> <%@ Register Src="UserControls/MailboxPlanSelector.ascx" TagName="MailboxPlanSelector" TagPrefix="wsp" %> <%@ Register Src="../UserControls/QuotaViewer.ascx" TagName="QuotaViewer" TagPrefix="wsp" %> +<%@ Register Src="../UserControls/ItemButtonPanel.ascx" TagName="ItemButtonPanel" TagPrefix="wsp" %> @@ -43,10 +44,8 @@
- - +
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxMemberOf.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxMemberOf.ascx.designer.cs index 03c07ca6..91c01a76 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxMemberOf.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxMemberOf.ascx.designer.cs @@ -103,22 +103,13 @@ namespace WebsitePanel.Portal.ExchangeServer { protected global::WebsitePanel.Portal.ExchangeServer.UserControls.AccountsList groups; /// - /// btnSave control. + /// buttonPanel control. /// /// /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::System.Web.UI.WebControls.Button btnSave; - - /// - /// btnSaveExit control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Button btnSaveExit; + protected global::WebsitePanel.Portal.ItemButtonPanel buttonPanel; /// /// ValidationSummary1 control. diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxPermissions.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxPermissions.ascx index b296eac7..589f69f6 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxPermissions.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxPermissions.ascx @@ -6,6 +6,7 @@ <%@ Register Src="UserControls/MailboxTabs.ascx" TagName="MailboxTabs" TagPrefix="wsp" %> <%@ Register TagPrefix="wsp" TagName="CollapsiblePanel" Src="../UserControls/CollapsiblePanel.ascx" %> <%@ Register Src="../UserControls/EnableAsyncTasksSupport.ascx" TagName="EnableAsyncTasksSupport" TagPrefix="wsp" %> +<%@ Register Src="../UserControls/ItemButtonPanel.ascx" TagName="ItemButtonPanel" TagPrefix="wsp" %> @@ -44,9 +45,8 @@
- - +
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxPermissions.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxPermissions.ascx.cs index 39eb5c30..94dff205 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxPermissions.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxPermissions.ascx.cs @@ -37,8 +37,12 @@ namespace WebsitePanel.Portal.ExchangeServer protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) + { BindPermissions(); + buttonPanel.OnSaveClientClick = GetLocalizedString("buttonPanel.OnSaveClientClick"); + } + } diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxPermissions.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxPermissions.ascx.designer.cs index 0c1e2494..886b9614 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxPermissions.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxPermissions.ascx.designer.cs @@ -139,21 +139,12 @@ namespace WebsitePanel.Portal.ExchangeServer { protected global::WebsitePanel.Portal.ExchangeServer.UserControls.AccountsList fullAccessPermission; /// - /// btnSave control. + /// buttonPanel control. /// /// /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::System.Web.UI.WebControls.Button btnSave; - - /// - /// btnSaveExit control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Button btnSaveExit; + protected global::WebsitePanel.Portal.ItemButtonPanel buttonPanel; } } diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUserGeneralSettings.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUserGeneralSettings.ascx index cd770aea..a2d2032b 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUserGeneralSettings.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUserGeneralSettings.ascx @@ -13,6 +13,7 @@ <%@ Register src="UserControls/UserTabs.ascx" tagname="UserTabs" tagprefix="uc1" %> <%@ Register src="UserControls/MailboxTabs.ascx" tagname="MailboxTabs" tagprefix="uc1" %> +<%@ Register Src="../UserControls/ItemButtonPanel.ascx" TagName="ItemButtonPanel" TagPrefix="wsp" %> @@ -283,10 +284,8 @@
- - +
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUserGeneralSettings.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUserGeneralSettings.ascx.cs index 865e8665..81a3cf85 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUserGeneralSettings.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUserGeneralSettings.ascx.cs @@ -49,6 +49,8 @@ namespace WebsitePanel.Portal.HostedSolution MailboxTabsId.Visible = (PanelRequest.Context == "Mailbox"); UserTabsId.Visible = (PanelRequest.Context == "User"); + + buttonPanel.OnSaveClientClick = GetLocalizedString("buttonPanel.OnSaveClientClick"); } } diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUserGeneralSettings.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUserGeneralSettings.ascx.designer.cs index fef1a739..7c18c1d8 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUserGeneralSettings.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUserGeneralSettings.ascx.designer.cs @@ -769,22 +769,13 @@ namespace WebsitePanel.Portal.HostedSolution { protected global::System.Web.UI.WebControls.Label lblUserDomainName; /// - /// btnSave control. + /// buttonPanel control. /// /// /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::System.Web.UI.WebControls.Button btnSave; - - /// - /// btnSaveExit control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Button btnSaveExit; + protected global::WebsitePanel.Portal.ItemButtonPanel buttonPanel; /// /// ValidationSummary1 control. diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUserMemberOf.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUserMemberOf.ascx index a92bde4a..179955d0 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUserMemberOf.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUserMemberOf.ascx @@ -15,6 +15,7 @@ <%@ Register src="UserControls/UserTabs.ascx" tagname="UserTabs" tagprefix="uc1" %> <%@ Register src="UserControls/MailboxTabs.ascx" tagname="MailboxTabs" tagprefix="uc1" %> +<%@ Register Src="../UserControls/ItemButtonPanel.ascx" TagName="ItemButtonPanel" TagPrefix="wsp" %> @@ -54,10 +55,8 @@
- - +
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUserMemberOf.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUserMemberOf.ascx.designer.cs index 89567bb0..a1f28695 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUserMemberOf.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUserMemberOf.ascx.designer.cs @@ -112,22 +112,13 @@ namespace WebsitePanel.Portal.HostedSolution { protected global::WebsitePanel.Portal.ExchangeServer.UserControls.AccountsList groups; /// - /// btnSave control. + /// buttonPanel control. /// /// /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::System.Web.UI.WebControls.Button btnSave; - - /// - /// btnSaveExit control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Button btnSaveExit; + protected global::WebsitePanel.Portal.ItemButtonPanel buttonPanel; /// /// ValidationSummary1 control. diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/App_LocalResources/ItemButtonPanel.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/App_LocalResources/ItemButtonPanel.ascx.resx new file mode 100644 index 00000000..33712da6 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/App_LocalResources/ItemButtonPanel.ascx.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Save Changes + + + Save Changes and Exit + + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/ItemButtonPanel.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/ItemButtonPanel.ascx new file mode 100644 index 00000000..998c862b --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/ItemButtonPanel.ascx @@ -0,0 +1,5 @@ +<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ItemButtonPanel.ascx.cs" Inherits="WebsitePanel.Portal.ItemButtonPanel" %> + + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/ItemButtonPanel.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/ItemButtonPanel.ascx.cs new file mode 100644 index 00000000..50c284d4 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/ItemButtonPanel.ascx.cs @@ -0,0 +1,85 @@ +// 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; + +namespace WebsitePanel.Portal +{ + public partial class ItemButtonPanel : WebsitePanelControlBase + { + public bool ButtonSaveVisible + { + set { btnSave.Visible = value; } + get { return btnSave.Visible; } + } + + public bool ButtonSaveExitVisible + { + set { btnSaveExit.Visible = value; } + get { return btnSaveExit.Visible; } + } + + public string ValidationGroup + { + set { + btnSave.ValidationGroup = value; + btnSaveExit.ValidationGroup = value; + } + get { return btnSave.ValidationGroup; } + } + + public string OnSaveClientClick + { + set + { + btnSave.OnClientClick = value; + btnSaveExit.OnClientClick = value; + } + } + + + public event EventHandler SaveClick = null; + protected void btnSave_Click(object sender, EventArgs e) + { + if (SaveClick!=null) + { + SaveClick(this, e); + } + } + + public event EventHandler SaveExitClick = null; + protected void btnSaveExit_Click(object sender, EventArgs e) + { + if (SaveExitClick!=null) + { + SaveExitClick(this, e); + } + } + + } +} \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/ItemButtonPanel.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/ItemButtonPanel.ascx.designer.cs new file mode 100644 index 00000000..1cab6d5d --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserControls/ItemButtonPanel.ascx.designer.cs @@ -0,0 +1,33 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WebsitePanel.Portal { + + + public partial class ItemButtonPanel { + + /// + /// btnSave control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Button btnSave; + + /// + /// btnSaveExit control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Button btnSaveExit; + } +} diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitePanel.Portal.Modules.csproj b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitePanel.Portal.Modules.csproj index 9d85192e..59d15f42 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitePanel.Portal.Modules.csproj +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitePanel.Portal.Modules.csproj @@ -760,6 +760,13 @@ AllocatePackagePhoneNumbers.ascx + + ItemButtonPanel.ascx + ASPXCodeBehind + + + ItemButtonPanel.ascx + UserOrganization.ascx ASPXCodeBehind @@ -4302,6 +4309,7 @@ + @@ -5457,6 +5465,9 @@ Designer + + Designer + From 8d616552fed279fdb2721263043a1b60b8a1cedc Mon Sep 17 00:00:00 2001 From: dev_amdtel Date: Thu, 4 Dec 2014 14:35:20 +0400 Subject: [PATCH 24/39] wsp-10079 editing website properties returns you to wrong page. part 2 --- .../WebsitePanel_SharedResources.ascx.resx | 6 +++ .../DomainsEditDomain.ascx.resx | 12 ++---- .../WebSitesEditSite.ascx.resx | 8 +--- .../WebsitePanel/DomainsEditDomain.ascx | 6 +-- .../WebsitePanel/DomainsEditDomain.ascx.cs | 11 +++-- .../DomainsEditDomain.ascx.designer.cs | 16 ++------ .../ExchangeMailboxGeneralSettings.ascx.cs | 3 +- .../ExchangeMailboxMailFlowSettings.ascx.cs | 3 +- .../ExchangeMailboxPermissions.ascx.cs | 3 +- .../OrganizationUserGeneralSettings.ascx.cs | 3 +- .../WebsitePanel/WebSitesEditSite.ascx | 8 ++-- .../WebsitePanel/WebSitesEditSite.ascx.cs | 14 ++++--- .../WebSitesEditSite.ascx.designer.cs | 41 +------------------ 13 files changed, 46 insertions(+), 88 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx index 175a1e7d..1fee85f2 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx @@ -5608,4 +5608,10 @@ (equipment mailbox) + + Domain information has been successfully updated. + + + Web site has been successfully updated. + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/DomainsEditDomain.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/DomainsEditDomain.ascx.resx index f9ef6f4f..72437c36 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/DomainsEditDomain.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/DomainsEditDomain.ascx.resx @@ -112,24 +112,18 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Save - - - Cancel - Delete if(!confirm('Do you really want to delete this domain?')) return false;ShowProgressDialog('Deleting domain...'); - + ShowProgressDialog('Updating Domain...'); diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/WebSitesEditSite.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/WebSitesEditSite.ascx.resx index 7ef313a2..21e1cb0e 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/WebSitesEditSite.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/WebSitesEditSite.ascx.resx @@ -132,9 +132,6 @@ Create Directory - - Cancel - Change Password @@ -150,12 +147,9 @@ Uninstall - + ShowProgressDialog('Updating web site...'); - - Update - Continue Web Site diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsEditDomain.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsEditDomain.ascx index ab077baa..85fcb516 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsEditDomain.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsEditDomain.ascx @@ -1,6 +1,7 @@ <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="DomainsEditDomain.ascx.cs" Inherits="WebsitePanel.Portal.DomainsEditDomain" %> <%@ Register Src="UserControls/EnableAsyncTasksSupport.ascx" TagName="EnableAsyncTasksSupport" TagPrefix="wsp" %> <%@ Register Src="UserControls/CollapsiblePanel.ascx" TagPrefix="wsp" TagName="CollapsiblePanel" %> +<%@ Register Src="UserControls/ItemButtonPanel.ascx" TagName="ItemButtonPanel" TagPrefix="wsp" %> @@ -119,9 +120,8 @@
- - +
\ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsEditDomain.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsEditDomain.ascx.cs index f2249fce..a03b0ac3 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsEditDomain.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsEditDomain.ascx.cs @@ -48,6 +48,9 @@ namespace WebsitePanel.Portal if (!IsPostBack) { BindDomain(); + + if (GetLocalizedString("buttonPanel.OnSaveClientClick") != null) + buttonPanel.OnSaveClientClick = GetLocalizedString("buttonPanel.OnSaveClientClick"); } } @@ -194,15 +197,13 @@ namespace WebsitePanel.Portal ShowResultMessage(result); return; } + ShowSuccessMessage("DOMAIN_UPDATE_DOMAIN"); } catch (Exception ex) { ShowErrorMessage("DOMAIN_UPDATE_DOMAIN", ex); return; } - - // return - RedirectSpaceHomePage(); } private void DeleteDomain() @@ -232,8 +233,10 @@ namespace WebsitePanel.Portal SaveDomain(); } - protected void btnCancel_Click(object sender, EventArgs e) + protected void btnSaveExit_Click(object sender, EventArgs e) { + SaveDomain(); + // return RedirectSpaceHomePage(); } diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsEditDomain.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsEditDomain.ascx.designer.cs index 9fc907ea..b80a1857 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsEditDomain.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsEditDomain.ascx.designer.cs @@ -1,10 +1,9 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:2.0.50727.3074 // // Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. +// the code is regenerated. // //------------------------------------------------------------------------------ @@ -428,22 +427,13 @@ namespace WebsitePanel.Portal { protected global::System.Web.UI.WebControls.Localize DescribeAllowSubDomains; /// - /// btnSave control. + /// buttonPanel control. /// /// /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::System.Web.UI.WebControls.Button btnSave; - - /// - /// btnCancel control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Button btnCancel; + protected global::WebsitePanel.Portal.ItemButtonPanel buttonPanel; /// /// btnDelete control. diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxGeneralSettings.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxGeneralSettings.ascx.cs index 69b9139f..ff2dc086 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxGeneralSettings.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxGeneralSettings.ascx.cs @@ -82,7 +82,8 @@ namespace WebsitePanel.Portal.ExchangeServer secRetentionPolicy.Visible = Utils.CheckQouta(Quotas.EXCHANGE2013_ALLOWRETENTIONPOLICY, Cntx); - buttonPanel.OnSaveClientClick = GetLocalizedString("buttonPanel.OnSaveClientClick"); + if (GetLocalizedString("buttonPanel.OnSaveClientClick") != null) + buttonPanel.OnSaveClientClick = GetLocalizedString("buttonPanel.OnSaveClientClick"); } int planId = -1; diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxMailFlowSettings.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxMailFlowSettings.ascx.cs index bd633f88..73d11805 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxMailFlowSettings.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxMailFlowSettings.ascx.cs @@ -50,7 +50,8 @@ namespace WebsitePanel.Portal.ExchangeServer { BindSettings(); - buttonPanel.OnSaveClientClick = GetLocalizedString("buttonPanel.OnSaveClientClick"); + if (GetLocalizedString("buttonPanel.OnSaveClientClick") != null) + buttonPanel.OnSaveClientClick = GetLocalizedString("buttonPanel.OnSaveClientClick"); } } diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxPermissions.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxPermissions.ascx.cs index 94dff205..6a63fbe4 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxPermissions.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/ExchangeMailboxPermissions.ascx.cs @@ -40,7 +40,8 @@ namespace WebsitePanel.Portal.ExchangeServer { BindPermissions(); - buttonPanel.OnSaveClientClick = GetLocalizedString("buttonPanel.OnSaveClientClick"); + if (GetLocalizedString("buttonPanel.OnSaveClientClick") != null) + buttonPanel.OnSaveClientClick = GetLocalizedString("buttonPanel.OnSaveClientClick"); } } diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUserGeneralSettings.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUserGeneralSettings.ascx.cs index 81a3cf85..028a2e4d 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUserGeneralSettings.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationUserGeneralSettings.ascx.cs @@ -50,7 +50,8 @@ namespace WebsitePanel.Portal.HostedSolution MailboxTabsId.Visible = (PanelRequest.Context == "Mailbox"); UserTabsId.Visible = (PanelRequest.Context == "User"); - buttonPanel.OnSaveClientClick = GetLocalizedString("buttonPanel.OnSaveClientClick"); + if (GetLocalizedString("buttonPanel.OnSaveClientClick") != null) + buttonPanel.OnSaveClientClick = GetLocalizedString("buttonPanel.OnSaveClientClick"); } } diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx index 0c6e28dd..a8fd47ff 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx @@ -16,6 +16,8 @@ <%@ Register Src="UserControls/PopupHeader.ascx" TagName="PopupHeader" TagPrefix="wsp" %> <%@ Register TagPrefix="wsp" Namespace="WebsitePanel.Portal" %> <%@ Register Src="WebsitesSSL.ascx" TagName="WebsitesSSL" TagPrefix="uc2" %> +<%@ Register Src="UserControls/ItemButtonPanel.ascx" TagName="ItemButtonPanel" TagPrefix="wsp" %> + + + +
+ + +
+ MX and NS Changes Information +
+ + +

+Hello #user.FirstName#, +

+
+ +

+Please, find below details of MX and NS changes. +

+ + +

#Domain.DomainName#

+ + + + + + + + + + + + + + + + + + + + +
DNSTypeStatusValue
#DnsChange.DnsServer##DnsChange.Type##DnsChange.Status##DnsChange.Record.Value#
+ +
+ +

+If you have any questions regarding your hosting account, feel free to contact our support department at any time. +

+ +

+Best regards +

') +END +GO +IF NOT EXISTS (SELECT * FROM [dbo].[UserSettings] WHERE [UserID] = 1 AND [SettingsName]= N'DomainLookupLetter' AND [PropertyName]= N'Priority' ) +BEGIN +INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [PropertyValue]) VALUES (1, N'DomainLookupLetter', N'Priority', N'Normal') +END +GO +IF NOT EXISTS (SELECT * FROM [dbo].[UserSettings] WHERE [UserID] = 1 AND [SettingsName]= N'DomainLookupLetter' AND [PropertyName]= N'Subject' ) +BEGIN +INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [PropertyValue]) VALUES (1, N'DomainLookupLetter', N'Subject', N'MX and NS changes notification') +END +GO +IF NOT EXISTS (SELECT * FROM [dbo].[UserSettings] WHERE [UserID] = 1 AND [SettingsName]= N'DomainLookupLetter' AND [PropertyName]= N'TextBody' ) +BEGIN +INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [PropertyValue]) VALUES (1, N'DomainLookupLetter', N'TextBody', N'================================= + MX and NS Changes Information +================================= + +

+Hello #user.FirstName#, +

+
+ +Please, find below details of your domain expiration information. + + + + + + #Domain.DomainName# + + + DNS: #DnsChange.DnsServer# + Type: #DnsChange.Type# + Status: #DnsChange.Status# + Value: #DnsChange.Record.Value# + + + + + + +If you have any questions regarding your hosting account, feel free to contact our support department at any time. + +Best regards +') +END +GO + + -- Procedures for Domain lookup service IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetAllPackages') diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Users/UserSettings.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Users/UserSettings.cs index d5dcb39a..da8ad05c 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Users/UserSettings.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Users/UserSettings.cs @@ -46,6 +46,7 @@ namespace WebsitePanel.EnterpriseServer public const string ORGANIZATION_USER_SUMMARY_LETTER = "OrganizationUserSummaryLetter"; public const string VPS_SUMMARY_LETTER = "VpsSummaryLetter"; public const string DOMAIN_EXPIRATION_LETTER = "DomainExpirationLetter"; + public const string DOMAIN_LOOKUP_LETTER = "DomainLookupLetter"; public const string WEB_POLICY = "WebPolicy"; public const string FTP_POLICY = "FtpPolicy"; public const string MAIL_POLICY = "MailPolicy"; diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs index 52c0bbc3..803bc8ef 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs @@ -4732,7 +4732,7 @@ namespace WebsitePanel.EnterpriseServer ); } - public static IDataReader GetDomainMXRecords(int domainId, DnsRecordType recordType) + public static IDataReader GetDomainDnsRecords(int domainId, DnsRecordType recordType) { return SqlHelper.ExecuteReader( ConnectionString, diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs index a500a869..088d9aa7 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs @@ -27,6 +27,7 @@ namespace WebsitePanel.EnterpriseServer { BackgroundTask topTask = TaskManager.TopTask; var domainUsers = new Dictionary(); + var checkedDomains = new List(); // get input parameters int daysBeforeNotify; @@ -65,6 +66,13 @@ namespace WebsitePanel.EnterpriseServer foreach (var domain in domains) { + if (checkedDomains.Contains(domain.DomainId)) + { + continue; + } + + checkedDomains.Add(domain.DomainId); + ServerController.UpdateDomainRegistrationData(domain); if (CheckDomainExpiration(domain.ExpirationDate, daysBeforeNotify)) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs index 414b7fd2..930f40c7 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs @@ -1,6 +1,8 @@ using System; +using System.Collections; using System.Collections.Generic; using System.Linq; +using System.Net.Mail; using System.Text; using WebsitePanel.Providers.DNS; using WebsitePanel.Providers.DomainLookup; @@ -22,7 +24,7 @@ namespace WebsitePanel.EnterpriseServer { BackgroundTask topTask = TaskManager.TopTask; - List domainsChanges = new List(); + List domainsChanges = new List(); // get input parameters string dnsServersString = (string)topTask.GetParamValue(DnsServersParameter); @@ -34,6 +36,14 @@ namespace WebsitePanel.EnterpriseServer return; } + if (String.IsNullOrEmpty((string)topTask.GetParamValue("MAIL_TO"))) + { + TaskManager.WriteWarning("The e-mail message has not been sent because 'Mail To' is empty."); + return; + } + + var user = UserController.GetUser(topTask.UserId); + var dnsServers = dnsServersString.Split(';'); var packages = ObjectUtils.CreateListFromDataReader(DataProvider.GetAllPackages()); @@ -48,11 +58,16 @@ namespace WebsitePanel.EnterpriseServer foreach (var domain in domains) { - DomainChanges domainChanges = new DomainChanges(); - domainChanges.Domain = domain.DomainName; + if (domainsChanges.Any(x => x.DomainName == domain.DomainName)) + { + continue; + } - var mxRecords = ObjectUtils.CreateListFromDataReader(DataProvider.GetDomainMXRecords(domain.DomainId, DnsRecordType.MX)); - var nsRecords = ObjectUtils.CreateListFromDataReader(DataProvider.GetDomainMXRecords(domain.DomainId, DnsRecordType.NS)); + DomainDnsChanges domainChanges = new DomainDnsChanges(); + domainChanges.DomainName = domain.DomainName; + + var mxRecords = ObjectUtils.CreateListFromDataReader(DataProvider.GetDomainDnsRecords(domain.DomainId, DnsRecordType.MX)); + var nsRecords = ObjectUtils.CreateListFromDataReader(DataProvider.GetDomainDnsRecords(domain.DomainId, DnsRecordType.NS)); //execute server foreach (var dnsServer in dnsServers) @@ -63,8 +78,8 @@ namespace WebsitePanel.EnterpriseServer FillRecordData(dnsMxRecords, domain, dnsServer); FillRecordData(dnsNsRecords, domain, dnsServer); - domainChanges.DnsChanges.Add(ApplyDomainRecordsChanges(mxRecords, dnsMxRecords, dnsServer)); - domainChanges.DnsChanges.Add(ApplyDomainRecordsChanges(nsRecords, dnsNsRecords, dnsServer)); + domainChanges.DnsChanges.AddRange(ApplyDomainRecordsChanges(mxRecords, dnsMxRecords, dnsServer)); + domainChanges.DnsChanges.AddRange(ApplyDomainRecordsChanges(nsRecords, dnsNsRecords, dnsServer)); } domainsChanges.Add(domainChanges); @@ -75,7 +90,7 @@ namespace WebsitePanel.EnterpriseServer if (changedDomains.Any()) { - SendMailMessage(changedDomains); + SendMailMessage(user,changedDomains); } } @@ -83,20 +98,20 @@ namespace WebsitePanel.EnterpriseServer #region Helpers - private IEnumerable FindDomainsWithChangedRecords(IEnumerable domainsChanges) + private IEnumerable FindDomainsWithChangedRecords(IEnumerable domainsChanges) { - var changedDomains = new List(); + var changedDomains = new List(); foreach (var domainChanges in domainsChanges) { - var firstTimeAdditon = domainChanges.DnsChanges.All(x => x.DnsRecordsCompare.All(dns => dns.DbRecord == null)); + var firstTimeAdditon = domainChanges.DnsChanges.All(x => x.Status == DomainDnsRecordStatuses.Added); if (firstTimeAdditon) { continue; } - bool isChanged = domainChanges.DnsChanges.Any(x => x.DnsRecordsCompare.Any(d => d.Status != DomainDnsRecordStatuses.NotChanged)); + bool isChanged = domainChanges.DnsChanges.Any(d => d.Status != DomainDnsRecordStatuses.NotChanged); if (isChanged) { @@ -107,10 +122,9 @@ namespace WebsitePanel.EnterpriseServer return changedDomains; } - private DomainDnsRecordsChanges ApplyDomainRecordsChanges(List dbRecords, List dnsRecords, string dnsServer) + private IEnumerable ApplyDomainRecordsChanges(List dbRecords, List dnsRecords, string dnsServer) { - var domainRecordChanges = new DomainDnsRecordsChanges(); - domainRecordChanges.DnsServer = dnsServer; + var dnsRecordChanges = new List(); var filteredDbRecords = dbRecords.Where(x => x.DnsServer == dnsServer); @@ -120,30 +134,26 @@ namespace WebsitePanel.EnterpriseServer if (dnsRecord != null) { - domainRecordChanges.DnsRecordsCompare.Add(new DomainDnsRecordCompare { DbRecord = record, DnsRecord = dnsRecord, Type= record.RecordType, Status = DomainDnsRecordStatuses.NotChanged }); + dnsRecordChanges.Add(new DnsRecordInfoChange { Record = record, Type = record.RecordType, Status = DomainDnsRecordStatuses.NotChanged, DnsServer = dnsServer }); dnsRecords.Remove(dnsRecord); } else { - domainRecordChanges.DnsRecordsCompare.Add(new DomainDnsRecordCompare { DbRecord = record, DnsRecord = null, Type = record.RecordType, Status = DomainDnsRecordStatuses.Removed }); + dnsRecordChanges.Add(new DnsRecordInfoChange { Record = record, Type = record.RecordType, Status = DomainDnsRecordStatuses.Removed, DnsServer = dnsServer }); RemoveRecord(record); - - domainRecordChanges.IsChanged = true; } } foreach (var record in dnsRecords) { - domainRecordChanges.DnsRecordsCompare.Add(new DomainDnsRecordCompare { DbRecord = null, DnsRecord = record, Type = record.RecordType, Status = DomainDnsRecordStatuses.Added }); + dnsRecordChanges.Add(new DnsRecordInfoChange { Record = record, Type = record.RecordType, Status = DomainDnsRecordStatuses.Added, DnsServer= dnsServer}); AddRecord(record); - - domainRecordChanges.IsChanged = true; } - return domainRecordChanges; + return dnsRecordChanges; } private void FillRecordData(IEnumerable records, DomainInfo domain, string dnsServer) @@ -187,52 +197,37 @@ namespace WebsitePanel.EnterpriseServer DataProvider.AddDomainDnsRecord(dnsRecord); } - private void SendMailMessage(IEnumerable domainsChanges) + private void SendMailMessage(UserInfo user, IEnumerable domainsChanges) { BackgroundTask topTask = TaskManager.TopTask; - var bodyTempalte = ObjectUtils.FillObjectFromDataReader(DataProvider.GetScheduleTaskEmailTemplate(TaskId)); - var domainRecordTemplate = ObjectUtils.FillObjectFromDataReader(DataProvider.GetScheduleTaskEmailTemplate(TaskId)); + UserSettings settings = UserController.GetUserSettings(user.UserId, UserSettings.DOMAIN_LOOKUP_LETTER); + + string from = settings["From"]; + + var bcc = settings["CC"]; + + string subject = settings["Subject"]; + string body = user.HtmlMail ? settings["HtmlBody"] : settings["TextBody"]; + bool isHtml = user.HtmlMail; + + MailPriority priority = MailPriority.Normal; + if (!String.IsNullOrEmpty(settings["Priority"])) + priority = (MailPriority)Enum.Parse(typeof(MailPriority), settings["Priority"], true); // input parameters - string mailFrom = "wsp-scheduler@noreply.net"; string mailTo = (string)topTask.GetParamValue("MAIL_TO"); - string mailSubject = "MX and NS notification"; - if (String.IsNullOrEmpty(mailTo)) - { - TaskManager.WriteWarning("The e-mail message has not been sent because 'Mail To' is empty."); - } - else - { - var tableRecords = new List(); + Hashtable items = new Hashtable(); - foreach (var domain in domainsChanges) - { - var changes = domain.DnsChanges; + items["user"] = user; + items["Domains"] = domainsChanges; - foreach (var dnsChanged in changes.Where(x=>x.IsChanged)) - { - foreach (var record in dnsChanged.DnsRecordsCompare.Where(x=>x.Status != DomainDnsRecordStatuses.NotChanged)) - { - var tableRow = Utils.ReplaceStringVariable(domainRecordTemplate.Template, "domain", domain.Domain); - tableRow = Utils.ReplaceStringVariable(tableRow, "dns", dnsChanged.DnsServer); - tableRow = Utils.ReplaceStringVariable(tableRow, "recordType", record.Type.ToString()); - tableRow = Utils.ReplaceStringVariable(tableRow, "dbRecord", record.DbRecord != null ? record.DbRecord.Value : "-"); - tableRow = Utils.ReplaceStringVariable(tableRow, "dnsRecord", record.DnsRecord != null ? record.DnsRecord.Value : "-"); + body = PackageController.EvaluateTemplate(body, items); - tableRecords.Add(tableRow); - } - } - } - - - var mailBody = Utils.ReplaceStringVariable(bodyTempalte.Template, "RecordRow", string.Join(" ", tableRecords)); - - // send mail message - MailHelper.SendMessage(mailFrom, mailTo, mailSubject, mailBody, true); - } - } + // send mail message + MailHelper.SendMessage(from, mailTo, bcc, subject, body, priority, isHtml); + } #endregion } diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordCompare.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DnsRecordInfoChange.cs similarity index 64% rename from WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordCompare.cs rename to WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DnsRecordInfoChange.cs index e21d0eac..183c16e0 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordCompare.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DnsRecordInfoChange.cs @@ -6,10 +6,10 @@ using WebsitePanel.Providers.DNS; namespace WebsitePanel.Providers.DomainLookup { - public class DomainDnsRecordCompare + public class DnsRecordInfoChange { - public DnsRecordInfo DbRecord { get; set; } - public DnsRecordInfo DnsRecord { get; set; } + public string DnsServer { get; set; } + public DnsRecordInfo Record { get; set; } public DomainDnsRecordStatuses Status { get; set; } public DnsRecordType Type { get; set; } } diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainChanges.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainChanges.cs deleted file mode 100644 index 9af977ae..00000000 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainChanges.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace WebsitePanel.Providers.DomainLookup -{ - public class DomainChanges - { - public string Domain { get; set; } - - public List DnsChanges { get; set; } - - public DomainChanges() - { - DnsChanges = new List(); - } - } -} diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsChanges.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsChanges.cs new file mode 100644 index 00000000..ff178e77 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsChanges.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WebsitePanel.Providers.DomainLookup +{ + public class DomainDnsChanges + { + public string DomainName { get; set; } + + public List DnsChanges { get; set; } + + public DomainDnsChanges() + { + DnsChanges = new List(); + } + } +} diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordsChanges.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordsChanges.cs deleted file mode 100644 index 27d07337..00000000 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordsChanges.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace WebsitePanel.Providers.DomainLookup -{ - public class DomainDnsRecordsChanges - { - public string DnsServer { get; set; } - - public bool IsChanged { get; set; } - - public List DnsRecordsCompare { get; set; } - - public DomainDnsRecordsChanges() - { - DnsRecordsCompare = new List(); - } - } -} diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/ScheduleTaskEmailTemplate.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/ScheduleTaskEmailTemplate.cs deleted file mode 100644 index 4680efed..00000000 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/ScheduleTaskEmailTemplate.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace WebsitePanel.Providers.DomainLookup -{ - public class ScheduleTaskEmailTemplate - { - public string TaskId { get; set; } - public string From { get; set; } - public string Subject { get; set; } - public string Template { get; set; } - } -} diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj index 43abd255..93fd43e7 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj @@ -86,11 +86,9 @@ - - - + + - diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/SettingsDomainLookupLetter.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/SettingsDomainLookupLetter.ascx.resx new file mode 100644 index 00000000..c0e9bcb8 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/SettingsDomainLookupLetter.ascx.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + High + + + Low + + + Normal + + + CC: + + + From: + + + HTML Body: + + + Priority: + + + Subject: + + + Text Body: + + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/UserAccountMailTemplateSettings.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/UserAccountMailTemplateSettings.ascx.resx index 5d73fb9d..fddd4fbc 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/UserAccountMailTemplateSettings.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/UserAccountMailTemplateSettings.ascx.resx @@ -144,4 +144,7 @@ Domain Expiration Letter + + Domain MX and NS Letter + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsDomainLookupLetter.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsDomainLookupLetter.ascx new file mode 100644 index 00000000..435167f8 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsDomainLookupLetter.ascx @@ -0,0 +1,42 @@ +<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="SettingsDomainLookupLetter.ascx.cs" Inherits="WebsitePanel.Portal.SettingsDomainLookupLetter" %> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + High + Normal + Low + +


+


+
\ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsDomainLookupLetter.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsDomainLookupLetter.ascx.cs new file mode 100644 index 00000000..b8a9951d --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsDomainLookupLetter.ascx.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using WebsitePanel.EnterpriseServer; + +namespace WebsitePanel.Portal +{ + public partial class SettingsDomainLookupLetter : WebsitePanelControlBase, IUserSettingsEditorControl + { + public void BindSettings(UserSettings settings) + { + txtFrom.Text = settings["From"]; + txtCC.Text = settings["CC"]; + txtSubject.Text = settings["Subject"]; + Utils.SelectListItem(ddlPriority, settings["Priority"]); + txtHtmlBody.Text = settings["HtmlBody"]; + txtTextBody.Text = settings["TextBody"]; + } + + public void SaveSettings(UserSettings settings) + { + settings["From"] = txtFrom.Text; + settings["CC"] = txtCC.Text; + settings["Subject"] = txtSubject.Text; + settings["Priority"] = ddlPriority.SelectedValue; + settings["HtmlBody"] = txtHtmlBody.Text; + settings["TextBody"] = txtTextBody.Text; + } + } +} \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsDomainLookupLetter.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsDomainLookupLetter.ascx.designer.cs new file mode 100644 index 00000000..afcf7988 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsDomainLookupLetter.ascx.designer.cs @@ -0,0 +1,123 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WebsitePanel.Portal { + + + public partial class SettingsDomainLookupLetter { + + /// + /// lblFrom control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblFrom; + + /// + /// txtFrom control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.TextBox txtFrom; + + /// + /// lblCC control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblCC; + + /// + /// txtCC control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.TextBox txtCC; + + /// + /// lblSubject control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblSubject; + + /// + /// txtSubject control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.TextBox txtSubject; + + /// + /// lblPriority control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblPriority; + + /// + /// ddlPriority control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.DropDownList ddlPriority; + + /// + /// lblHtmlBody control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblHtmlBody; + + /// + /// txtHtmlBody control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.TextBox txtHtmlBody; + + /// + /// lblTextBody control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblTextBody; + + /// + /// txtTextBody control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.TextBox txtTextBody; + } +} diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserAccountMailTemplateSettings.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserAccountMailTemplateSettings.ascx index 218e959e..45a3d489 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserAccountMailTemplateSettings.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserAccountMailTemplateSettings.ascx @@ -34,6 +34,10 @@ +
  • + +
  • diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserAccountMailTemplateSettings.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserAccountMailTemplateSettings.ascx.designer.cs index 6fd0c406..0822c99e 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserAccountMailTemplateSettings.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserAccountMailTemplateSettings.ascx.designer.cs @@ -84,6 +84,15 @@ namespace WebsitePanel.Portal { /// protected global::System.Web.UI.WebControls.HyperLink lnkDomainExpirationLetter; + /// + /// lnkDomainLookupLetter control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.HyperLink lnkDomainLookupLetter; + /// /// btnCancel control. /// diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitePanel.Portal.Modules.csproj b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitePanel.Portal.Modules.csproj index df6b3ef5..25d1e885 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitePanel.Portal.Modules.csproj +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitePanel.Portal.Modules.csproj @@ -314,6 +314,13 @@ SettingsDomainExpirationLetter.ascx + + SettingsDomainLookupLetter.ascx + ASPXCodeBehind + + + SettingsDomainLookupLetter.ascx + SettingsServiceLevels.ascx ASPXCodeBehind @@ -4269,6 +4276,7 @@ + ResXFileCodeGenerator DomainLookupView.ascx.Designer.cs @@ -4276,6 +4284,7 @@ + From 627572f1c766fddfa1cd9406fa9c762af17216f3 Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Wed, 10 Dec 2014 05:46:38 -0800 Subject: [PATCH 36/39] Domain Expiration tasks Fixes --- WebsitePanel/Database/update_db.sql | 21 +++++++++++++++++++ .../Servers/DomainInfo.cs | 1 + .../Data/DataProvider.cs | 5 +++++ .../SchedulerTasks/DomainExpirationTask.cs | 16 ++++++++++++-- .../Servers/ServerController.cs | 13 ++++++++++++ .../App_LocalResources/Domains.ascx.resx | 6 ++++++ .../DesktopModules/WebsitePanel/Domains.ascx | 2 +- .../WebsitePanel/Domains.ascx.cs | 21 ++++++++++++++----- 8 files changed, 77 insertions(+), 8 deletions(-) diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index 89d4b28f..aff39efa 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -6254,6 +6254,13 @@ BEGIN END GO +IF NOT EXISTS(SELECT * FROM sys.columns + WHERE [name] = N'LastUpdateDate' AND [object_id] = OBJECT_ID(N'Domains')) +BEGIN + ALTER TABLE [dbo].[Domains] ADD LastUpdateDate DateTime null; +END +GO + IF EXISTS (SELECT * FROM SYS.TABLES WHERE name = 'ScheduleTasksEmailTemplates') DROP TABLE ScheduleTasksEmailTemplates GO @@ -6639,6 +6646,18 @@ AS UPDATE [dbo].[Domains] SET [ExpirationDate] = @Date WHERE [DomainID] = @DomainId GO +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'UpdateDomainLastUpdateDate') +DROP PROCEDURE UpdateDomainLastUpdateDate +GO +CREATE PROCEDURE [dbo].UpdateDomainLastUpdateDate +( + @DomainId INT, + @Date DateTime +) +AS +UPDATE [dbo].[Domains] SET [LastUpdateDate] = @Date WHERE [DomainID] = @DomainId +GO + --Updating Domain procedures @@ -6673,6 +6692,7 @@ SELECT D.IsInstantAlias, D.CreationDate, D.ExpirationDate, + D.LastUpdateDate, D.IsDomainPointer FROM Domains AS D INNER JOIN PackagesTree(@PackageID, @Recursive) AS PT ON D.PackageID = PT.PackageID @@ -6754,6 +6774,7 @@ SET @sql = @sql + ' SELECT COUNT(DomainID) FROM @Domains;SELECT D.IsInstantAlias, D.IsDomainPointer, D.ExpirationDate, + D.LastUpdateDate, P.PackageName, ISNULL(SRV.ServerID, 0) AS ServerID, ISNULL(SRV.ServerName, '''') AS ServerName, diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Servers/DomainInfo.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Servers/DomainInfo.cs index d4a4c5d8..1fbca5da 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Servers/DomainInfo.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Servers/DomainInfo.cs @@ -150,5 +150,6 @@ namespace WebsitePanel.EnterpriseServer public DateTime? CreationDate { get; set; } public DateTime? ExpirationDate { get; set; } + public DateTime? LastUpdateDate { get; set; } } } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs index 803bc8ef..5edbdd3d 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs @@ -4787,6 +4787,11 @@ namespace WebsitePanel.EnterpriseServer UpdateDomainDate(domainId, "UpdateDomainExpirationDate", date); } + public static void UpdateDomainLastUpdateDate(int domainId, DateTime date) + { + UpdateDomainDate(domainId, "UpdateDomainLastUpdateDate", date); + } + private static void UpdateDomainDate(int domainId, string stroredProcedure, DateTime date) { SqlHelper.ExecuteReader( diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs index 088d9aa7..986118e4 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs @@ -53,9 +53,11 @@ namespace WebsitePanel.EnterpriseServer { var domains = ServerController.GetDomains(package.PackageId); - domains = domains.Where(x => !x.IsSubDomain && !x.IsDomainPointer).ToList(); //Selecting top-level domains + var subDomains = domains.Where(x => x.IsSubDomain).ToList(); - domains = domains.Where(x => x.CreationDate == null || x.ExpirationDate == null ? true : CheckDomainExpiration(x.ExpirationDate, daysBeforeNotify)).ToList(); // selecting expired or with empty expire date domains + var topLevelDomains = domains = domains.Where(x => !x.IsSubDomain && !x.IsDomainPointer).ToList(); //Selecting top-level domains + + domains = topLevelDomains.Where(x => x.CreationDate == null || x.ExpirationDate == null ? true : CheckDomainExpiration(x.ExpirationDate, daysBeforeNotify)).ToList(); // selecting expired or with empty expire date domains var domainUser = UserController.GetUser(package.UserId); @@ -80,6 +82,16 @@ namespace WebsitePanel.EnterpriseServer expiredDomains.Add(domain); } } + + foreach (var subDomain in subDomains) + { + var mainDomain = topLevelDomains.Where(x => subDomain.DomainName.Contains(x.DomainName)).OrderByDescending(s => s.DomainName.Length).FirstOrDefault(); ; + + if (mainDomain != null) + { + ServerController.UpdateDomainRegistrationData(subDomain, mainDomain.CreationDate, mainDomain.ExpirationDate); + } + } } expiredDomains = expiredDomains.GroupBy(p => p.DomainId).Select(g => g.First()).ToList(); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs index 059ba096..ecb354b9 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs @@ -2664,6 +2664,8 @@ namespace WebsitePanel.EnterpriseServer { try { + DataProvider.UpdateDomainLastUpdateDate(domain.DomainId, DateTime.Now); + var whoisResult = WhoisClient.Query(domain.DomainName); var createdDate = GetDomainInfoDate(whoisResult.Raw, _createdDatePatterns); @@ -2689,6 +2691,17 @@ namespace WebsitePanel.EnterpriseServer return domain; } + public static DomainInfo UpdateDomainRegistrationData(DomainInfo domain, DateTime? creationDate, DateTime? expirationDate) + { + domain.CreationDate = creationDate; + DataProvider.UpdateDomainCreationDate(domain.DomainId, creationDate.Value); + domain.ExpirationDate = expirationDate; + DataProvider.UpdateDomainExpirationDate(domain.DomainId, expirationDate.Value); + DataProvider.UpdateDomainLastUpdateDate(domain.DomainId, DateTime.Now); + + return domain; + } + private static DateTime? GetDomainInfoDate(string raw, IEnumerable patterns) { foreach (var createdRegex in patterns) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/Domains.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/Domains.ascx.resx index 66e3563a..3116414f 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/Domains.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/Domains.ascx.resx @@ -207,4 +207,10 @@ Expiration Date + + Not Checked + + + Non-Existent + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx index 7d3d6a3f..e7b86704 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx @@ -40,7 +40,7 @@ - <%# GetDomainExpirationDate(Eval("ExpirationDate"))%> + <%# GetDomainExpirationDate(Eval("ExpirationDate"), Eval("LastUpdateDate"))%> diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx.cs index acbf7863..77ccd425 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx.cs @@ -100,16 +100,27 @@ namespace WebsitePanel.Portal return GetLocalizedString("DomainType.Domain"); } - public string GetDomainExpirationDate(object expirationDateObject) + public string GetDomainExpirationDate(object expirationDateObject, object LastUpdateDateObject) { var expirationDate = expirationDateObject as DateTime?; + var lastUpdateDate = LastUpdateDateObject as DateTime?; - if (expirationDate == null) - return GetLocalizedString("DomainExpirationDate.Unknown"); - else if (expirationDate < DateTime.Now) + if (expirationDate != null && expirationDate < DateTime.Now) + { return GetLocalizedString("DomainExpirationDate.Expired"); - else + } + else if(expirationDate != null) + { return expirationDate.Value.ToShortDateString(); + } + else if (lastUpdateDate == null) + { + return GetLocalizedString("DomainExpirationDate.NotChecked"); + } + else + { + return GetLocalizedString("DomainExpirationDate.NotExist"); + } } protected void odsDomainsPaged_Selected(object sender, ObjectDataSourceStatusEventArgs e) From 9ddd934ff52be3f49e37d1c95d2b941eb835a09e Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Wed, 10 Dec 2014 07:02:49 -0800 Subject: [PATCH 37/39] Domain Expiraiota task added non-existen option and email tempalte --- WebsitePanel/Database/update_db.sql | 41 ++++++++++++++++++- .../SchedulerTasks/DomainExpirationTask.cs | 24 +++++++++-- .../DomainExpirationView.ascx.resx | 3 ++ .../DomainExpirationView.ascx | 8 ++++ .../DomainExpirationView.ascx.cs | 5 ++- .../DomainExpirationView.ascx.designer.cs | 18 ++++++++ 6 files changed, 92 insertions(+), 7 deletions(-) diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index aff39efa..c2c07f94 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -6218,6 +6218,12 @@ INSERT [dbo].[ScheduleTaskParameters] ([TaskID], [ParameterID], [DataTypeID], [D END GO +IF NOT EXISTS (SELECT * FROM [dbo].[ScheduleTaskParameters] WHERE [TaskID] = N'SCHEDULE_TASK_DOMAIN_EXPIRATION' AND [ParameterID]= N'INCLUDE_NONEXISTEN_DOMAINS' ) +BEGIN +INSERT [dbo].[ScheduleTaskParameters] ([TaskID], [ParameterID], [DataTypeID], [DefaultValue], [ParameterOrder]) VALUES (N'SCHEDULE_TASK_DOMAIN_EXPIRATION', N'INCLUDE_NONEXISTEN_DOMAINS', N'Boolean', N'false', 4) +END +GO + -- Domain lookup tables @@ -6332,6 +6338,29 @@ Please, find below details of your domain expiration information. + +

    + Please, find below details of your non-existen domains. +

    + + + + + + + + + + + + + + + + +
    DomainCustomer
    #Domain.DomainName##Domain.Customer#
    +
    +

    If you have any questions regarding your hosting account, feel free to contact our support department at any time. @@ -6358,9 +6387,7 @@ INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [Property Domain Expiration Information ================================= -

    Hello #user.FirstName#, -

    Please, find below details of your domain expiration information. @@ -6373,6 +6400,16 @@ Please, find below details of your domain expiration information. + +Please, find below details of your non-existen domains. + + + Domain: #Domain.DomainName# + Customer: #Domain.Customer# + + + + If you have any questions regarding your hosting account, feel free to contact our support department at any time. Best regards') diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs index 986118e4..f3cbf413 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs @@ -18,6 +18,7 @@ namespace WebsitePanel.EnterpriseServer private static readonly string DaysBeforeNotify = "DAYS_BEFORE"; private static readonly string MailToParameter = "MAIL_TO"; private static readonly string EnableNotification = "ENABLE_NOTIFICATION"; + private static readonly string IncludeNonExistenDomains = "INCLUDE_NONEXISTEN_DOMAINS"; private static readonly string MailBodyTemplateParameter = "MAIL_BODY"; @@ -28,16 +29,18 @@ namespace WebsitePanel.EnterpriseServer BackgroundTask topTask = TaskManager.TopTask; var domainUsers = new Dictionary(); var checkedDomains = new List(); + var expiredDomains = new List(); + var nonExistenDomains = new List(); // get input parameters int daysBeforeNotify; bool sendEmailNotifcation = Convert.ToBoolean( topTask.GetParamValue(EnableNotification)); + bool includeNonExistenDomains = Convert.ToBoolean(topTask.GetParamValue(IncludeNonExistenDomains)); // check input parameters if (String.IsNullOrEmpty((string)topTask.GetParamValue("MAIL_TO"))) { TaskManager.WriteWarning("The e-mail message has not been sent because 'Mail To' is empty."); - return; } @@ -47,7 +50,6 @@ namespace WebsitePanel.EnterpriseServer var packages = GetUserPackages(user.UserId, user.Role); - var expiredDomains = new List(); foreach (var package in packages) { @@ -81,6 +83,11 @@ namespace WebsitePanel.EnterpriseServer { expiredDomains.Add(domain); } + + if (domain.ExpirationDate == null && domain.CreationDate == null) + { + nonExistenDomains.Add(domain); + } } foreach (var subDomain in subDomains) @@ -98,7 +105,7 @@ namespace WebsitePanel.EnterpriseServer if (expiredDomains.Count > 0 && sendEmailNotifcation) { - SendMailMessage(user, expiredDomains, domainUsers); + SendMailMessage(user, expiredDomains, domainUsers, nonExistenDomains, includeNonExistenDomains); } } @@ -133,7 +140,7 @@ namespace WebsitePanel.EnterpriseServer return (date.Value - DateTime.Now).Days < daysBeforeNotify; } - private void SendMailMessage(UserInfo user, IEnumerable domains, Dictionary domainUsers) + private void SendMailMessage(UserInfo user, IEnumerable domains, Dictionary domainUsers, IEnumerable nonExistenDomains, bool includeNonExistenDomains) { BackgroundTask topTask = TaskManager.TopTask; @@ -160,6 +167,15 @@ namespace WebsitePanel.EnterpriseServer items["Domains"] = domains.Select(x => new { DomainName = x.DomainName, ExpirationDate = x.ExpirationDate, Customer = string.Format("{0} {1}", domainUsers[x.PackageId].FirstName, domainUsers[x.PackageId].LastName) }); + + items["IncludeNonExistenDomains"] = includeNonExistenDomains; + + items["NonExistenDomains"] = nonExistenDomains.Select(x => new + { + DomainName = x.DomainName, + Customer = string.Format("{0} {1}", domainUsers[x.PackageId].FirstName, domainUsers[x.PackageId].LastName) + }); + body = PackageController.EvaluateTemplate(body, items); diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/App_LocalResources/DomainExpirationView.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/App_LocalResources/DomainExpirationView.ascx.resx index 85ff7ae2..e5d6418b 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/App_LocalResources/DomainExpirationView.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/App_LocalResources/DomainExpirationView.ascx.resx @@ -120,6 +120,9 @@ Enable Client Notification + + Include Non-Existen Domains + Notify before (days) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/DomainExpirationView.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/DomainExpirationView.ascx index b74c3128..9f341587 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/DomainExpirationView.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/DomainExpirationView.ascx @@ -10,6 +10,14 @@
    + + + + + +
    + + diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/DomainExpirationView.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/DomainExpirationView.ascx.cs index e5e12907..80aaaf00 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/DomainExpirationView.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/DomainExpirationView.ascx.cs @@ -14,6 +14,7 @@ namespace WebsitePanel.Portal.ScheduleTaskControls private static readonly string DaysBeforeParameter = "DAYS_BEFORE"; private static readonly string MailToParameter = "MAIL_TO"; private static readonly string EnableNotificationParameter = "ENABLE_NOTIFICATION"; + private static readonly string IncludeNonExistenDomainsParameter = "INCLUDE_NONEXISTEN_DOMAINS"; protected void Page_Load(object sender, EventArgs e) { @@ -31,6 +32,7 @@ namespace WebsitePanel.Portal.ScheduleTaskControls this.SetParameter(this.txtDaysBeforeNotify, DaysBeforeParameter); this.SetParameter(this.txtMailTo, MailToParameter); this.SetParameter(this.cbEnableNotify, EnableNotificationParameter); + this.SetParameter(this.cbIncludeNonExistenDomains, IncludeNonExistenDomainsParameter); } /// @@ -42,8 +44,9 @@ namespace WebsitePanel.Portal.ScheduleTaskControls ScheduleTaskParameterInfo daysBefore = this.GetParameter(this.txtDaysBeforeNotify, DaysBeforeParameter); ScheduleTaskParameterInfo mailTo = this.GetParameter(this.txtMailTo, MailToParameter); ScheduleTaskParameterInfo enableNotification = this.GetParameter(this.cbEnableNotify, EnableNotificationParameter); + ScheduleTaskParameterInfo includeNonExistenDomains = this.GetParameter(this.cbIncludeNonExistenDomains, IncludeNonExistenDomainsParameter); - return new ScheduleTaskParameterInfo[3] { daysBefore, mailTo, enableNotification }; + return new ScheduleTaskParameterInfo[4] { daysBefore, mailTo, enableNotification, includeNonExistenDomains }; } } } \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/DomainExpirationView.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/DomainExpirationView.ascx.designer.cs index 994ed328..27ee5ba7 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/DomainExpirationView.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ScheduleTaskControls/DomainExpirationView.ascx.designer.cs @@ -30,6 +30,24 @@ namespace WebsitePanel.Portal.ScheduleTaskControls { /// protected global::System.Web.UI.WebControls.CheckBox cbEnableNotify; + /// + /// lblSendNonExistenDomains control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblSendNonExistenDomains; + + /// + /// cbIncludeNonExistenDomains control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.CheckBox cbIncludeNonExistenDomains; + /// /// lblMailTo control. /// From 6e00d5a2f2fc83987987041440b1291e13159f27 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Wed, 10 Dec 2014 11:59:13 -0500 Subject: [PATCH 38/39] Added tag build-2.1.0.480 for changeset f30488856e53 From 2617a78b8cdddf13bc420929ec8be7465e6eb8cd Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Wed, 10 Dec 2014 12:05:12 -0500 Subject: [PATCH 39/39] Added tag build-2.1.0.481 for changeset f30488856e53