@@ -6387,7 +6499,8 @@ Please, find below details of MX and NS changes.
DNS |
Type |
Status |
- Value |
+ Old Value |
+ New Value |
@@ -6396,7 +6509,8 @@ Please, find below details of MX and NS changes.
#DnsChange.DnsServer# |
#DnsChange.Type# |
#DnsChange.Status# |
- #DnsChange.Record.Value# |
+ #DnsChange.OldRecord.Value# |
+ #DnsChange.NewRecord.Value# |
@@ -6432,19 +6546,19 @@ INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [Property
Hello #user.FirstName#,
-Please, find below MX and NS Changes Information.
-
+Please, find below details of MX and NS changes.
- #Domain.DomainName#
+ #Domain.DomainName# - #DomainUsers[Domain.PackageId].FirstName# #DomainUsers[Domain.PackageId].LastName#
- DNS: #DnsChange.DnsServer#
- Type: #DnsChange.Type#
- Status: #DnsChange.Status#
- Value: #DnsChange.Record.Value#
+ DNS: #DnsChange.DnsServer#
+ Type: #DnsChange.Type#
+ Status: #DnsChange.Status#
+ Old Value: #DnsChange.OldRecord.Value#
+ New Value: #DnsChange.NewRecord.Value#
@@ -6492,7 +6606,7 @@ Hello #user.FirstName#,
-No MX and NS changes have been founded.
+No MX and NS changes have been found.
@@ -6581,6 +6695,24 @@ SELECT
WHERE [DomainId] = @DomainId AND [RecordType] = @RecordType
GO
+IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetDomainAllDnsRecords')
+DROP PROCEDURE GetDomainAllDnsRecords
+GO
+CREATE PROCEDURE [dbo].GetDomainAllDnsRecords
+(
+ @DomainId INT
+)
+AS
+SELECT
+ ID,
+ DomainId,
+ DnsServer,
+ RecordType,
+ Value,
+ Date
+ FROM [dbo].[DomainDnsRecords]
+ WHERE [DomainId] = @DomainId
+GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddDomainDnsRecord')
@@ -6668,6 +6800,20 @@ AS
UPDATE [dbo].[Domains] SET [LastUpdateDate] = @Date WHERE [DomainID] = @DomainId
GO
+IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'UpdateDomainDates')
+DROP PROCEDURE UpdateDomainDates
+GO
+CREATE PROCEDURE [dbo].UpdateDomainDates
+(
+ @DomainId INT,
+ @DomainCreationDate DateTime,
+ @DomainExpirationDate DateTime,
+ @DomainLastUpdateDate DateTime
+)
+AS
+UPDATE [dbo].[Domains] SET [CreationDate] = @DomainCreationDate, [ExpirationDate] = @DomainExpirationDate, [LastUpdateDate] = @DomainLastUpdateDate WHERE [DomainID] = @DomainId
+GO
+
--Updating Domain procedures
@@ -6912,9 +7058,17 @@ SET
WHERE ID = @Id
GO
+
+-- fix Windows 2012 Provider
+BEGIN
+UPDATE [dbo].[Providers] SET [EditorControl] = 'Windows2012' WHERE [ProviderName] = 'Windows2012'
+END
+GO
+
-- Hyper-V 2012 R2
IF NOT EXISTS (SELECT * FROM [dbo].[Providers] WHERE [ProviderName] = 'Microsoft Hyper-V 2012 R2')
BEGIN
INSERT [dbo].[Providers] ([ProviderID], [GroupID], [ProviderName], [DisplayName], [ProviderType], [EditorControl], [DisableAutoDiscovery]) VALUES (350, 30, N'HyperV2012R2', N'Microsoft Hyper-V 2012 R2', N'WebsitePanel.Providers.Virtualization.HyperV2012R2, WebsitePanel.Providers.Virtualization.HyperV2012R2', N'HyperV', 1)
END
-GO
\ No newline at end of file
+GO
+
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/RemoteDesktopServicesProxy.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/RemoteDesktopServicesProxy.cs
index 2bad8a81..8b6f1e32 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/RemoteDesktopServicesProxy.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/RemoteDesktopServicesProxy.cs
@@ -18,9 +18,8 @@ namespace WebsitePanel.EnterpriseServer {
using System.Web.Services.Protocols;
using System;
using System.Diagnostics;
-
- using WebsitePanel.Providers.Common;
using WebsitePanel.Providers.RemoteDesktopServices;
+ using WebsitePanel.Providers.Common;
using WebsitePanel.Providers.HostedSolution;
@@ -37,6 +36,8 @@ namespace WebsitePanel.EnterpriseServer {
private System.Threading.SendOrPostCallback AddRdsCollectionOperationCompleted;
+ private System.Threading.SendOrPostCallback EditRdsCollectionOperationCompleted;
+
private System.Threading.SendOrPostCallback GetRdsCollectionsPagedOperationCompleted;
private System.Threading.SendOrPostCallback RemoveRdsCollectionOperationCompleted;
@@ -87,6 +88,10 @@ namespace WebsitePanel.EnterpriseServer {
private System.Threading.SendOrPostCallback GetOrganizationRdsUsersCountOperationCompleted;
+ private System.Threading.SendOrPostCallback GetApplicationUsersOperationCompleted;
+
+ private System.Threading.SendOrPostCallback SetApplicationUsersOperationCompleted;
+
///
public esRemoteDesktopServices() {
this.Url = "http://localhost:9002/esRemoteDesktopServices.asmx";
@@ -101,6 +106,9 @@ namespace WebsitePanel.EnterpriseServer {
///
public event AddRdsCollectionCompletedEventHandler AddRdsCollectionCompleted;
+ ///
+ public event EditRdsCollectionCompletedEventHandler EditRdsCollectionCompleted;
+
///
public event GetRdsCollectionsPagedCompletedEventHandler GetRdsCollectionsPagedCompleted;
@@ -176,6 +184,12 @@ namespace WebsitePanel.EnterpriseServer {
///
public event GetOrganizationRdsUsersCountCompletedEventHandler GetOrganizationRdsUsersCountCompleted;
+ ///
+ public event GetApplicationUsersCompletedEventHandler GetApplicationUsersCompleted;
+
+ ///
+ public event SetApplicationUsersCompletedEventHandler SetApplicationUsersCompleted;
+
///
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/GetRdsCollection", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public RdsCollection GetRdsCollection(int collectionId) {
@@ -302,6 +316,50 @@ namespace WebsitePanel.EnterpriseServer {
}
}
+ ///
+ [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/EditRdsCollection", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
+ public ResultObject EditRdsCollection(int itemId, RdsCollection collection) {
+ object[] results = this.Invoke("EditRdsCollection", new object[] {
+ itemId,
+ collection});
+ return ((ResultObject)(results[0]));
+ }
+
+ ///
+ public System.IAsyncResult BeginEditRdsCollection(int itemId, RdsCollection collection, System.AsyncCallback callback, object asyncState) {
+ return this.BeginInvoke("EditRdsCollection", new object[] {
+ itemId,
+ collection}, callback, asyncState);
+ }
+
+ ///
+ public ResultObject EndEditRdsCollection(System.IAsyncResult asyncResult) {
+ object[] results = this.EndInvoke(asyncResult);
+ return ((ResultObject)(results[0]));
+ }
+
+ ///
+ public void EditRdsCollectionAsync(int itemId, RdsCollection collection) {
+ this.EditRdsCollectionAsync(itemId, collection, null);
+ }
+
+ ///
+ public void EditRdsCollectionAsync(int itemId, RdsCollection collection, object userState) {
+ if ((this.EditRdsCollectionOperationCompleted == null)) {
+ this.EditRdsCollectionOperationCompleted = new System.Threading.SendOrPostCallback(this.OnEditRdsCollectionOperationCompleted);
+ }
+ this.InvokeAsync("EditRdsCollection", new object[] {
+ itemId,
+ collection}, this.EditRdsCollectionOperationCompleted, userState);
+ }
+
+ private void OnEditRdsCollectionOperationCompleted(object arg) {
+ if ((this.EditRdsCollectionCompleted != null)) {
+ System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
+ this.EditRdsCollectionCompleted(this, new EditRdsCollectionCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
+ }
+ }
+
///
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/GetRdsCollectionsPaged", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public RdsCollectionPaged GetRdsCollectionsPaged(int itemId, string filterColumn, string filterValue, string sortColumn, int startRow, int maximumRows) {
@@ -510,9 +568,10 @@ namespace WebsitePanel.EnterpriseServer {
///
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/GetOrganizationRdsServersPaged", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
- public RdsServersPaged GetOrganizationRdsServersPaged(int itemId, string filterColumn, string filterValue, string sortColumn, int startRow, int maximumRows) {
+ public RdsServersPaged GetOrganizationRdsServersPaged(int itemId, [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] System.Nullable collectionId, string filterColumn, string filterValue, string sortColumn, int startRow, int maximumRows) {
object[] results = this.Invoke("GetOrganizationRdsServersPaged", new object[] {
itemId,
+ collectionId,
filterColumn,
filterValue,
sortColumn,
@@ -522,9 +581,10 @@ namespace WebsitePanel.EnterpriseServer {
}
///
- public System.IAsyncResult BeginGetOrganizationRdsServersPaged(int itemId, string filterColumn, string filterValue, string sortColumn, int startRow, int maximumRows, System.AsyncCallback callback, object asyncState) {
+ public System.IAsyncResult BeginGetOrganizationRdsServersPaged(int itemId, System.Nullable collectionId, string filterColumn, string filterValue, string sortColumn, int startRow, int maximumRows, System.AsyncCallback callback, object asyncState) {
return this.BeginInvoke("GetOrganizationRdsServersPaged", new object[] {
itemId,
+ collectionId,
filterColumn,
filterValue,
sortColumn,
@@ -539,17 +599,18 @@ namespace WebsitePanel.EnterpriseServer {
}
///
- public void GetOrganizationRdsServersPagedAsync(int itemId, string filterColumn, string filterValue, string sortColumn, int startRow, int maximumRows) {
- this.GetOrganizationRdsServersPagedAsync(itemId, filterColumn, filterValue, sortColumn, startRow, maximumRows, null);
+ public void GetOrganizationRdsServersPagedAsync(int itemId, System.Nullable collectionId, string filterColumn, string filterValue, string sortColumn, int startRow, int maximumRows) {
+ this.GetOrganizationRdsServersPagedAsync(itemId, collectionId, filterColumn, filterValue, sortColumn, startRow, maximumRows, null);
}
///
- public void GetOrganizationRdsServersPagedAsync(int itemId, string filterColumn, string filterValue, string sortColumn, int startRow, int maximumRows, object userState) {
+ public void GetOrganizationRdsServersPagedAsync(int itemId, System.Nullable collectionId, string filterColumn, string filterValue, string sortColumn, int startRow, int maximumRows, object userState) {
if ((this.GetOrganizationRdsServersPagedOperationCompleted == null)) {
this.GetOrganizationRdsServersPagedOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetOrganizationRdsServersPagedOperationCompleted);
}
this.InvokeAsync("GetOrganizationRdsServersPaged", new object[] {
itemId,
+ collectionId,
filterColumn,
filterValue,
sortColumn,
@@ -1452,6 +1513,103 @@ namespace WebsitePanel.EnterpriseServer {
}
}
+ ///
+ [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/GetApplicationUsers", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
+ public string[] GetApplicationUsers(int itemId, int collectionId, RemoteApplication remoteApp) {
+ object[] results = this.Invoke("GetApplicationUsers", new object[] {
+ itemId,
+ collectionId,
+ remoteApp});
+ return ((string[])(results[0]));
+ }
+
+ ///
+ public System.IAsyncResult BeginGetApplicationUsers(int itemId, int collectionId, RemoteApplication remoteApp, System.AsyncCallback callback, object asyncState) {
+ return this.BeginInvoke("GetApplicationUsers", new object[] {
+ itemId,
+ collectionId,
+ remoteApp}, callback, asyncState);
+ }
+
+ ///
+ public string[] EndGetApplicationUsers(System.IAsyncResult asyncResult) {
+ object[] results = this.EndInvoke(asyncResult);
+ return ((string[])(results[0]));
+ }
+
+ ///
+ public void GetApplicationUsersAsync(int itemId, int collectionId, RemoteApplication remoteApp) {
+ this.GetApplicationUsersAsync(itemId, collectionId, remoteApp, null);
+ }
+
+ ///
+ public void GetApplicationUsersAsync(int itemId, int collectionId, RemoteApplication remoteApp, object userState) {
+ if ((this.GetApplicationUsersOperationCompleted == null)) {
+ this.GetApplicationUsersOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetApplicationUsersOperationCompleted);
+ }
+ this.InvokeAsync("GetApplicationUsers", new object[] {
+ itemId,
+ collectionId,
+ remoteApp}, this.GetApplicationUsersOperationCompleted, userState);
+ }
+
+ private void OnGetApplicationUsersOperationCompleted(object arg) {
+ if ((this.GetApplicationUsersCompleted != null)) {
+ System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
+ this.GetApplicationUsersCompleted(this, new GetApplicationUsersCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
+ }
+ }
+
+ ///
+ [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/SetApplicationUsers", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
+ public ResultObject SetApplicationUsers(int itemId, int collectionId, RemoteApplication remoteApp, string[] users) {
+ object[] results = this.Invoke("SetApplicationUsers", new object[] {
+ itemId,
+ collectionId,
+ remoteApp,
+ users});
+ return ((ResultObject)(results[0]));
+ }
+
+ ///
+ public System.IAsyncResult BeginSetApplicationUsers(int itemId, int collectionId, RemoteApplication remoteApp, string[] users, System.AsyncCallback callback, object asyncState) {
+ return this.BeginInvoke("SetApplicationUsers", new object[] {
+ itemId,
+ collectionId,
+ remoteApp,
+ users}, callback, asyncState);
+ }
+
+ ///
+ public ResultObject EndSetApplicationUsers(System.IAsyncResult asyncResult) {
+ object[] results = this.EndInvoke(asyncResult);
+ return ((ResultObject)(results[0]));
+ }
+
+ ///
+ public void SetApplicationUsersAsync(int itemId, int collectionId, RemoteApplication remoteApp, string[] users) {
+ this.SetApplicationUsersAsync(itemId, collectionId, remoteApp, users, null);
+ }
+
+ ///
+ public void SetApplicationUsersAsync(int itemId, int collectionId, RemoteApplication remoteApp, string[] users, object userState) {
+ if ((this.SetApplicationUsersOperationCompleted == null)) {
+ this.SetApplicationUsersOperationCompleted = new System.Threading.SendOrPostCallback(this.OnSetApplicationUsersOperationCompleted);
+ }
+ this.InvokeAsync("SetApplicationUsers", new object[] {
+ itemId,
+ collectionId,
+ remoteApp,
+ users}, this.SetApplicationUsersOperationCompleted, userState);
+ }
+
+ private void OnSetApplicationUsersOperationCompleted(object arg) {
+ if ((this.SetApplicationUsersCompleted != null)) {
+ System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
+ this.SetApplicationUsersCompleted(this, new SetApplicationUsersCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
+ }
+ }
+
///
public new void CancelAsync(object userState) {
base.CancelAsync(userState);
@@ -1536,6 +1694,32 @@ namespace WebsitePanel.EnterpriseServer {
}
}
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ public delegate void EditRdsCollectionCompletedEventHandler(object sender, EditRdsCollectionCompletedEventArgs e);
+
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.ComponentModel.DesignerCategoryAttribute("code")]
+ public partial class EditRdsCollectionCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+
+ private object[] results;
+
+ internal EditRdsCollectionCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
+ base(exception, cancelled, userState) {
+ this.results = results;
+ }
+
+ ///
+ public ResultObject Result {
+ get {
+ this.RaiseExceptionIfNecessary();
+ return ((ResultObject)(this.results[0]));
+ }
+ }
+ }
+
///
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
public delegate void GetRdsCollectionsPagedCompletedEventHandler(object sender, GetRdsCollectionsPagedCompletedEventArgs e);
@@ -2185,4 +2369,56 @@ namespace WebsitePanel.EnterpriseServer {
}
}
}
+
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ public delegate void GetApplicationUsersCompletedEventHandler(object sender, GetApplicationUsersCompletedEventArgs e);
+
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.ComponentModel.DesignerCategoryAttribute("code")]
+ public partial class GetApplicationUsersCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+
+ private object[] results;
+
+ internal GetApplicationUsersCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
+ base(exception, cancelled, userState) {
+ this.results = results;
+ }
+
+ ///
+ public string[] Result {
+ get {
+ this.RaiseExceptionIfNecessary();
+ return ((string[])(this.results[0]));
+ }
+ }
+ }
+
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ public delegate void SetApplicationUsersCompletedEventHandler(object sender, SetApplicationUsersCompletedEventArgs e);
+
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.ComponentModel.DesignerCategoryAttribute("code")]
+ public partial class SetApplicationUsersCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+
+ private object[] results;
+
+ internal SetApplicationUsersCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
+ base(exception, cancelled, userState) {
+ this.results = results;
+ }
+
+ ///
+ public ResultObject Result {
+ get {
+ this.RaiseExceptionIfNecessary();
+ return ((ResultObject)(this.results[0]));
+ }
+ }
+ }
}
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs
index b7e2acf0..bab3c724 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs
@@ -1910,9 +1910,9 @@ namespace WebsitePanel.EnterpriseServer
public static IDataReader GetProcessBackgroundTasks(BackgroundTaskStatus status)
{
- return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
- ObjectQualifier + "GetProcessBackgroundTasks",
- new SqlParameter("@status", (int)status));
+ return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
+ ObjectQualifier + "GetProcessBackgroundTasks",
+ new SqlParameter("@status", (int)status));
}
public static IDataReader GetBackgroundTopTask(Guid guid)
@@ -4744,9 +4744,19 @@ namespace WebsitePanel.EnterpriseServer
);
}
+ public static IDataReader GetDomainAllDnsRecords(int domainId)
+ {
+ return SqlHelper.ExecuteReader(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "GetDomainAllDnsRecords",
+ new SqlParameter("@DomainId", domainId)
+ );
+ }
+
public static void AddDomainDnsRecord(DnsRecordInfo domainDnsRecord)
{
- SqlHelper.ExecuteReader(
+ SqlHelper.ExecuteNonQuery(
ConnectionString,
CommandType.StoredProcedure,
"AddDomainDnsRecord",
@@ -4770,7 +4780,7 @@ namespace WebsitePanel.EnterpriseServer
public static void DeleteDomainDnsRecord(int id)
{
- SqlHelper.ExecuteReader(
+ SqlHelper.ExecuteNonQuery(
ConnectionString,
CommandType.StoredProcedure,
"DeleteDomainDnsRecord",
@@ -4795,7 +4805,7 @@ namespace WebsitePanel.EnterpriseServer
private static void UpdateDomainDate(int domainId, string stroredProcedure, DateTime date)
{
- SqlHelper.ExecuteReader(
+ SqlHelper.ExecuteNonQuery(
ConnectionString,
CommandType.StoredProcedure,
stroredProcedure,
@@ -4804,6 +4814,19 @@ namespace WebsitePanel.EnterpriseServer
);
}
+ public static void UpdateDomainDates(int domainId, DateTime? domainCreationDate, DateTime? domainExpirationDate, DateTime? domainLastUpdateDate)
+ {
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "UpdateDomainDates",
+ new SqlParameter("@DomainId", domainId),
+ new SqlParameter("@DomainCreationDate", domainCreationDate),
+ new SqlParameter("@DomainExpirationDate", domainExpirationDate),
+ new SqlParameter("@DomainLastUpdateDate", domainLastUpdateDate)
+ );
+ }
+
#endregion
}
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DnsServers/DnsServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DnsServers/DnsServerController.cs
index 8a5d68e3..44ec6c81 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DnsServers/DnsServerController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DnsServers/DnsServerController.cs
@@ -29,6 +29,8 @@
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
+using System.Globalization;
+using System.Linq;
using System.Xml;
using System.Xml.Serialization;
using WebsitePanel.Providers;
@@ -38,6 +40,12 @@ namespace WebsitePanel.EnterpriseServer
{
public class DnsServerController : IImportController, IBackupController
{
+ private static string GetAsciiZoneName(string zoneName)
+ {
+ var idn = new IdnMapping();
+ return idn.GetAscii(zoneName);
+ }
+
private static DNSServer GetDNSServer(int serviceId)
{
DNSServer dns = new DNSServer();
@@ -55,6 +63,9 @@ namespace WebsitePanel.EnterpriseServer
// get DNS provider
DNSServer dns = GetDNSServer(serviceId);
+ // Ensure zoneName is in ascii before saving to database
+ zoneName = GetAsciiZoneName(zoneName);
+
// check if zone already exists
if (dns.ZoneExists(zoneName))
return BusinessErrorCodes.ERROR_DNS_ZONE_EXISTS;
@@ -199,7 +210,7 @@ namespace WebsitePanel.EnterpriseServer
{
// zone item
DnsZone zone = primaryZone ? new DnsZone() : new SecondaryDnsZone();
- zone.Name = zoneName;
+ zone.Name = GetAsciiZoneName(zoneName);
zone.PackageId = spaceId;
zone.ServiceId = serviceId;
int zoneItemId = PackageController.AddPackageItem(zone);
@@ -280,6 +291,8 @@ namespace WebsitePanel.EnterpriseServer
foreach (GlobalDnsRecord record in records)
{
+ domainName = GetAsciiZoneName(domainName);
+
DnsRecord rr = new DnsRecord();
rr.RecordType = (DnsRecordType)Enum.Parse(typeof(DnsRecordType), record.RecordType, true);
rr.RecordName = Utils.ReplaceStringVariable(record.RecordName, "host_name", hostName, true);
@@ -359,8 +372,11 @@ namespace WebsitePanel.EnterpriseServer
DNSServer dns = new DNSServer();
ServiceProviderProxy.Init(dns, serviceId);
+ // IDN: The list of importable names is populated with unicode names, to make it easier for the user
+ var idn = new IdnMapping();
+
if (itemType == typeof(DnsZone))
- items.AddRange(dns.GetZones());
+ items.AddRange(dns.GetZones().Select(z => idn.GetUnicode(z)));
return items;
}
@@ -377,7 +393,7 @@ namespace WebsitePanel.EnterpriseServer
{
// add DNS zone
DnsZone zone = new DnsZone();
- zone.Name = itemName;
+ zone.Name = GetAsciiZoneName(itemName);
zone.ServiceId = serviceId;
zone.PackageId = packageId;
int zoneId = PackageController.AddPackageItem(zone);
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/ReportController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/ReportController.cs
index fab50dff..ecf6ebdc 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/ReportController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/ReportController.cs
@@ -278,11 +278,16 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
}
private static void PopulateOrganizationData(Organization org, EnterpriseSolutionStatisticsReport report, string topReseller)
- {
+ {
+ TaskManager.Write("Stat populate organization data "+org.Name);
+
if (report.ExchangeReport != null)
{
+
try
{
+ TaskManager.Write("Populate exchange report items");
+
PopulateExchangeReportItems(org, report, topReseller);
}
catch(Exception ex)
@@ -295,6 +300,8 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
{
try
{
+ TaskManager.Write("Populate populate CRM report items");
+
PopulateCRMReportItems(org, report, topReseller);
}
catch(Exception ex)
@@ -307,6 +314,8 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
{
try
{
+ TaskManager.Write("Populate SharePoint item ");
+
PopulateSharePointItem(org, report, topReseller);
}
catch(Exception ex)
@@ -319,6 +328,8 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
{
try
{
+ TaskManager.Write("Populate Lync report items");
+
PopulateLyncReportItems(org, report, topReseller);
}
catch (Exception ex)
@@ -331,6 +342,8 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
{
try
{
+ TaskManager.Write("Populate Organization statistics report");
+
PopulateOrganizationStatisticsReport(org, report, topReseller);
}
catch(Exception ex)
@@ -339,7 +352,7 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
}
}
-
+ TaskManager.Write("End populate organization data " + org.Name);
}
private static int GetExchangeServiceID(int packageId)
@@ -408,6 +421,8 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
private static void PopulateExchangeReportItems(Organization org, EnterpriseSolutionStatisticsReport report, string topReseller)
{
+ TaskManager.Write("Exchange Report Items " + org.Name);
+
//Check if exchange organization
if (string.IsNullOrEmpty(org.GlobalAddressList))
return;
@@ -420,10 +435,14 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
}
catch (Exception ex)
{
+ TaskManager.WriteError(ex);
+
throw new ApplicationException(
string.Format("Could not get mailboxes for current organization {0}", org.Id), ex);
}
+ TaskManager.WriteParameter("mailboxes.Count", mailboxes.Count);
+
try
{
int exchangeServiceId = GetExchangeServiceID(org.PackageId);
@@ -431,6 +450,8 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
}
catch(Exception ex)
{
+ TaskManager.WriteError(ex);
+
throw new ApplicationException(
string.Format("Could not get exchange server. PackageId: {0}", org.PackageId), ex);
}
@@ -440,6 +461,8 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
{
try
{
+ TaskManager.WriteParameter("mailbox", mailbox.UserPrincipalName);
+
stats = null;
try
{
@@ -448,6 +471,8 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
}
catch (Exception ex)
{
+ TaskManager.WriteError(ex);
+
TaskManager.WriteError(ex, "Could not get mailbox statistics. AccountName: {0}",
mailbox.UserPrincipalName);
}
@@ -466,6 +491,8 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
stats.BlackberryEnabled = BlackBerryController.CheckBlackBerryUserExists(mailbox.AccountId);
report.ExchangeReport.Items.Add(stats);
+
+ TaskManager.Write("Items.Add");
}
}
catch(Exception ex)
@@ -473,7 +500,8 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
TaskManager.WriteError(ex);
}
}
-
+
+ TaskManager.Write("End Populate Exchange Report Items " + org.Name);
}
@@ -547,6 +575,8 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
private static void PopulateSpaceData(int packageId, EnterpriseSolutionStatisticsReport report, string topReseller)
{
+ TaskManager.Write("Populate SpaceData " + packageId);
+
List organizations;
try
@@ -570,10 +600,14 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
TaskManager.WriteError(ex);
}
}
+
+ TaskManager.Write("End Populate SpaceData " + packageId);
}
private static void PopulateUserData(UserInfo user, EnterpriseSolutionStatisticsReport report, string topReseller)
{
+ TaskManager.Write("Populate UserData " + user.Username);
+
DataSet ds;
try
{
@@ -596,11 +630,14 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
TaskManager.WriteError(ex);
}
}
-
+
+ TaskManager.Write("End Populate UserData " + user.Username);
}
private static void GetUsersData(EnterpriseSolutionStatisticsReport report, int userId, bool generateExchangeReport, bool generateSharePointReport, bool generateCRMReport, bool generateOrganizationReport, bool generateLyncReport, string topReseller)
{
+ TaskManager.Write("Get UsersData " + userId);
+
List users;
try
{
@@ -611,9 +648,12 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
throw new ApplicationException("Cannot get users for report", ex);
}
+ TaskManager.WriteParameter("users.Count", users.Count);
foreach (UserInfo user in users)
{
+ TaskManager.WriteParameter("User", user.Username);
+
try
{
PopulateUserData(user, report, topReseller);
@@ -631,11 +671,16 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
{
TaskManager.WriteError(ex);
}
- }
+ }
+
+ TaskManager.Write("End get UsersData " + userId);
+
}
public static EnterpriseSolutionStatisticsReport GetEnterpriseSolutionStatisticsReport(int userId, bool generateExchangeReport, bool generateSharePointReport, bool generateCRMReport, bool generateOrganizationReport, bool generateLyncReport)
{
+ TaskManager.Write("Get enterprise solution statistics report " + userId);
+
EnterpriseSolutionStatisticsReport report = new EnterpriseSolutionStatisticsReport();
if (generateExchangeReport || generateOrganizationReport)
@@ -647,7 +692,6 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
if (generateLyncReport || generateOrganizationReport)
report.LyncReport = new LyncStatisticsReport();
-
if (generateCRMReport || generateOrganizationReport)
report.CRMReport = new CRMStatisticsReport();
@@ -664,6 +708,8 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
TaskManager.WriteError(ex, "Cannot get enterprise solution statistics report");
}
+ TaskManager.Write("End get enterprise solution statistics report " + userId);
+
return report;
}
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs
index e9f2f848..623b6a08 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs
@@ -980,11 +980,13 @@ namespace WebsitePanel.EnterpriseServer
homeFolder.PackageId = packageId;
homeFolder.Name = path;
+ int res = AddPackageItem(homeFolder);
+
// Added By Haya
UpdatePackageHardQuota(packageId);
// save package item
- return AddPackageItem(homeFolder);
+ return res;
}
public static DateTime GetPackageBandwidthUpdate(int packageId)
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/RemoteDesktopServices/RemoteDesktopServicesController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/RemoteDesktopServices/RemoteDesktopServicesController.cs
index c3c154a7..2c21c32f 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/RemoteDesktopServices/RemoteDesktopServicesController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/RemoteDesktopServices/RemoteDesktopServicesController.cs
@@ -68,6 +68,11 @@ namespace WebsitePanel.EnterpriseServer
return AddRdsCollectionInternal(itemId, collection);
}
+ public static ResultObject EditRdsCollection(int itemId, RdsCollection collection)
+ {
+ return EditRdsCollectionInternal(itemId, collection);
+ }
+
public static RdsCollectionPaged GetRdsCollectionsPaged(int itemId, string filterColumn, string filterValue, string sortColumn, int startRow, int maximumRows)
{
return GetRdsCollectionsPagedInternal(itemId, filterColumn, filterValue, sortColumn, startRow, maximumRows);
@@ -93,9 +98,9 @@ namespace WebsitePanel.EnterpriseServer
return GetFreeRdsServersPagedInternal(filterColumn, filterValue, sortColumn, startRow, maximumRows);
}
- public static RdsServersPaged GetOrganizationRdsServersPaged(int itemId, string filterColumn, string filterValue, string sortColumn, int startRow, int maximumRows)
+ public static RdsServersPaged GetOrganizationRdsServersPaged(int itemId, int? collectionId, string filterColumn, string filterValue, string sortColumn, int startRow, int maximumRows)
{
- return GetOrganizationRdsServersPagedInternal(itemId, filterColumn, filterValue, sortColumn, startRow, maximumRows);
+ return GetOrganizationRdsServersPagedInternal(itemId, collectionId, filterColumn, filterValue, sortColumn, startRow, maximumRows);
}
public static RdsServersPaged GetOrganizationFreeRdsServersPaged(int itemId, string filterColumn, string filterValue, string sortColumn, int startRow, int maximumRows)
@@ -198,6 +203,16 @@ namespace WebsitePanel.EnterpriseServer
return GetOrganizationRdsUsersCountInternal(itemId);
}
+ public static List GetApplicationUsers(int itemId, int collectionId, RemoteApplication remoteApp)
+ {
+ return GetApplicationUsersInternal(itemId, collectionId, remoteApp);
+ }
+
+ public static ResultObject SetApplicationUsers(int itemId, int collectionId, RemoteApplication remoteApp, List users)
+ {
+ return SetApplicationUsersInternal(itemId, collectionId, remoteApp, users);
+ }
+
private static RdsCollection GetRdsCollectionInternal(int collectionId)
{
var collection = ObjectUtils.FillObjectFromDataReader(DataProvider.GetRDSCollectionById(collectionId));
@@ -285,6 +300,58 @@ namespace WebsitePanel.EnterpriseServer
return result;
}
+ private static ResultObject EditRdsCollectionInternal(int itemId, RdsCollection collection)
+ {
+ var result = TaskManager.StartResultTask("REMOTE_DESKTOP_SERVICES", "EDIT_RDS_COLLECTION");
+
+ try
+ {
+ Organization org = OrganizationController.GetOrganization(itemId);
+
+ if (org == null)
+ {
+ result.IsSuccess = false;
+ result.AddError("", new NullReferenceException("Organization not found"));
+ return result;
+ }
+
+ var rds = GetRemoteDesktopServices(GetRemoteDesktopServiceID(org.PackageId));
+ var existingServers =
+ ObjectUtils.CreateListFromDataReader(DataProvider.GetRDSServersByCollectionId(collection.Id)).ToList();
+ var removedServers = existingServers.Where(x => !collection.Servers.Select(y => y.Id).Contains(x.Id));
+ var newServers = collection.Servers.Where(x => !existingServers.Select(y => y.Id).Contains(x.Id));
+
+ foreach(var server in removedServers)
+ {
+ DataProvider.RemoveRDSServerFromCollection(server.Id);
+ }
+
+ rds.AddRdsServersToDeployment(newServers.ToArray());
+
+ foreach (var server in newServers)
+ {
+ DataProvider.AddRDSServerToCollection(server.Id, collection.Id);
+ }
+ }
+ catch (Exception ex)
+ {
+ result.AddError("REMOTE_DESKTOP_SERVICES_ADD_RDS_COLLECTION", ex);
+ }
+ finally
+ {
+ if (!result.IsSuccess)
+ {
+ TaskManager.CompleteResultTask(result);
+ }
+ else
+ {
+ TaskManager.CompleteResultTask();
+ }
+ }
+
+ return result;
+ }
+
private static RdsCollectionPaged GetRdsCollectionsPagedInternal(int itemId, string filterColumn, string filterValue, string sortColumn, int startRow, int maximumRows)
{
DataSet ds = DataProvider.GetRDSCollectionsPaged(itemId, filterColumn, filterValue, sortColumn, startRow, maximumRows);
@@ -425,9 +492,9 @@ namespace WebsitePanel.EnterpriseServer
return result;
}
- private static RdsServersPaged GetOrganizationRdsServersPagedInternal(int itemId, string filterColumn, string filterValue, string sortColumn, int startRow, int maximumRows)
+ private static RdsServersPaged GetOrganizationRdsServersPagedInternal(int itemId, int? collectionId, string filterColumn, string filterValue, string sortColumn, int startRow, int maximumRows)
{
- DataSet ds = DataProvider.GetRDSServersPaged(itemId, null, filterColumn, filterValue, sortColumn, startRow, maximumRows, ignoreRdsCollectionId: true);
+ DataSet ds = DataProvider.GetRDSServersPaged(itemId, collectionId, filterColumn, filterValue, sortColumn, startRow, maximumRows, ignoreRdsCollectionId: !collectionId.HasValue);
RdsServersPaged result = new RdsServersPaged();
result.RecordsCount = (int)ds.Tables[0].Rows[0][0];
@@ -775,7 +842,7 @@ namespace WebsitePanel.EnterpriseServer
private static List GetRdsCollectionUsersInternal(int collectionId)
{
return ObjectUtils.CreateListFromDataReader(DataProvider.GetRDSCollectionUsersByRDSCollectionId(collectionId));
- }
+ }
private static ResultObject SetUsersToRdsCollectionInternal(int itemId, int collectionId, List users)
{
@@ -855,6 +922,61 @@ namespace WebsitePanel.EnterpriseServer
return result;
}
+ private static List GetApplicationUsersInternal(int itemId, int collectionId, RemoteApplication remoteApp)
+ {
+ var result = new List();
+ Organization org = OrganizationController.GetOrganization(itemId);
+
+ if (org == null)
+ {
+ return result;
+ }
+
+ var rds = GetRemoteDesktopServices(GetRemoteDesktopServiceID(org.PackageId));
+ var collection = GetRdsCollection(collectionId);
+
+ result.AddRange(rds.GetApplicationUsers(collection.Name, remoteApp.DisplayName));
+
+ return result;
+ }
+
+ private static ResultObject SetApplicationUsersInternal(int itemId, int collectionId, RemoteApplication remoteApp, List users)
+ {
+ var result = TaskManager.StartResultTask("REMOTE_DESKTOP_SERVICES", "SET_REMOTE_APP_USERS");
+
+ try
+ {
+ Organization org = OrganizationController.GetOrganization(itemId);
+ if (org == null)
+ {
+ result.IsSuccess = false;
+ result.AddError("", new NullReferenceException("Organization not found"));
+ return result;
+ }
+
+ var collection = GetRdsCollection(collectionId);
+ var rds = GetRemoteDesktopServices(GetRemoteDesktopServiceID(org.PackageId));
+ rds.SetApplicationUsers(collection.Name, remoteApp, users.ToArray());
+ }
+ catch (Exception ex)
+ {
+ result.AddError("REMOTE_DESKTOP_SERVICES_SET_REMOTE_APP_USERS", ex);
+ }
+ finally
+ {
+ if (!result.IsSuccess)
+ {
+ TaskManager.CompleteResultTask(result);
+ }
+ else
+ {
+ TaskManager.CompleteResultTask();
+ }
+ }
+
+ return result;
+ }
+
private static ResultObject AddRemoteApplicationToCollectionInternal(int itemId, RdsCollection collection, RemoteApplication remoteApp)
{
var result = TaskManager.StartResultTask("REMOTE_DESKTOP_SERVICES", "ADD_REMOTE_APP_TO_COLLECTION");
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs
index 3c08a751..ef0cce8d 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs
@@ -5,6 +5,7 @@ using System.Linq;
using System.Net.Mail;
using System.Text;
using System.Text.RegularExpressions;
+using System.Threading;
using WebsitePanel.Providers.DomainLookup;
using Whois.NET;
@@ -31,6 +32,8 @@ namespace WebsitePanel.EnterpriseServer
var checkedDomains = new List();
var expiredDomains = new List();
var nonExistenDomains = new List();
+ var allDomains = new List();
+ var allTopLevelDomains = new List();
// get input parameters
int daysBeforeNotify;
@@ -55,11 +58,11 @@ namespace WebsitePanel.EnterpriseServer
{
var domains = ServerController.GetDomains(package.PackageId);
- var subDomains = domains.Where(x => x.IsSubDomain).ToList();
+ allDomains.AddRange(domains);
- var topLevelDomains = domains = domains.Where(x => !x.IsSubDomain && !x.IsDomainPointer).ToList(); //Selecting top-level domains
+ 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
+ allTopLevelDomains.AddRange(domains);
var domainUser = UserController.GetUser(package.UserId);
@@ -88,16 +91,30 @@ namespace WebsitePanel.EnterpriseServer
{
nonExistenDomains.Add(domain);
}
+
+ Thread.Sleep(100);
}
+ }
- foreach (var subDomain in subDomains)
+ var subDomains = allDomains.Where(x => x.ExpirationDate == null || CheckDomainExpiration(x.ExpirationDate, daysBeforeNotify)).GroupBy(p => p.DomainId).Select(g => g.First()).ToList();
+ allTopLevelDomains = allTopLevelDomains.GroupBy(p => p.DomainId).Select(g => g.First()).ToList();
+
+ foreach (var subDomain in subDomains)
+ {
+ var mainDomain = allTopLevelDomains.Where(x => subDomain.DomainId != x.DomainId && subDomain.DomainName.ToLowerInvariant().Contains(x.DomainName.ToLowerInvariant())).OrderByDescending(s => s.DomainName.Length).FirstOrDefault(); ;
+
+ if (mainDomain != null)
{
- var mainDomain = topLevelDomains.Where(x => subDomain.DomainName.ToLowerInvariant().Contains(x.DomainName.ToLowerInvariant())).OrderByDescending(s => s.DomainName.Length).FirstOrDefault(); ;
+ ServerController.UpdateDomainRegistrationData(subDomain, mainDomain.CreationDate, mainDomain.ExpirationDate);
- if (mainDomain != null)
+ var nonExistenDomain = nonExistenDomains.FirstOrDefault(x => subDomain.DomainId == x.DomainId);
+
+ if (nonExistenDomain != null)
{
- ServerController.UpdateDomainRegistrationData(subDomain, mainDomain.CreationDate, mainDomain.ExpirationDate);
+ nonExistenDomains.Remove(nonExistenDomain);
}
+
+ Thread.Sleep(100);
}
}
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs
index a1a49534..d5e042c1 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs
@@ -5,6 +5,7 @@ using System.Linq;
using System.Net.Mail;
using System.Text;
using System.Text.RegularExpressions;
+using System.Threading;
using WebsitePanel.Providers.DNS;
using WebsitePanel.Providers.DomainLookup;
using WebsitePanel.Server;
@@ -25,12 +26,15 @@ namespace WebsitePanel.EnterpriseServer
private const string MxRecordPattern = @"mail exchanger = (.+)";
private const string NsRecordPattern = @"nameserver = (.+)";
-
+ private const string DnsTimeOutMessage = @"dns request timed out";
+ private const int DnsTimeOutRetryCount = 3;
+
public override void DoWork()
{
BackgroundTask topTask = TaskManager.TopTask;
List domainsChanges = new List();
+ var domainUsers = new Dictionary();
// get input parameters
string dnsServersString = (string)topTask.GetParamValue(DnsServersParameter);
@@ -82,34 +86,41 @@ namespace WebsitePanel.EnterpriseServer
continue;
}
+ if (!domainUsers.ContainsKey(domain.PackageId))
+ {
+ var domainUser = UserController.GetUser(packages.First(x=>x.PackageId == domain.PackageId).UserId);
+
+ domainUsers.Add(domain.PackageId, domainUser);
+ }
+
DomainDnsChanges domainChanges = new DomainDnsChanges();
domainChanges.DomainName = domain.DomainName;
+ domainChanges.PackageId = domain.PackageId;
- var mxRecords = ObjectUtils.CreateListFromDataReader(DataProvider.GetDomainDnsRecords(domain.DomainId, DnsRecordType.MX));
- var nsRecords = ObjectUtils.CreateListFromDataReader(DataProvider.GetDomainDnsRecords(domain.DomainId, DnsRecordType.NS));
+ var dbDnsRecords = ObjectUtils.CreateListFromDataReader(DataProvider.GetDomainAllDnsRecords(domain.DomainId));
//execute server
foreach (var dnsServer in dnsServers)
{
- var dnsMxRecords = GetDomainDnsRecords(winServer, domain.DomainName, dnsServer, DnsRecordType.MX);
- var dnsNsRecords = GetDomainDnsRecords(winServer, domain.DomainName, dnsServer, DnsRecordType.NS);
+ var dnsMxRecords = GetDomainDnsRecords(winServer, domain.DomainName, dnsServer, DnsRecordType.MX) ?? dbDnsRecords.Where(x => x.RecordType == DnsRecordType.MX).ToList();
+ var dnsNsRecords = GetDomainDnsRecords(winServer, domain.DomainName, dnsServer, DnsRecordType.NS) ?? dbDnsRecords.Where(x => x.RecordType == DnsRecordType.NS).ToList();
FillRecordData(dnsMxRecords, domain, dnsServer);
FillRecordData(dnsNsRecords, domain, dnsServer);
- domainChanges.DnsChanges.AddRange(ApplyDomainRecordsChanges(mxRecords, dnsMxRecords, dnsServer));
- domainChanges.DnsChanges.AddRange(ApplyDomainRecordsChanges(nsRecords, dnsNsRecords, dnsServer));
+ domainChanges.DnsChanges.AddRange(ApplyDomainRecordsChanges(dbDnsRecords.Where(x => x.RecordType == DnsRecordType.MX), dnsMxRecords, dnsServer));
+ domainChanges.DnsChanges.AddRange(ApplyDomainRecordsChanges(dbDnsRecords.Where(x => x.RecordType == DnsRecordType.NS), dnsNsRecords, dnsServer));
+
+ domainChanges.DnsChanges = CombineDnsRecordChanges(domainChanges.DnsChanges, dnsServer).ToList();
}
domainsChanges.Add(domainChanges);
}
}
- TaskManager.Write(string.Format("Domains checked: {0}", domainsChanges.Count));
-
var changedDomains = FindDomainsWithChangedRecords(domainsChanges);
- SendMailMessage(user, changedDomains);
+ SendMailMessage(user, changedDomains, domainUsers);
}
@@ -152,13 +163,13 @@ namespace WebsitePanel.EnterpriseServer
if (dnsRecord != null)
{
- dnsRecordChanges.Add(new DnsRecordInfoChange { Record = record, Type = record.RecordType, Status = DomainDnsRecordStatuses.NotChanged, DnsServer = dnsServer });
+ dnsRecordChanges.Add(new DnsRecordInfoChange { OldRecord = record, NewRecord = dnsRecord, Type = record.RecordType, Status = DomainDnsRecordStatuses.NotChanged, DnsServer = dnsServer });
dnsRecords.Remove(dnsRecord);
}
else
{
- dnsRecordChanges.Add(new DnsRecordInfoChange { Record = record, Type = record.RecordType, Status = DomainDnsRecordStatuses.Removed, DnsServer = dnsServer });
+ dnsRecordChanges.Add(new DnsRecordInfoChange { OldRecord = record, NewRecord = new DnsRecordInfo { Value = string.Empty}, Type = record.RecordType, Status = DomainDnsRecordStatuses.Removed, DnsServer = dnsServer });
RemoveRecord(record);
}
@@ -166,7 +177,7 @@ namespace WebsitePanel.EnterpriseServer
foreach (var record in dnsRecords)
{
- dnsRecordChanges.Add(new DnsRecordInfoChange { Record = record, Type = record.RecordType, Status = DomainDnsRecordStatuses.Added, DnsServer= dnsServer});
+ dnsRecordChanges.Add(new DnsRecordInfoChange { OldRecord = new DnsRecordInfo { Value = string.Empty }, NewRecord = record, Type = record.RecordType, Status = DomainDnsRecordStatuses.Added, DnsServer = dnsServer });
AddRecord(record);
}
@@ -174,6 +185,39 @@ namespace WebsitePanel.EnterpriseServer
return dnsRecordChanges;
}
+ private IEnumerable CombineDnsRecordChanges(IEnumerable records, string dnsServer)
+ {
+ var resultRecords = records.Where(x => x.DnsServer == dnsServer).ToList();
+
+ var recordsToRemove = new List();
+
+ var removedRecords = records.Where(x => x.Status == DomainDnsRecordStatuses.Removed);
+ var addedRecords = records.Where(x => x.Status == DomainDnsRecordStatuses.Added);
+
+ foreach (DnsRecordType type in (DnsRecordType[])Enum.GetValues(typeof(DnsRecordType)))
+ {
+ foreach (var removedRecord in removedRecords.Where(x => x.Type == type))
+ {
+ var addedRecord = addedRecords.FirstOrDefault(x => x.Type == type && !recordsToRemove.Contains(x));
+
+ if (addedRecord != null)
+ {
+ recordsToRemove.Add(addedRecord);
+
+ removedRecord.NewRecord = addedRecord.NewRecord;
+ removedRecord.Status = DomainDnsRecordStatuses.Updated;
+ }
+ }
+ }
+
+ foreach (var record in recordsToRemove)
+ {
+ resultRecords.Remove(record);
+ }
+
+ return resultRecords;
+ }
+
private void FillRecordData(IEnumerable records, DomainInfo domain, string dnsServer)
{
foreach (var record in records)
@@ -200,6 +244,8 @@ namespace WebsitePanel.EnterpriseServer
private void RemoveRecord(DnsRecordInfo dnsRecord)
{
DataProvider.DeleteDomainDnsRecord(dnsRecord.Id);
+
+ Thread.Sleep(100);
}
private void AddRecords(IEnumerable dnsRecords)
@@ -213,9 +259,11 @@ namespace WebsitePanel.EnterpriseServer
private void AddRecord(DnsRecordInfo dnsRecord)
{
DataProvider.AddDomainDnsRecord(dnsRecord);
+
+ Thread.Sleep(100);
}
- private void SendMailMessage(UserInfo user, IEnumerable domainsChanges)
+ private void SendMailMessage(UserInfo user, IEnumerable domainsChanges, Dictionary domainUsers)
{
BackgroundTask topTask = TaskManager.TopTask;
@@ -249,6 +297,7 @@ namespace WebsitePanel.EnterpriseServer
Hashtable items = new Hashtable();
items["user"] = user;
+ items["DomainUsers"] = domainUsers;
items["Domains"] = domainsChanges;
body = PackageController.EvaluateTemplate(body, items);
@@ -264,7 +313,20 @@ namespace WebsitePanel.EnterpriseServer
var args = string.Format("-type={0} {1} {2}", recordType, domain, dnsServer);
// execute system command
- var raw = winServer.ExecuteSystemCommand(command, args);
+ var raw = string.Empty;
+ int triesCount = 0;
+
+ do
+ {
+ raw = winServer.ExecuteSystemCommand(command, args);
+ }
+ while (raw.ToLowerInvariant().Contains(DnsTimeOutMessage) && ++triesCount < DnsTimeOutRetryCount);
+
+ //timeout check
+ if (raw.ToLowerInvariant().Contains(DnsTimeOutMessage))
+ {
+ return null;
+ }
var records = ParseNsLookupResult(raw, dnsServer, recordType);
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/HostedSolutionReport.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/HostedSolutionReport.cs
index e0209bc1..e7f82265 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/HostedSolutionReport.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/HostedSolutionReport.cs
@@ -32,6 +32,7 @@ using System.IO;
using System.Net.Mail;
using System.Net.Mime;
using System.Text;
+using WebsitePanel.EnterpriseServer;
using WebsitePanel.EnterpriseServer.Code.HostedSolution;
using WebsitePanel.Providers.HostedSolution;
@@ -51,6 +52,8 @@ namespace WebsitePanel.EnterpriseServer
{
try
{
+ TaskManager.Write("Start HostedSolutionReportTask");
+
BackgroundTask topTask = TaskManager.TopTask;
bool isExchange = Utils.ParseBool(topTask.GetParamValue(EXCHANGE_REPORT), false);
@@ -61,23 +64,41 @@ namespace WebsitePanel.EnterpriseServer
string email = topTask.GetParamValue(EMAIL).ToString();
+ TaskManager.WriteParameter("isExchange",isExchange);
+ TaskManager.WriteParameter("isSharePoint",isSharePoint);
+ TaskManager.WriteParameter("isLync", isLync);
+ TaskManager.WriteParameter("isCRM", isCRM);
+ TaskManager.WriteParameter("isOrganization", isOrganization);
+ TaskManager.WriteParameter("email", email);
UserInfo user = PackageController.GetPackageOwner(topTask.PackageId);
+
+ TaskManager.WriteParameter("user", user.Username);
+
EnterpriseSolutionStatisticsReport report =
ReportController.GetEnterpriseSolutionStatisticsReport(user.UserId, isExchange, isSharePoint, isCRM,
isOrganization, isLync);
+ TaskManager.WriteParameter("report.ExchangeReport.Items.Count", report.ExchangeReport.Items.Count);
+ TaskManager.WriteParameter("report.SharePointReport.Items.Count", report.SharePointReport.Items.Count);
+ TaskManager.WriteParameter("report.CRMReport.Items.Count", report.CRMReport.Items.Count);
+ TaskManager.WriteParameter("report.OrganizationReport.Items.Count", report.OrganizationReport.Items.Count);
+ TaskManager.WriteParameter("report.LyncReport.Items.Count", report.LyncReport.Items.Count);
SendMessage(user, email, isExchange && report.ExchangeReport != null ? report.ExchangeReport.ToCSV() : string.Empty,
isSharePoint && report.SharePointReport != null ? report.SharePointReport.ToCSV() : string.Empty,
isCRM && report.CRMReport != null ? report.CRMReport.ToCSV() : string.Empty,
isOrganization && report.OrganizationReport != null ? report.OrganizationReport.ToCSV() : string.Empty,
isLync && report.LyncReport != null ? report.LyncReport.ToCSV() : string.Empty);
+
}
catch(Exception ex)
{
TaskManager.WriteError(ex);
}
+
+ TaskManager.Write("End HostedSolutionReportTask");
+
}
@@ -97,6 +118,8 @@ namespace WebsitePanel.EnterpriseServer
private void SendMessage(UserInfo user,string email, string exchange_csv, string sharepoint_csv, string crm_csv, string organization_csv, string lync_csv)
{
+ TaskManager.Write("SendMessage");
+
List attacments = new List();
PrepareAttament("exchange.csv", exchange_csv, attacments);
PrepareAttament("sharepoint.csv", sharepoint_csv, attacments);
@@ -104,9 +127,6 @@ namespace WebsitePanel.EnterpriseServer
PrepareAttament("crm.csv", crm_csv, attacments);
PrepareAttament("organization.csv", organization_csv, attacments);
-
-
-
// get letter settings
UserSettings settings = UserController.GetUserSettings(user.UserId, UserSettings.HOSTED_SOLUTION_REPORT);
@@ -116,9 +136,29 @@ namespace WebsitePanel.EnterpriseServer
string body = user.HtmlMail ? settings["HtmlBody"] : settings["TextBody"];
bool isHtml = user.HtmlMail;
- MailPriority priority = MailPriority.Normal;
+ MailPriority priority = MailPriority.Normal;
+
+ TaskManager.WriteParameter("from", from);
+ TaskManager.WriteParameter("email", email);
+ TaskManager.WriteParameter("subject", subject);
+ TaskManager.WriteParameter("body", body);
+
- MailHelper.SendMessage(from, email, cc, subject, body, priority, isHtml, attacments.ToArray());
+ int res = MailHelper.SendMessage(from, email, cc, subject, body, priority, isHtml, attacments.ToArray());
+
+ if (res==0)
+ {
+ TaskManager.Write("SendMessage OK");
+ }
+ else
+ {
+ TaskManager.WriteError("SendMessage error ", "error code", res.ToString());
+ }
+
+ TaskManager.WriteParameter("", res);
+
+ TaskManager.Write("End SendMessage");
+
}
}
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs
index 6773f712..d3a65dd4 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs
@@ -45,7 +45,7 @@ namespace WebsitePanel.EnterpriseServer
public static SchedulerJob nextSchedule = null;
public static void Start()
- {
+ {
ScheduleTasks();
}
@@ -73,7 +73,7 @@ namespace WebsitePanel.EnterpriseServer
private static void RunManualTasks()
{
- var tasks = TaskController.GetProcessTasks(BackgroundTaskStatus.Stopping);
+ var tasks = TaskController.GetProcessTasks(BackgroundTaskStatus.Stopping);
foreach (var task in tasks)
{
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs
index 507ae075..220ee79d 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs
@@ -30,6 +30,7 @@ using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Data;
+using System.Linq;
using System.Net;
using System.Xml;
using WebsitePanel.Providers;
@@ -42,6 +43,8 @@ using WebsitePanel.Providers.HostedSolution;
using Whois.NET;
using System.Text.RegularExpressions;
using WebsitePanel.Providers.DomainLookup;
+using System.Globalization;
+using System.Linq;
namespace WebsitePanel.EnterpriseServer
{
@@ -72,6 +75,9 @@ namespace WebsitePanel.EnterpriseServer
@"expires:(.+)" //.fi
};
+ private static List _datePatterns = new List { @"ddd MMM dd HH:mm:ss G\MT yyyy"
+ };
+
#region Servers
public static List GetAllServers()
{
@@ -1641,11 +1647,16 @@ namespace WebsitePanel.EnterpriseServer
{
var result = new List();
- var mxRecords = ObjectUtils.CreateListFromDataReader(DataProvider.GetDomainDnsRecords(domainId, DnsRecordType.MX));
- var nsRecords = ObjectUtils.CreateListFromDataReader(DataProvider.GetDomainDnsRecords(domainId, DnsRecordType.NS));
+ var records = ObjectUtils.CreateListFromDataReader(DataProvider.GetDomainAllDnsRecords(domainId));
- result.AddRange(mxRecords);
- result.AddRange(nsRecords);
+ var activeDomain = records.OrderByDescending(x => x.Date).FirstOrDefault();
+
+ if (activeDomain != null)
+ {
+ records = records.Where(x => x.DnsServer == activeDomain.DnsServer).ToList();
+ }
+
+ result.AddRange(records);
return result;
}
@@ -2178,11 +2189,13 @@ namespace WebsitePanel.EnterpriseServer
}
}
+ // Find and delete all zone items for this domain
+ var zoneItems = PackageController.GetPackageItemsByType(domain.PackageId, ResourceGroups.Dns, typeof (DnsZone));
+ zoneItems.AddRange(PackageController.GetPackageItemsByType(domain.PackageId, ResourceGroups.Dns, typeof(SecondaryDnsZone)));
- // remove DNS zone meta-item if required
- if (domain.ZoneItemId > 0)
+ foreach (var zoneItem in zoneItems.Where(z => z.Name == domain.ZoneName))
{
- PackageController.DeletePackageItem(domain.ZoneItemId);
+ PackageController.DeletePackageItem(zoneItem.Id);
}
// delete domain
@@ -2680,26 +2693,20 @@ namespace WebsitePanel.EnterpriseServer
public static DomainInfo UpdateDomainRegistrationData(DomainInfo domain)
{
+ DateTime? createdDate = null;
+ DateTime? expiredDate = null;
+
try
{
- DataProvider.UpdateDomainLastUpdateDate(domain.DomainId, DateTime.Now);
-
var whoisResult = WhoisClient.Query(domain.DomainName.ToLowerInvariant());
- var createdDate = GetDomainInfoDate(whoisResult.Raw, _createdDatePatterns);
- var expiredDate = GetDomainInfoDate(whoisResult.Raw, _expiredDatePatterns);
+ createdDate = GetDomainInfoDate(whoisResult.Raw, _createdDatePatterns);
+ expiredDate = GetDomainInfoDate(whoisResult.Raw, _expiredDatePatterns);
- if (createdDate != null)
- {
- domain.CreationDate = createdDate;
- DataProvider.UpdateDomainCreationDate(domain.DomainId, createdDate.Value);
- }
+ domain.CreationDate = createdDate;
+ domain.ExpirationDate = expiredDate;
- if (expiredDate != null)
- {
- domain.ExpirationDate = expiredDate;
- DataProvider.UpdateDomainExpirationDate(domain.DomainId, expiredDate.Value);
- }
+ DataProvider.UpdateDomainDates(domain.DomainId, createdDate, expiredDate, DateTime.Now);
}
catch (Exception e)
{
@@ -2711,19 +2718,10 @@ namespace WebsitePanel.EnterpriseServer
public static DomainInfo UpdateDomainRegistrationData(DomainInfo domain, DateTime? creationDate, DateTime? expirationDate)
{
- if (creationDate != null)
- {
- domain.CreationDate = creationDate;
- DataProvider.UpdateDomainCreationDate(domain.DomainId, creationDate.Value);
- }
+ DataProvider.UpdateDomainDates(domain.DomainId, creationDate, expirationDate, DateTime.Now);
- if (expirationDate != null)
- {
- domain.ExpirationDate = expirationDate;
- DataProvider.UpdateDomainExpirationDate(domain.DomainId, expirationDate.Value);
- }
-
- DataProvider.UpdateDomainLastUpdateDate(domain.DomainId, DateTime.Now);
+ domain.CreationDate = creationDate;
+ domain.ExpirationDate = expirationDate;
return domain;
}
@@ -2738,7 +2736,7 @@ namespace WebsitePanel.EnterpriseServer
{
if (match.Success && match.Groups.Count == 2)
{
- return DateTime.Parse(match.Groups[1].ToString().Trim());
+ return ParseDate(match.Groups[1].ToString().Trim());
}
}
}
@@ -2746,6 +2744,21 @@ namespace WebsitePanel.EnterpriseServer
return null;
}
+ private static DateTime? ParseDate(string dateString)
+ {
+ var result = DateTime.MinValue;
+
+ foreach (var datePattern in _datePatterns)
+ {
+ if (DateTime.TryParseExact(dateString, datePattern, CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
+ {
+ return result;
+ }
+ }
+
+ return DateTime.Parse(dateString);
+ }
+
#endregion
#region DNS Zones
@@ -2763,7 +2776,7 @@ namespace WebsitePanel.EnterpriseServer
DNSServer dns = new DNSServer();
ServiceProviderProxy.Init(dns, zoneItem.ServiceId);
- return dns.GetZoneRecords(domain.DomainName);
+ return dns.GetZoneRecords(zoneItem.Name);
}
return new DnsRecord[] { };
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esRemoteDesktopServices.asmx.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esRemoteDesktopServices.asmx.cs
index d86b9733..f05d3ca3 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esRemoteDesktopServices.asmx.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esRemoteDesktopServices.asmx.cs
@@ -70,6 +70,12 @@ namespace WebsitePanel.EnterpriseServer
return RemoteDesktopServicesController.AddRdsCollection(itemId, collection);
}
+ [WebMethod]
+ public ResultObject EditRdsCollection(int itemId, RdsCollection collection)
+ {
+ return RemoteDesktopServicesController.EditRdsCollection(itemId, collection);
+ }
+
[WebMethod]
public RdsCollectionPaged GetRdsCollectionsPaged(int itemId, string filterColumn, string filterValue,
string sortColumn, int startRow, int maximumRows)
@@ -101,10 +107,10 @@ namespace WebsitePanel.EnterpriseServer
}
[WebMethod]
- public RdsServersPaged GetOrganizationRdsServersPaged(int itemId, string filterColumn, string filterValue,
+ public RdsServersPaged GetOrganizationRdsServersPaged(int itemId, int? collectionId, string filterColumn, string filterValue,
string sortColumn, int startRow, int maximumRows)
{
- return RemoteDesktopServicesController.GetOrganizationRdsServersPaged(itemId, filterColumn, filterValue,
+ return RemoteDesktopServicesController.GetOrganizationRdsServersPaged(itemId, collectionId, filterColumn, filterValue,
sortColumn, startRow, maximumRows);
}
@@ -230,5 +236,16 @@ namespace WebsitePanel.EnterpriseServer
return RemoteDesktopServicesController.GetOrganizationRdsUsersCount(itemId);
}
+ [WebMethod]
+ public List GetApplicationUsers(int itemId, int collectionId, RemoteApplication remoteApp)
+ {
+ return RemoteDesktopServicesController.GetApplicationUsers(itemId, collectionId, remoteApp);
+ }
+
+ [WebMethod]
+ public ResultObject SetApplicationUsers(int itemId, int collectionId, RemoteApplication remoteApp, List users)
+ {
+ return RemoteDesktopServicesController.SetApplicationUsers(itemId, collectionId, remoteApp, users);
+ }
}
}
diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DnsRecordInfoChange.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DnsRecordInfoChange.cs
index 183c16e0..a5c0306b 100644
--- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DnsRecordInfoChange.cs
+++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DnsRecordInfoChange.cs
@@ -9,7 +9,8 @@ namespace WebsitePanel.Providers.DomainLookup
public class DnsRecordInfoChange
{
public string DnsServer { get; set; }
- public DnsRecordInfo Record { get; set; }
+ public DnsRecordInfo OldRecord { get; set; }
+ public DnsRecordInfo NewRecord { get; set; }
public DomainDnsRecordStatuses Status { get; set; }
public DnsRecordType Type { get; set; }
}
diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsChanges.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsChanges.cs
index ff178e77..3f19ef39 100644
--- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsChanges.cs
+++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsChanges.cs
@@ -8,6 +8,7 @@ namespace WebsitePanel.Providers.DomainLookup
public class DomainDnsChanges
{
public string DomainName { get; set; }
+ public int PackageId { get; set; }
public List DnsChanges { get; set; }
diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordStatuses.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordStatuses.cs
index 88fa25ed..33bddf37 100644
--- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordStatuses.cs
+++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordStatuses.cs
@@ -9,6 +9,7 @@ namespace WebsitePanel.Providers.DomainLookup
{
NotChanged,
Removed,
- Added
+ Added,
+ Updated
}
}
diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/IRemoteDesktopServices.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/IRemoteDesktopServices.cs
index db2e114c..6de22e8d 100644
--- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/IRemoteDesktopServices.cs
+++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/IRemoteDesktopServices.cs
@@ -40,6 +40,7 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
public interface IRemoteDesktopServices
{
bool CreateCollection(string organizationId, RdsCollection collection);
+ bool AddRdsServersToDeployment(RdsServer[] servers);
RdsCollection GetCollection(string collectionName);
bool RemoveCollection(string organizationId, string collectionName);
bool SetUsersInCollection(string organizationId, string collectionName, List users);
@@ -60,5 +61,7 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
bool CheckSessionHostFeatureInstallation(string hostName);
bool CheckServerAvailability(string hostName);
+ string[] GetApplicationUsers(string collectionName, string applicationName);
+ bool SetApplicationUsers(string collectionName, RemoteApplication remoteApp, string[] users);
}
}
diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.IceWarp/WebsitePanel.Providers.Mail.IceWarp.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.IceWarp/WebsitePanel.Providers.Mail.IceWarp.csproj
index f6df0ed1..3389e9ec 100644
--- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.IceWarp/WebsitePanel.Providers.Mail.IceWarp.csproj
+++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.IceWarp/WebsitePanel.Providers.Mail.IceWarp.csproj
@@ -17,7 +17,7 @@
true
full
false
- ..\WebsitePanel.Server\bin\
+ ..\WebsitePanel.Server\bin\IceWarp\
DEBUG;TRACE
prompt
4
@@ -25,7 +25,7 @@
pdbonly
true
- ..\WebsitePanel.Server\bin\
+ ..\WebsitePanel.Server\bin\IceWarp\
TRACE
prompt
4
@@ -48,10 +48,12 @@
{684C932A-6C75-46AC-A327-F3689D89EB42}
WebsitePanel.Providers.Base
+ False
{E91E52F3-9555-4D00-B577-2B1DBDD87CA7}
WebsitePanel.Server.Utils
+ False
diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2012/Windows2012.cs b/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2012/Windows2012.cs
index 2622425f..010e6ee5 100644
--- a/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2012/Windows2012.cs
+++ b/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2012/Windows2012.cs
@@ -80,10 +80,12 @@ namespace WebsitePanel.Providers.OS
{
Log.WriteStart("SetQuotaLimitOnFolder");
Log.WriteInfo("FolderPath : {0}", folderPath);
- Log.WriteInfo("ShareNameDrive : {0}", shareNameDrive);
Log.WriteInfo("QuotaLimit : {0}", quotaLimit);
- string path = Path.Combine(shareNameDrive + @":\", folderPath);
+ string path = folderPath;
+
+ if (shareNameDrive != null)
+ path = Path.Combine(shareNameDrive + @":\", folderPath);
Runspace runSpace = null;
try
diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.TerminalServices.Windows2012/Windows2012.cs b/WebsitePanel/Sources/WebsitePanel.Providers.TerminalServices.Windows2012/Windows2012.cs
index 1e8d85bc..16552df1 100644
--- a/WebsitePanel/Sources/WebsitePanel.Providers.TerminalServices.Windows2012/Windows2012.cs
+++ b/WebsitePanel/Sources/WebsitePanel.Providers.TerminalServices.Windows2012/Windows2012.cs
@@ -169,6 +169,35 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
#region RDS Collections
+ public bool AddRdsServersToDeployment(RdsServer[] servers)
+ {
+ var result = true;
+ Runspace runSpace = null;
+
+ try
+ {
+ runSpace = OpenRunspace();
+
+ foreach (var server in servers)
+ {
+ if (!ExistRdsServerInDeployment(runSpace, server))
+ {
+ AddRdsServerToDeployment(runSpace, server);
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ result = false;
+ }
+ finally
+ {
+ CloseRunspace(runSpace);
+ }
+
+ return result;
+ }
+
public bool CreateCollection(string organizationId, RdsCollection collection)
{
var result = true;
@@ -467,6 +496,70 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
#region Remote Applications
+ public string[] GetApplicationUsers(string collectionName, string applicationName)
+ {
+ Runspace runspace = null;
+ List result = new List();
+
+ try
+ {
+ runspace = OpenRunspace();
+
+ Command cmd = new Command("Get-RDRemoteApp");
+ cmd.Parameters.Add("CollectionName", collectionName);
+ cmd.Parameters.Add("ConnectionBroker", ConnectionBroker);
+ cmd.Parameters.Add("DisplayName", applicationName);
+
+ var application = ExecuteShellCommand(runspace, cmd, false).FirstOrDefault();
+
+ if (application != null)
+ {
+ var users = (string[])(GetPSObjectProperty(application, "UserGroups"));
+
+ if (users != null)
+ {
+ result.AddRange(users);
+ }
+ }
+ }
+ finally
+ {
+ CloseRunspace(runspace);
+ }
+
+ return result.ToArray();
+ }
+
+ public bool SetApplicationUsers(string collectionName, RemoteApplication remoteApp, string[] users)
+ {
+ Runspace runspace = null;
+ bool result = true;
+
+ try
+ {
+ runspace = OpenRunspace();
+
+ Command cmd = new Command("Set-RDRemoteApp");
+ cmd.Parameters.Add("CollectionName", collectionName);
+ cmd.Parameters.Add("ConnectionBroker", ConnectionBroker);
+ cmd.Parameters.Add("DisplayName", remoteApp.DisplayName);
+ cmd.Parameters.Add("UserGroups", users);
+ cmd.Parameters.Add("Alias", remoteApp.Alias);
+
+ ExecuteShellCommand(runspace, cmd, false).FirstOrDefault();
+ }
+ catch(Exception)
+ {
+ result = false;
+ }
+ finally
+ {
+ CloseRunspace(runspace);
+ }
+
+ return result;
+ }
+
public List GetAvailableRemoteApplications(string collectionName)
{
var startApps = new List();
diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/WebsitePanel.Providers.Web.IIs80.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/WebsitePanel.Providers.Web.IIs80.csproj
index dd28ae8c..62f64039 100644
--- a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/WebsitePanel.Providers.Web.IIs80.csproj
+++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs80/WebsitePanel.Providers.Web.IIs80.csproj
@@ -17,7 +17,7 @@
true
full
false
- ..\WebsitePanel.Server\bin\
+ ..\WebsitePanel.Server\bin\IIs80\
DEBUG;TRACE
prompt
4
@@ -25,7 +25,7 @@
pdbonly
true
- ..\WebsitePanel.Server\bin\
+ ..\WebsitePanel.Server\bin\IIs80\
TRACE
prompt
4
@@ -56,18 +56,22 @@
{684c932a-6c75-46ac-a327-f3689d89eb42}
WebsitePanel.Providers.Base
+ False
{9be0317d-e42e-4ff6-9a87-8c801f046ea1}
WebsitePanel.Providers.Web.IIs60
+ False
{1b9dce85-c664-49fc-b6e1-86c63cab88d1}
WebsitePanel.Providers.Web.IIs70
+ False
{e91e52f3-9555-4d00-b577-2b1dbdd87ca7}
WebsitePanel.Server.Utils
+ False
diff --git a/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerService.cs b/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerService.cs
index 2f017c19..92d0128a 100644
--- a/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerService.cs
+++ b/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerService.cs
@@ -35,15 +35,16 @@ namespace WebsitePanel.SchedulerService
public partial class SchedulerService : ServiceBase
{
private Timer _Timer;
- private static bool _isRuninng;
+ private static object _isRuninng;
#region Construcor
public SchedulerService()
{
+ _isRuninng = new object();
+
InitializeComponent();
_Timer = new Timer(Process, null, 5000, 5000);
- _isRuninng = false;
}
#endregion
@@ -57,12 +58,18 @@ namespace WebsitePanel.SchedulerService
protected static void Process(object callback)
{
//check running service
- if (_isRuninng)
+ if (!Monitor.TryEnter(_isRuninng))
return;
- _isRuninng = true;
- Scheduler.Start();
- _isRuninng = false;
+ try
+ {
+ Scheduler.Start();
+ }
+ finally
+ {
+ Monitor.Exit(_isRuninng);
+ }
+
}
#endregion
diff --git a/WebsitePanel/Sources/WebsitePanel.Server.Client/RemoteDesktopServicesProxy.cs b/WebsitePanel/Sources/WebsitePanel.Server.Client/RemoteDesktopServicesProxy.cs
index 341c32cf..f3f14bca 100644
--- a/WebsitePanel/Sources/WebsitePanel.Server.Client/RemoteDesktopServicesProxy.cs
+++ b/WebsitePanel/Sources/WebsitePanel.Server.Client/RemoteDesktopServicesProxy.cs
@@ -31,6 +31,8 @@ namespace WebsitePanel.Providers.RemoteDesktopServices {
private System.Threading.SendOrPostCallback CreateCollectionOperationCompleted;
+ private System.Threading.SendOrPostCallback AddRdsServersToDeploymentOperationCompleted;
+
private System.Threading.SendOrPostCallback GetCollectionOperationCompleted;
private System.Threading.SendOrPostCallback RemoveCollectionOperationCompleted;
@@ -63,6 +65,10 @@ namespace WebsitePanel.Providers.RemoteDesktopServices {
private System.Threading.SendOrPostCallback CheckServerAvailabilityOperationCompleted;
+ private System.Threading.SendOrPostCallback GetApplicationUsersOperationCompleted;
+
+ private System.Threading.SendOrPostCallback SetApplicationUsersOperationCompleted;
+
///
public RemoteDesktopServices() {
this.Url = "http://localhost:9003/RemoteDesktopServices.asmx";
@@ -71,6 +77,9 @@ namespace WebsitePanel.Providers.RemoteDesktopServices {
///
public event CreateCollectionCompletedEventHandler CreateCollectionCompleted;
+ ///
+ public event AddRdsServersToDeploymentCompletedEventHandler AddRdsServersToDeploymentCompleted;
+
///
public event GetCollectionCompletedEventHandler GetCollectionCompleted;
@@ -119,6 +128,12 @@ namespace WebsitePanel.Providers.RemoteDesktopServices {
///
public event CheckServerAvailabilityCompletedEventHandler CheckServerAvailabilityCompleted;
+ ///
+ public event GetApplicationUsersCompletedEventHandler GetApplicationUsersCompleted;
+
+ ///
+ public event SetApplicationUsersCompletedEventHandler SetApplicationUsersCompleted;
+
///
[System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/CreateCollection", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
@@ -164,6 +179,48 @@ namespace WebsitePanel.Providers.RemoteDesktopServices {
}
}
+ ///
+ [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
+ [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/AddRdsServersToDeployment", 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 AddRdsServersToDeployment(RdsServer[] servers) {
+ object[] results = this.Invoke("AddRdsServersToDeployment", new object[] {
+ servers});
+ return ((bool)(results[0]));
+ }
+
+ ///
+ public System.IAsyncResult BeginAddRdsServersToDeployment(RdsServer[] servers, System.AsyncCallback callback, object asyncState) {
+ return this.BeginInvoke("AddRdsServersToDeployment", new object[] {
+ servers}, callback, asyncState);
+ }
+
+ ///
+ public bool EndAddRdsServersToDeployment(System.IAsyncResult asyncResult) {
+ object[] results = this.EndInvoke(asyncResult);
+ return ((bool)(results[0]));
+ }
+
+ ///
+ public void AddRdsServersToDeploymentAsync(RdsServer[] servers) {
+ this.AddRdsServersToDeploymentAsync(servers, null);
+ }
+
+ ///
+ public void AddRdsServersToDeploymentAsync(RdsServer[] servers, object userState) {
+ if ((this.AddRdsServersToDeploymentOperationCompleted == null)) {
+ this.AddRdsServersToDeploymentOperationCompleted = new System.Threading.SendOrPostCallback(this.OnAddRdsServersToDeploymentOperationCompleted);
+ }
+ this.InvokeAsync("AddRdsServersToDeployment", new object[] {
+ servers}, this.AddRdsServersToDeploymentOperationCompleted, userState);
+ }
+
+ private void OnAddRdsServersToDeploymentOperationCompleted(object arg) {
+ if ((this.AddRdsServersToDeploymentCompleted != null)) {
+ System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
+ this.AddRdsServersToDeploymentCompleted(this, new AddRdsServersToDeploymentCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
+ }
+ }
+
///
[System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetCollection", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
@@ -871,6 +928,99 @@ namespace WebsitePanel.Providers.RemoteDesktopServices {
}
}
+ ///
+ [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
+ [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetApplicationUsers", 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[] GetApplicationUsers(string collectionName, string applicationName) {
+ object[] results = this.Invoke("GetApplicationUsers", new object[] {
+ collectionName,
+ applicationName});
+ return ((string[])(results[0]));
+ }
+
+ ///
+ public System.IAsyncResult BeginGetApplicationUsers(string collectionName, string applicationName, System.AsyncCallback callback, object asyncState) {
+ return this.BeginInvoke("GetApplicationUsers", new object[] {
+ collectionName,
+ applicationName}, callback, asyncState);
+ }
+
+ ///
+ public string[] EndGetApplicationUsers(System.IAsyncResult asyncResult) {
+ object[] results = this.EndInvoke(asyncResult);
+ return ((string[])(results[0]));
+ }
+
+ ///
+ public void GetApplicationUsersAsync(string collectionName, string applicationName) {
+ this.GetApplicationUsersAsync(collectionName, applicationName, null);
+ }
+
+ ///
+ public void GetApplicationUsersAsync(string collectionName, string applicationName, object userState) {
+ if ((this.GetApplicationUsersOperationCompleted == null)) {
+ this.GetApplicationUsersOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetApplicationUsersOperationCompleted);
+ }
+ this.InvokeAsync("GetApplicationUsers", new object[] {
+ collectionName,
+ applicationName}, this.GetApplicationUsersOperationCompleted, userState);
+ }
+
+ private void OnGetApplicationUsersOperationCompleted(object arg) {
+ if ((this.GetApplicationUsersCompleted != null)) {
+ System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
+ this.GetApplicationUsersCompleted(this, new GetApplicationUsersCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
+ }
+ }
+
+ ///
+ [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
+ [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/SetApplicationUsers", 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 SetApplicationUsers(string collectionName, RemoteApplication remoteApp, string[] users) {
+ object[] results = this.Invoke("SetApplicationUsers", new object[] {
+ collectionName,
+ remoteApp,
+ users});
+ return ((bool)(results[0]));
+ }
+
+ ///
+ public System.IAsyncResult BeginSetApplicationUsers(string collectionName, RemoteApplication remoteApp, string[] users, System.AsyncCallback callback, object asyncState) {
+ return this.BeginInvoke("SetApplicationUsers", new object[] {
+ collectionName,
+ remoteApp,
+ users}, callback, asyncState);
+ }
+
+ ///
+ public bool EndSetApplicationUsers(System.IAsyncResult asyncResult) {
+ object[] results = this.EndInvoke(asyncResult);
+ return ((bool)(results[0]));
+ }
+
+ ///
+ public void SetApplicationUsersAsync(string collectionName, RemoteApplication remoteApp, string[] users) {
+ this.SetApplicationUsersAsync(collectionName, remoteApp, users, null);
+ }
+
+ ///
+ public void SetApplicationUsersAsync(string collectionName, RemoteApplication remoteApp, string[] users, object userState) {
+ if ((this.SetApplicationUsersOperationCompleted == null)) {
+ this.SetApplicationUsersOperationCompleted = new System.Threading.SendOrPostCallback(this.OnSetApplicationUsersOperationCompleted);
+ }
+ this.InvokeAsync("SetApplicationUsers", new object[] {
+ collectionName,
+ remoteApp,
+ users}, this.SetApplicationUsersOperationCompleted, userState);
+ }
+
+ private void OnSetApplicationUsersOperationCompleted(object arg) {
+ if ((this.SetApplicationUsersCompleted != null)) {
+ System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
+ this.SetApplicationUsersCompleted(this, new SetApplicationUsersCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
+ }
+ }
+
///
public new void CancelAsync(object userState) {
base.CancelAsync(userState);
@@ -903,6 +1053,32 @@ namespace WebsitePanel.Providers.RemoteDesktopServices {
}
}
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ public delegate void AddRdsServersToDeploymentCompletedEventHandler(object sender, AddRdsServersToDeploymentCompletedEventArgs e);
+
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.ComponentModel.DesignerCategoryAttribute("code")]
+ public partial class AddRdsServersToDeploymentCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+
+ private object[] results;
+
+ internal AddRdsServersToDeploymentCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
+ base(exception, cancelled, userState) {
+ this.results = results;
+ }
+
+ ///
+ public bool Result {
+ get {
+ this.RaiseExceptionIfNecessary();
+ return ((bool)(this.results[0]));
+ }
+ }
+ }
+
///
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
public delegate void GetCollectionCompletedEventHandler(object sender, GetCollectionCompletedEventArgs e);
@@ -1208,4 +1384,56 @@ namespace WebsitePanel.Providers.RemoteDesktopServices {
}
}
}
+
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ public delegate void GetApplicationUsersCompletedEventHandler(object sender, GetApplicationUsersCompletedEventArgs e);
+
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.ComponentModel.DesignerCategoryAttribute("code")]
+ public partial class GetApplicationUsersCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+
+ private object[] results;
+
+ internal GetApplicationUsersCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
+ base(exception, cancelled, userState) {
+ this.results = results;
+ }
+
+ ///
+ public string[] Result {
+ get {
+ this.RaiseExceptionIfNecessary();
+ return ((string[])(this.results[0]));
+ }
+ }
+ }
+
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ public delegate void SetApplicationUsersCompletedEventHandler(object sender, SetApplicationUsersCompletedEventArgs e);
+
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.ComponentModel.DesignerCategoryAttribute("code")]
+ public partial class SetApplicationUsersCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+
+ private object[] results;
+
+ internal SetApplicationUsersCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
+ base(exception, cancelled, userState) {
+ this.results = results;
+ }
+
+ ///
+ public bool Result {
+ get {
+ this.RaiseExceptionIfNecessary();
+ return ((bool)(this.results[0]));
+ }
+ }
+ }
}
diff --git a/WebsitePanel/Sources/WebsitePanel.Server/DNSServer.asmx.cs b/WebsitePanel/Sources/WebsitePanel.Server/DNSServer.asmx.cs
index 89c6574a..a4f26d8a 100644
--- a/WebsitePanel/Sources/WebsitePanel.Server/DNSServer.asmx.cs
+++ b/WebsitePanel/Sources/WebsitePanel.Server/DNSServer.asmx.cs
@@ -28,6 +28,7 @@
using System;
using System.ComponentModel;
+using System.Globalization;
using System.Web.Services;
using System.Web.Services.Protocols;
using WebsitePanel.Providers;
@@ -51,6 +52,12 @@ namespace WebsitePanel.Server
get { return (IDnsServer)Provider; }
}
+ private string GetAsciiZoneName(string zoneName)
+ {
+ var idn = new IdnMapping();
+ return idn.GetAscii(zoneName);
+ }
+
#region Zones
[WebMethod, SoapHeader("settings")]
public bool ZoneExists(string zoneName)
@@ -58,7 +65,7 @@ namespace WebsitePanel.Server
try
{
Log.WriteStart("'{0}' ZoneExists", ProviderSettings.ProviderName);
- bool result = DnsProvider.ZoneExists(zoneName);
+ bool result = DnsProvider.ZoneExists(GetAsciiZoneName(zoneName));
Log.WriteEnd("'{0}' ZoneExists", ProviderSettings.ProviderName);
return result;
}
@@ -92,7 +99,7 @@ namespace WebsitePanel.Server
try
{
Log.WriteStart("'{0}' AddPrimaryZone", ProviderSettings.ProviderName);
- DnsProvider.AddPrimaryZone(zoneName, secondaryServers);
+ DnsProvider.AddPrimaryZone(GetAsciiZoneName(zoneName), secondaryServers);
Log.WriteEnd("'{0}' AddPrimaryZone", ProviderSettings.ProviderName);
}
catch (Exception ex)
@@ -108,7 +115,7 @@ namespace WebsitePanel.Server
try
{
Log.WriteStart("'{0}' AddSecondaryZone", ProviderSettings.ProviderName);
- DnsProvider.AddSecondaryZone(zoneName, masterServers);
+ DnsProvider.AddSecondaryZone(GetAsciiZoneName(zoneName), masterServers);
Log.WriteEnd("'{0}' AddSecondaryZone", ProviderSettings.ProviderName);
}
catch (Exception ex)
@@ -124,7 +131,7 @@ namespace WebsitePanel.Server
try
{
Log.WriteStart("'{0}' DeleteZone", ProviderSettings.ProviderName);
- DnsProvider.DeleteZone(zoneName);
+ DnsProvider.DeleteZone(GetAsciiZoneName(zoneName));
Log.WriteEnd("'{0}' DeleteZone", ProviderSettings.ProviderName);
}
catch (Exception ex)
@@ -140,7 +147,7 @@ namespace WebsitePanel.Server
try
{
Log.WriteStart("'{0}' UpdateSoaRecord", ProviderSettings.ProviderName);
- DnsProvider.UpdateSoaRecord(zoneName, host, primaryNsServer, primaryPerson);
+ DnsProvider.UpdateSoaRecord(GetAsciiZoneName(zoneName), host, primaryNsServer, primaryPerson);
Log.WriteEnd("'{0}' UpdateSoaRecord", ProviderSettings.ProviderName);
}
catch (Exception ex)
@@ -158,7 +165,7 @@ namespace WebsitePanel.Server
try
{
Log.WriteStart("'{0}' GetZoneRecords", ProviderSettings.ProviderName);
- DnsRecord[] result = DnsProvider.GetZoneRecords(zoneName);
+ DnsRecord[] result = DnsProvider.GetZoneRecords(GetAsciiZoneName(zoneName));
Log.WriteEnd("'{0}' GetZoneRecords", ProviderSettings.ProviderName);
return result;
}
@@ -175,7 +182,7 @@ namespace WebsitePanel.Server
try
{
Log.WriteStart("'{0}' AddZoneRecord", ProviderSettings.ProviderName);
- DnsProvider.AddZoneRecord(zoneName, record);
+ DnsProvider.AddZoneRecord(GetAsciiZoneName(zoneName), record);
Log.WriteEnd("'{0}' AddZoneRecord", ProviderSettings.ProviderName);
}
catch (Exception ex)
@@ -191,7 +198,7 @@ namespace WebsitePanel.Server
try
{
Log.WriteStart("'{0}' DeleteZoneRecord", ProviderSettings.ProviderName);
- DnsProvider.DeleteZoneRecord(zoneName, record);
+ DnsProvider.DeleteZoneRecord(GetAsciiZoneName(zoneName), record);
Log.WriteEnd("'{0}' DeleteZoneRecord", ProviderSettings.ProviderName);
}
catch (Exception ex)
@@ -207,7 +214,7 @@ namespace WebsitePanel.Server
try
{
Log.WriteStart("'{0}' AddZoneRecords", ProviderSettings.ProviderName);
- DnsProvider.AddZoneRecords(zoneName, records);
+ DnsProvider.AddZoneRecords(GetAsciiZoneName(zoneName), records);
Log.WriteEnd("'{0}' AddZoneRecords", ProviderSettings.ProviderName);
}
catch (Exception ex)
@@ -223,7 +230,7 @@ namespace WebsitePanel.Server
try
{
Log.WriteStart("'{0}' DeleteZoneRecords", ProviderSettings.ProviderName);
- DnsProvider.DeleteZoneRecords(zoneName, records);
+ DnsProvider.DeleteZoneRecords(GetAsciiZoneName(zoneName), records);
Log.WriteEnd("'{0}' DeleteZoneRecords", ProviderSettings.ProviderName);
}
catch (Exception ex)
diff --git a/WebsitePanel/Sources/WebsitePanel.Server/RemoteDesktopServices.asmx.cs b/WebsitePanel/Sources/WebsitePanel.Server/RemoteDesktopServices.asmx.cs
index 91d8d444..46ebb460 100644
--- a/WebsitePanel/Sources/WebsitePanel.Server/RemoteDesktopServices.asmx.cs
+++ b/WebsitePanel/Sources/WebsitePanel.Server/RemoteDesktopServices.asmx.cs
@@ -76,6 +76,23 @@ namespace WebsitePanel.Server
}
}
+ [WebMethod, SoapHeader("settings")]
+ public bool AddRdsServersToDeployment(RdsServer[] servers)
+ {
+ try
+ {
+ Log.WriteStart("'{0}' AddRdsServersToDeployment", ProviderSettings.ProviderName);
+ var result = RDSProvider.AddRdsServersToDeployment(servers);
+ Log.WriteEnd("'{0}' AddRdsServersToDeployment", ProviderSettings.ProviderName);
+ return result;
+ }
+ catch (Exception ex)
+ {
+ Log.WriteError(String.Format("'{0}' AddRdsServersToDeployment", ProviderSettings.ProviderName), ex);
+ throw;
+ }
+ }
+
[WebMethod, SoapHeader("settings")]
public RdsCollection GetCollection(string collectionName)
{
@@ -342,6 +359,39 @@ namespace WebsitePanel.Server
throw;
}
}
- }
+ [WebMethod, SoapHeader("settings")]
+ public string[] GetApplicationUsers(string collectionName, string applicationName)
+ {
+ try
+ {
+ Log.WriteStart("'{0}' GetApplicationUsers", ProviderSettings.ProviderName);
+ var result = RDSProvider.GetApplicationUsers(collectionName, applicationName);
+ Log.WriteEnd("'{0}' GetApplicationUsers", ProviderSettings.ProviderName);
+ return result;
+ }
+ catch (Exception ex)
+ {
+ Log.WriteError(String.Format("'{0}' GetApplicationUsers", ProviderSettings.ProviderName), ex);
+ throw;
+ }
+ }
+
+ [WebMethod, SoapHeader("settings")]
+ public bool SetApplicationUsers(string collectionName, RemoteApplication remoteApp, string[] users)
+ {
+ try
+ {
+ Log.WriteStart("'{0}' SetApplicationUsers", ProviderSettings.ProviderName);
+ var result = RDSProvider.SetApplicationUsers(collectionName, remoteApp, users);
+ Log.WriteEnd("'{0}' SetApplicationUsers", ProviderSettings.ProviderName);
+ return result;
+ }
+ catch (Exception ex)
+ {
+ Log.WriteError(String.Format("'{0}' SetApplicationUsers", ProviderSettings.ProviderName), ex);
+ throw;
+ }
+ }
+ }
}
diff --git a/WebsitePanel/Sources/WebsitePanel.Server/Web.config b/WebsitePanel/Sources/WebsitePanel.Server/Web.config
index fd2b751d..d9d1bde5 100644
--- a/WebsitePanel/Sources/WebsitePanel.Server/Web.config
+++ b/WebsitePanel/Sources/WebsitePanel.Server/Web.config
@@ -1,46 +1,51 @@
-
+
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
+
-
+
-
+
-
+
-
+
@@ -48,85 +53,85 @@
-
+
-
+
-
+
-
+
-
+
-
-
-
+
+
+
-
+
-
-
-
-
+
+
+
+
-
-
+
+
-
-
-
-
+
+
+
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
@@ -135,40 +140,40 @@
-
-
+
+
-
+
-
-
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
+
+
-
-
+
+
-
+
\ No newline at end of file
diff --git a/WebsitePanel/Sources/WebsitePanel.Server/WebsitePanel.Server.csproj b/WebsitePanel/Sources/WebsitePanel.Server/WebsitePanel.Server.csproj
index 544fc997..7cfa6f68 100644
--- a/WebsitePanel/Sources/WebsitePanel.Server/WebsitePanel.Server.csproj
+++ b/WebsitePanel/Sources/WebsitePanel.Server/WebsitePanel.Server.csproj
@@ -17,7 +17,7 @@
4.0
- v4.0
+ v3.5
false
@@ -80,7 +80,6 @@
-
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/ESModule_ControlsHierarchy.config b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/ESModule_ControlsHierarchy.config
index f2f41087..5e7e4ae7 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/ESModule_ControlsHierarchy.config
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/ESModule_ControlsHierarchy.config
@@ -141,4 +141,6 @@
+
+
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/WebsitePanel_Modules.config b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/WebsitePanel_Modules.config
index b43e286a..da90d397 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/WebsitePanel_Modules.config
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/WebsitePanel_Modules.config
@@ -574,6 +574,8 @@
+
+
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 3116414f..8ba7b6a4 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
@@ -213,4 +213,7 @@
Non-Existent
+
+ Current Real DNS Values
+
\ No newline at end of file
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/DomainsAddDomain.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/DomainsAddDomain.ascx.resx
index 2389512c..c05e907e 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/DomainsAddDomain.ascx.resx
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/DomainsAddDomain.ascx.resx
@@ -144,18 +144,6 @@
Tick this checkbox if DNS zone for this domain will be located on name servers of your hosting provider. Make sure you changed name servers in the domain registrar control panel.
-
- Please, enter correct domain name, for example "mydomain.com" or "sub.mydomain.com".
-
-
- *
-
-
- Please enter domain name
-
-
- *
-
Enable DNS
@@ -168,18 +156,6 @@
Assign to existing Web Site
-
- Please, enter correct sub-domain name, for example "subdomain" or "sub.subdomain".
-
-
- *
-
-
- Please enter sub-domain name
-
-
- *
-
Hostname:
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Code/Framework/Utils.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Code/Framework/Utils.cs
index 0a33b5a7..186614a1 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Code/Framework/Utils.cs
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Code/Framework/Utils.cs
@@ -159,7 +159,7 @@ namespace WebsitePanel.Portal
foreach (string part in parts)
if (part.Trim() != "" && !list.Contains(part.Trim()))
list.Add(part);
- return (string[])list.ToArray(typeof(string));
+ return (string[]) list.ToArray(typeof (string));
}
public static string ReplaceStringVariable(string str, string variable, string value)
@@ -172,7 +172,7 @@ namespace WebsitePanel.Portal
{
long length = stream.Length;
byte[] content = new byte[length];
- stream.Read(content, 0, (int)length);
+ stream.Read(content, 0, (int) length);
stream.Close();
return content;
}
@@ -231,7 +231,7 @@ namespace WebsitePanel.Portal
selValues.Add(item.Value);
}
- string cookieVal = String.Join(",", (string[])selValues.ToArray(typeof(string)));
+ string cookieVal = String.Join(",", (string[]) selValues.ToArray(typeof (string)));
// create cookie
HttpCookie cookie = new HttpCookie(ctrl.UniqueID, cookieVal);
@@ -251,7 +251,7 @@ namespace WebsitePanel.Portal
foreach (ListItem item in ctrl.Items)
item.Selected = false;
- string[] vals = cookie.Value.Split(new char[] { ',' });
+ string[] vals = cookie.Value.Split(new char[] {','});
foreach (string val in vals)
{
ListItem item = ctrl.Items.FindByValue(val);
@@ -278,9 +278,9 @@ namespace WebsitePanel.Portal
// Convert 4 bytes into a 32-bit integer value.
int seed = (randomBytes[0] & 0x7f) << 24 |
- randomBytes[1] << 16 |
- randomBytes[2] << 8 |
- randomBytes[3];
+ randomBytes[1] << 16 |
+ randomBytes[2] << 8 |
+ randomBytes[3];
Random rnd = new Random(seed);
@@ -294,17 +294,38 @@ namespace WebsitePanel.Portal
public static bool CheckQouta(string key, PackageContext cntx)
{
return cntx.Quotas.ContainsKey(key) &&
- ((cntx.Quotas[key].QuotaAllocatedValue == 1 && cntx.Quotas[key].QuotaTypeId == 1) ||
- (cntx.Quotas[key].QuotaTypeId != 1 && (cntx.Quotas[key].QuotaAllocatedValue > 0 || cntx.Quotas[key].QuotaAllocatedValue == -1)));
+ ((cntx.Quotas[key].QuotaAllocatedValue == 1 && cntx.Quotas[key].QuotaTypeId == 1) ||
+ (cntx.Quotas[key].QuotaTypeId != 1 && (cntx.Quotas[key].QuotaAllocatedValue > 0 || cntx.Quotas[key].QuotaAllocatedValue == -1)));
}
public static bool CheckQouta(string key, HostingPlanContext cntx)
{
return cntx.Quotas.ContainsKey(key) &&
- ((cntx.Quotas[key].QuotaAllocatedValue == 1 && cntx.Quotas[key].QuotaTypeId == 1) ||
- (cntx.Quotas[key].QuotaTypeId != 1 && (cntx.Quotas[key].QuotaAllocatedValue > 0 || cntx.Quotas[key].QuotaAllocatedValue == -1)));
+ ((cntx.Quotas[key].QuotaAllocatedValue == 1 && cntx.Quotas[key].QuotaTypeId == 1) ||
+ (cntx.Quotas[key].QuotaTypeId != 1 && (cntx.Quotas[key].QuotaAllocatedValue > 0 || cntx.Quotas[key].QuotaAllocatedValue == -1)));
}
+ public static bool IsIdnDomain(string domainName)
+ {
+ if (string.IsNullOrEmpty(domainName))
+ {
+ return false;
+ }
+
+ var idn = new IdnMapping();
+ return idn.GetAscii(domainName) != domainName;
+ }
+
+ public static string UnicodeToAscii(string domainName)
+ {
+ if (string.IsNullOrEmpty(domainName))
+ {
+ return string.Empty;
+ }
+
+ var idn = new IdnMapping();
+ return idn.GetAscii(domainName);
+ }
}
}
\ No newline at end of file
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Code/Helpers/RDSHelper.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Code/Helpers/RDSHelper.cs
index f8197414..8b8f8f72 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Code/Helpers/RDSHelper.cs
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Code/Helpers/RDSHelper.cs
@@ -66,7 +66,7 @@ namespace WebsitePanel.Portal
public RdsServer[] GetOrganizationRdsServersPaged(int itemId, int maximumRows, int startRowIndex, string sortColumn, string filterValue)
{
- rdsServers = ES.Services.RDS.GetOrganizationRdsServersPaged(itemId, "", filterValue, sortColumn, startRowIndex, maximumRows);
+ rdsServers = ES.Services.RDS.GetOrganizationRdsServersPaged(itemId, null, "", filterValue, sortColumn, startRowIndex, maximumRows);
return rdsServers.Servers;
}
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DnsZoneRecords.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DnsZoneRecords.ascx.cs
index 1f323332..d9b78d01 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DnsZoneRecords.ascx.cs
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DnsZoneRecords.ascx.cs
@@ -30,6 +30,7 @@ using System;
using System.Data;
using System.Configuration;
using System.Collections;
+using System.Globalization;
using System.Web;
using System.Web.Security;
using System.Web.UI;
@@ -57,6 +58,10 @@ namespace WebsitePanel.Portal
// domain name
DomainInfo domain = ES.Services.Servers.GetDomain(PanelRequest.DomainID);
litDomainName.Text = domain.DomainName;
+ if (Utils.IsIdnDomain(domain.DomainName))
+ {
+ litDomainName.Text = string.Format("{0} ({1})", Utils.UnicodeToAscii(domain.DomainName), domain.DomainName);
+ }
}
}
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx.cs
index da0f5a67..06fb93e2 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx.cs
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx.cs
@@ -39,6 +39,7 @@ using System.Web.UI.HtmlControls;
using System.Linq;
using WebsitePanel.EnterpriseServer;
+using System.Collections.Generic;
namespace WebsitePanel.Portal
{
@@ -160,7 +161,15 @@ namespace WebsitePanel.Portal
return "No Dns Records";
}
- return string.Join("\r\n", records.Select(x=>string.Format("{0}: {1}", x.RecordType, x.Value)));
+ var header = GetLocalizedString("DomainLookup.TooltipHeader");
+
+ var tooltipLines = new List();
+
+ tooltipLines.Add(header);
+ tooltipLines.Add(" ");
+ tooltipLines.AddRange( records.Select(x=>string.Format("{0}: {1}", x.RecordType, x.Value)));
+
+ return string.Join("\r\n", tooltipLines);
}
protected void odsDomainsPaged_Selected(object sender, ObjectDataSourceStatusEventArgs e)
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsAddDomain.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsAddDomain.ascx
index a7b93c8b..e1f91b1b 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsAddDomain.ascx
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsAddDomain.ascx
@@ -1,33 +1,21 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="DomainsAddDomain.ascx.cs" Inherits="WebsitePanel.Portal.DomainsAddDomain" %>
<%@ Register Src="UserControls/EnableAsyncTasksSupport.ascx" TagName="EnableAsyncTasksSupport" TagPrefix="wsp" %>
-<%@ Register Src="DomainsSelectDomainControl.ascx" TagName="DomainsSelectDomainControl" TagPrefix="uc1" %>
+<%@ Register Src="UserControls/DomainControl.ascx" TagName="DomainControl" TagPrefix="wsp" %>
<%@ Register Src="UserControls/CollapsiblePanel.ascx" TagPrefix="wsp" TagName="CollapsiblePanel" %>
-
+
-
-
-
-
-
-
-
-
- .
-
-
-
+
+
+<%--
+
+
+
--%>
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/MailEditAddress.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/MailEditAddress.ascx
index 6037cbc1..48c26731 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/MailEditAddress.ascx
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/MailEditAddress.ascx
@@ -9,7 +9,7 @@