From 47f2c512b4f5a864cc85124c6c11578c4b63927c Mon Sep 17 00:00:00 2001 From: Olov Karlsson Date: Sat, 20 Dec 2014 18:51:25 +0100 Subject: [PATCH 01/35] Do not allow Mail or Organizations when creating new space with a IDN domain --- .../WebsitePanel/UserCreateSpace.ascx | 2 +- .../WebsitePanel/UserCreateSpace.ascx.cs | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx index 8c821a95..ff40e5e3 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx @@ -73,7 +73,7 @@ - + diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx.cs index 2f4bb529..b0cfd4af 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx.cs @@ -31,6 +31,7 @@ using System.Collections.Generic; using System.Linq; using System.Web.UI.WebControls; using WebsitePanel.EnterpriseServer; +using WebsitePanel.Portal.UserControls; using WebsitePanel.Providers.HostedSolution; namespace WebsitePanel.Portal @@ -266,5 +267,20 @@ namespace WebsitePanel.Portal { BindHostingPlan(); } + + protected void txtDomainName_OnTextChanged(object sender, DomainControl.DomainNameEventArgs e) + { + if (Utils.IsIdnDomain(txtDomainName.Text)) + { + fsMail.Disabled = true; + chkIntegratedOUProvisioning.Checked = false; + chkIntegratedOUProvisioning.Enabled = false; + } + else + { + fsMail.Disabled = false; + BindHostingPlan(); + } + } } } \ No newline at end of file From 83279669b4997ce8273137e7bb92795df2bca5b6 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Sat, 20 Dec 2014 17:12:57 -0500 Subject: [PATCH 02/35] Added tag build-2.1.0.501 for changeset c6093546e2c6 From bbf72dc922c89ec67ab7cee43379f31ecc382d3c Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Sun, 21 Dec 2014 22:08:26 -0800 Subject: [PATCH 03/35] Wrong rds server name fixed --- .../RemoteDesktopServices/RemoteDesktopServicesController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/RemoteDesktopServices/RemoteDesktopServicesController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/RemoteDesktopServices/RemoteDesktopServicesController.cs index 2c21c32f..752b6d9b 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/RemoteDesktopServices/RemoteDesktopServicesController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/RemoteDesktopServices/RemoteDesktopServicesController.cs @@ -599,7 +599,7 @@ namespace WebsitePanel.EnterpriseServer try { - if (1 == 1)//(CheckRDSServerAvaliable(rdsServer.FqdName)) + if (CheckRDSServerAvaliable(rdsServer.FqdName)) { rdsServer.Id = DataProvider.AddRDSServer(rdsServer.Name, rdsServer.FqdName, rdsServer.Description); } From 161b03e8de737e1c8a00dc146a896676e0c04b7d Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Mon, 22 Dec 2014 08:16:06 -0500 Subject: [PATCH 04/35] Added tag build-2.1.0.502 for changeset 7dd6e27c826e From 9579debd59613441a5ef7a2ca394400eb533c066 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Mon, 22 Dec 2014 12:11:26 -0500 Subject: [PATCH 05/35] Added tag build-2.1.0.503 for changeset ab71151d7cff From 6e716c311dda78c59494c499d24431ce14a7d26c Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Mon, 22 Dec 2014 14:24:08 -0500 Subject: [PATCH 06/35] Added tag build-2.1.0.504 for changeset 1872e8662105 From 69e86444192a8d6b8c4eec05794b4d8cdf4ac80e Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Tue, 23 Dec 2014 07:02:17 -0800 Subject: [PATCH 07/35] ST Fixes --- .../SchedulerTasks/DomainExpirationTask.cs | 5 +++-- .../DesktopModules/WebsitePanel/Domains.ascx | 2 +- .../DesktopModules/WebsitePanel/Domains.ascx.cs | 17 +++++++++++++++-- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs index 521d17be..4e8b079d 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs @@ -183,9 +183,10 @@ namespace WebsitePanel.EnterpriseServer items["user"] = user; items["Domains"] = domains.Select(x => new { DomainName = x.DomainName, - ExpirationDate = x.ExpirationDate, + ExpirationDate = x.ExpirationDate < DateTime.Now ? "Expired" : x.ExpirationDate.ToString(), + ExpirationDateOrdering = x.ExpirationDate, Customer = string.Format("{0} {1}", domainUsers[x.PackageId].FirstName, domainUsers[x.PackageId].LastName) }) - .OrderBy(x => x.ExpirationDate).ThenBy(x => x.Customer).ThenBy(x => x.DomainName); + .OrderBy(x => x.ExpirationDateOrdering).ThenBy(x => x.Customer).ThenBy(x => x.DomainName); items["IncludeNonExistenDomains"] = includeNonExistenDomains; diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx index 8dc31afd..c1ac1fcd 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx @@ -42,7 +42,7 @@ <%# GetDomainExpirationDate(Eval("ExpirationDate"), Eval("LastUpdateDate"))%> -
+
">
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx.cs index 06fb93e2..db114e6d 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx.cs @@ -45,8 +45,12 @@ namespace WebsitePanel.Portal { public partial class Domains : WebsitePanelModuleBase { + public Dictionary dnsRecords; + protected void Page_Load(object sender, EventArgs e) { + dnsRecords = new Dictionary(); + gvDomains.PageSize = UsersHelper.GetDisplayItemsPerPage(); // visibility @@ -154,11 +158,18 @@ namespace WebsitePanel.Portal public string GetDomainDnsRecords(int domainId) { + if(dnsRecords.ContainsKey(domainId)) + { + return dnsRecords[domainId]; + } + var records = ES.Services.Servers.GetDomainDnsRecords(domainId); if (!records.Any()) { - return "No Dns Records"; + dnsRecords.Add(domainId, string.Empty); + + return string.Empty; } var header = GetLocalizedString("DomainLookup.TooltipHeader"); @@ -169,7 +180,9 @@ namespace WebsitePanel.Portal tooltipLines.Add(" "); tooltipLines.AddRange( records.Select(x=>string.Format("{0}: {1}", x.RecordType, x.Value))); - return string.Join("\r\n", tooltipLines); + dnsRecords.Add(domainId, string.Join("\r\n", tooltipLines)); + + return dnsRecords[domainId]; } protected void odsDomainsPaged_Selected(object sender, ObjectDataSourceStatusEventArgs e) From 4cd7d2bd40447d9b1f7b213478f64ea0c869bd81 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Tue, 23 Dec 2014 16:11:19 -0500 Subject: [PATCH 08/35] Added tag build-2.1.0.505 for changeset ee6aac1f7438 From acb9445b4b2d486fc56fdb65e6295d9ef2829c83 Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Wed, 24 Dec 2014 04:33:00 -0800 Subject: [PATCH 09/35] Feedback fixes --- .../RemoteDesktopServicesController.cs | 25 ++++--- .../IRemoteDesktopServices.cs | 1 + .../Windows2012.cs | 14 ++++ .../RemoteDesktopServicesProxy.cs | 73 +++++++++++++++++++ .../RemoteDesktopServices.asmx.cs | 17 +++++ .../WebsitePanel_SharedResources.ascx.resx | 3 + .../WebsitePanel/RDS/AssignedRDSServers.ascx | 3 +- .../RDS/RDSEditCollectionApps.ascx.cs | 6 +- .../WebsitePanel/RDSServers.ascx | 10 +-- .../WebsitePanel/RDSServersAddserver.ascx | 3 +- .../RDSServersAddserver.ascx.designer.cs | 9 --- 11 files changed, 132 insertions(+), 32 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/RemoteDesktopServices/RemoteDesktopServicesController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/RemoteDesktopServices/RemoteDesktopServicesController.cs index 752b6d9b..130f395d 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/RemoteDesktopServices/RemoteDesktopServicesController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/RemoteDesktopServices/RemoteDesktopServicesController.cs @@ -605,13 +605,20 @@ namespace WebsitePanel.EnterpriseServer } else { - result.AddError("", new Exception("The server that you are adding, is not available")); + result.AddError("REMOTE_DESKTOP_SERVICES_ADD_RDS_SERVER", new Exception("The server that you are adding, is not available")); return result; } } catch (Exception ex) { - result.AddError("REMOTE_DESKTOP_SERVICES_ADD_RDS_SERVER", ex); + if (ex.InnerException != null) + { + result.AddError("Unable to add RDS Server", ex.InnerException); + } + else + { + result.AddError("Unable to add RDS Server", ex); + } } finally { @@ -1167,18 +1174,12 @@ namespace WebsitePanel.EnterpriseServer private static bool CheckRDSServerAvaliable(string hostname) { bool result = false; + var ping = new Ping(); + var reply = ping.Send(hostname, 1000); - try + if (reply.Status == IPStatus.Success) { - var ping = new Ping(); - var reply = ping.Send(hostname, 1000); // 1 second time out (in ms) - - if (reply.Status == IPStatus.Success) - result = true; - } - catch (Exception) - { - result = false; + result = true; } return result; diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/IRemoteDesktopServices.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/IRemoteDesktopServices.cs index 6de22e8d..acb3cc5d 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/IRemoteDesktopServices.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/IRemoteDesktopServices.cs @@ -63,5 +63,6 @@ namespace WebsitePanel.Providers.RemoteDesktopServices bool CheckServerAvailability(string hostName); string[] GetApplicationUsers(string collectionName, string applicationName); bool SetApplicationUsers(string collectionName, RemoteApplication remoteApp, string[] users); + bool CheckRDSServerAvaliable(string hostname); } } diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.TerminalServices.Windows2012/Windows2012.cs b/WebsitePanel/Sources/WebsitePanel.Providers.TerminalServices.Windows2012/Windows2012.cs index 16552df1..c15e2c69 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.TerminalServices.Windows2012/Windows2012.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.TerminalServices.Windows2012/Windows2012.cs @@ -165,6 +165,20 @@ namespace WebsitePanel.Providers.RemoteDesktopServices return new string[]{}; } + public bool CheckRDSServerAvaliable(string hostname) + { + bool result = false; + var ping = new Ping(); + var reply = ping.Send(hostname, 1000); + + if (reply.Status == IPStatus.Success) + { + result = true; + } + + return result; + } + #endregion #region RDS Collections diff --git a/WebsitePanel/Sources/WebsitePanel.Server.Client/RemoteDesktopServicesProxy.cs b/WebsitePanel/Sources/WebsitePanel.Server.Client/RemoteDesktopServicesProxy.cs index f3f14bca..79bd1a40 100644 --- a/WebsitePanel/Sources/WebsitePanel.Server.Client/RemoteDesktopServicesProxy.cs +++ b/WebsitePanel/Sources/WebsitePanel.Server.Client/RemoteDesktopServicesProxy.cs @@ -69,6 +69,8 @@ namespace WebsitePanel.Providers.RemoteDesktopServices { private System.Threading.SendOrPostCallback SetApplicationUsersOperationCompleted; + private System.Threading.SendOrPostCallback CheckRDSServerAvaliableOperationCompleted; + /// public RemoteDesktopServices() { this.Url = "http://localhost:9003/RemoteDesktopServices.asmx"; @@ -134,6 +136,9 @@ namespace WebsitePanel.Providers.RemoteDesktopServices { /// public event SetApplicationUsersCompletedEventHandler SetApplicationUsersCompleted; + /// + public event CheckRDSServerAvaliableCompletedEventHandler CheckRDSServerAvaliableCompleted; + /// [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)] @@ -1021,6 +1026,48 @@ namespace WebsitePanel.Providers.RemoteDesktopServices { } } + /// + [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/CheckRDSServerAvaliable", 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 CheckRDSServerAvaliable(string hostname) { + object[] results = this.Invoke("CheckRDSServerAvaliable", new object[] { + hostname}); + return ((bool)(results[0])); + } + + /// + public System.IAsyncResult BeginCheckRDSServerAvaliable(string hostname, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CheckRDSServerAvaliable", new object[] { + hostname}, callback, asyncState); + } + + /// + public bool EndCheckRDSServerAvaliable(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((bool)(results[0])); + } + + /// + public void CheckRDSServerAvaliableAsync(string hostname) { + this.CheckRDSServerAvaliableAsync(hostname, null); + } + + /// + public void CheckRDSServerAvaliableAsync(string hostname, object userState) { + if ((this.CheckRDSServerAvaliableOperationCompleted == null)) { + this.CheckRDSServerAvaliableOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCheckRDSServerAvaliableOperationCompleted); + } + this.InvokeAsync("CheckRDSServerAvaliable", new object[] { + hostname}, this.CheckRDSServerAvaliableOperationCompleted, userState); + } + + private void OnCheckRDSServerAvaliableOperationCompleted(object arg) { + if ((this.CheckRDSServerAvaliableCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CheckRDSServerAvaliableCompleted(this, new CheckRDSServerAvaliableCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + /// public new void CancelAsync(object userState) { base.CancelAsync(userState); @@ -1436,4 +1483,30 @@ namespace WebsitePanel.Providers.RemoteDesktopServices { } } } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + public delegate void CheckRDSServerAvaliableCompletedEventHandler(object sender, CheckRDSServerAvaliableCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CheckRDSServerAvaliableCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CheckRDSServerAvaliableCompletedEventArgs(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/RemoteDesktopServices.asmx.cs b/WebsitePanel/Sources/WebsitePanel.Server/RemoteDesktopServices.asmx.cs index 46ebb460..facdb011 100644 --- a/WebsitePanel/Sources/WebsitePanel.Server/RemoteDesktopServices.asmx.cs +++ b/WebsitePanel/Sources/WebsitePanel.Server/RemoteDesktopServices.asmx.cs @@ -393,5 +393,22 @@ namespace WebsitePanel.Server throw; } } + + [WebMethod, SoapHeader("settings")] + public bool CheckRDSServerAvaliable(string hostname) + { + try + { + Log.WriteStart("'{0}' CheckRDSServerAvaliable", ProviderSettings.ProviderName); + var result = RDSProvider.CheckRDSServerAvaliable(hostname); + Log.WriteEnd("'{0}' CheckRDSServerAvaliable", ProviderSettings.ProviderName); + return result; + } + catch (Exception ex) + { + Log.WriteError(String.Format("'{0}' CheckRDSServerAvaliable", ProviderSettings.ProviderName), ex); + throw; + } + } } } diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx index c8d36c92..5a90921e 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx @@ -5620,5 +5620,8 @@ Check domain expiration date + + Unable to add RDS Server + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/AssignedRDSServers.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/AssignedRDSServers.ascx index 0ce2a538..6016913e 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/AssignedRDSServers.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/AssignedRDSServers.ascx @@ -67,8 +67,7 @@ - + meta:resourcekey="cmdDelete" OnClientClick="return confirm('Are you sure you want to remove selected server?')"> diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/RDSEditCollectionApps.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/RDSEditCollectionApps.ascx.cs index cfd3e35d..5b78eb62 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/RDSEditCollectionApps.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/RDSEditCollectionApps.ascx.cs @@ -41,6 +41,8 @@ namespace WebsitePanel.Portal.RDS protected void Page_Load(object sender, EventArgs e) { + remoreApps.Module = Module; + if (!IsPostBack) { RdsCollection collection = ES.Services.RDS.GetRdsCollection(PanelRequest.CollectionID); @@ -48,8 +50,8 @@ namespace WebsitePanel.Portal.RDS locCName.Text = collection.Name; - remoreApps.SetApps(collectionApps, Module); - } + remoreApps.SetApps(collectionApps); + } } protected void btnSave_Click(object sender, EventArgs e) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDSServers.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDSServers.ascx index 70cf33d6..0aa32a4e 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDSServers.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDSServers.ascx @@ -43,16 +43,16 @@ - + - - + + + - + meta:resourcekey="cmdDelete" OnClientClick="return confirm('Are you sure you want to delete selected rds server?')"> diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDSServersAddserver.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDSServersAddserver.ascx index 2f9d100a..e7f20993 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDSServersAddserver.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDSServersAddserver.ascx @@ -20,8 +20,7 @@ - - + diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDSServersAddserver.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDSServersAddserver.ascx.designer.cs index 526938b3..7bf05979 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDSServersAddserver.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDSServersAddserver.ascx.designer.cs @@ -75,15 +75,6 @@ namespace WebsitePanel.Portal { /// protected global::System.Web.UI.WebControls.TextBox txtServerComments; - /// - /// valServerComments control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.RequiredFieldValidator valServerComments; - /// /// btnAdd control. /// From fc83494a332abaf5e9ad0fd48bca3af3f44dc3f3 Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Wed, 24 Dec 2014 04:51:03 -0800 Subject: [PATCH 10/35] ST added registrar name to domain expiration task --- WebsitePanel/Database/update_db.sql | 187 +++++++++++++++++- .../Servers/DomainInfo.cs | 1 + .../Data/DataProvider.cs | 14 ++ .../SchedulerTasks/DomainExpirationTask.cs | 5 +- .../SchedulerTasks/DomainLookupViewTask.cs | 2 + .../Servers/ServerController.cs | 38 ++-- .../DomainLookup/DomainDnsChanges.cs | 2 + .../App_LocalResources/Domains.ascx.resx | 3 + .../DesktopModules/WebsitePanel/Domains.ascx | 12 +- .../WebsitePanel/Domains.ascx.cs | 22 ++- 10 files changed, 260 insertions(+), 26 deletions(-) diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index 8b609c0f..2329e177 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -6352,6 +6352,7 @@ Please, find below details of your domain expiration information. Domain + Registrar Customer Expiration Date @@ -6360,8 +6361,9 @@ Please, find below details of your domain expiration information. #Domain.DomainName# + #iif(isnull(Domain.Registrar), "", Domain.Registrar)# #Domain.Customer# - #Domain.ExpirationDate# + #iif(isnull(Domain.ExpirationDate), "", Domain.ExpirationDate)# @@ -6424,8 +6426,9 @@ Please, find below details of your domain expiration information. Domain: #Domain.DomainName# + Registrar: #iif(isnull(Domain.Registrar), "", Domain.Registrar)# Customer: #Domain.Customer# - Expiration Date: #Domain.ExpirationDate# + Expiration Date: #iif(isnull(Domain.ExpirationDate), "", Domain.ExpirationDate)# @@ -6470,6 +6473,7 @@ INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [Property .Summary { font-family: Tahoma; font-size: 9pt; } .Summary H1 { font-size: 1.7em; color: ##1F4978; border-bottom: dotted 3px ##efefef; } .Summary H2 { font-size: 1.3em; color: ##1F4978; } + .Summary H3 { font-size: 1em; color: ##1F4978; } .Summary TABLE { border: solid 1px ##e5e5e5; } .Summary TH, .Summary TD.Label { padding: 5px; font-size: 8pt; font-weight: bold; background-color: ##f5f5f5; } @@ -6498,6 +6502,7 @@ Please, find below details of MX and NS changes.

#Domain.DomainName# - #DomainUsers[Domain.PackageId].FirstName# #DomainUsers[Domain.PackageId].LastName#

+

#iif(isnull(Domain.Registrar), "", Domain.Registrar)# #iif(isnull(Domain.ExpirationDate), "", Domain.ExpirationDate)#

@@ -6558,6 +6563,8 @@ Please, find below details of MX and NS changes. #Domain.DomainName# - #DomainUsers[Domain.PackageId].FirstName# #DomainUsers[Domain.PackageId].LastName# + Registrar: #iif(isnull(Domain.Registrar), "", Domain.Registrar)# + ExpirationDate: #iif(isnull(Domain.ExpirationDate), "", Domain.ExpirationDate)# DNS: #DnsChange.DnsServer# @@ -6965,7 +6972,6 @@ exec sp_executesql @sql, N'@StartRow int, @MaximumRows int, @PackageID int, @Fil RETURN - GO @@ -7095,3 +7101,178 @@ AS RETURN @Result GO + + +-- Domain Expiration scheduled tasks fixes + +IF NOT EXISTS(SELECT * FROM sys.columns + WHERE [name] = N'RegistrarName' AND [object_id] = OBJECT_ID(N'Domains')) +BEGIN + ALTER TABLE [dbo].[Domains] ADD RegistrarName nvarchar(max); +END +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'UpdateWhoisDomainInfo') +DROP PROCEDURE UpdateWhoisDomainInfo +GO +CREATE PROCEDURE [dbo].UpdateWhoisDomainInfo +( + @DomainId INT, + @DomainCreationDate DateTime, + @DomainExpirationDate DateTime, + @DomainLastUpdateDate DateTime, + @DomainRegistrarName nvarchar(max) +) +AS +UPDATE [dbo].[Domains] SET [CreationDate] = @DomainCreationDate, [ExpirationDate] = @DomainExpirationDate, [LastUpdateDate] = @DomainLastUpdateDate, [RegistrarName] = @DomainRegistrarName WHERE [DomainID] = @DomainId +GO + + + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetDomainsPaged') +DROP PROCEDURE GetDomainsPaged +GO +CREATE PROCEDURE [dbo].[GetDomainsPaged] +( + @ActorID int, + @PackageID int, + @ServerID int, + @Recursive bit, + @FilterColumn nvarchar(50) = '', + @FilterValue nvarchar(50) = '', + @SortColumn nvarchar(50), + @StartRow int, + @MaximumRows int +) +AS +SET NOCOUNT ON + +-- check rights +IF dbo.CheckActorPackageRights(@ActorID, @PackageID) = 0 +RAISERROR('You are not allowed to access this package', 16, 1) + +-- build query and run it to the temporary table +DECLARE @sql nvarchar(2500) + +IF @SortColumn = '' OR @SortColumn IS NULL +SET @SortColumn = 'DomainName' + +SET @sql = ' +DECLARE @Domains TABLE +( + ItemPosition int IDENTITY(1,1), + DomainID int +) +INSERT INTO @Domains (DomainID) +SELECT + D.DomainID +FROM Domains AS D +INNER JOIN Packages AS P ON D.PackageID = P.PackageID +INNER JOIN UsersDetailed AS U ON P.UserID = U.UserID +LEFT OUTER JOIN ServiceItems AS Z ON D.ZoneItemID = Z.ItemID +LEFT OUTER JOIN Services AS S ON Z.ServiceID = S.ServiceID +LEFT OUTER JOIN Servers AS SRV ON S.ServerID = SRV.ServerID +WHERE (D.IsInstantAlias = 0 AND D.IsDomainPointer = 0) AND + ((@Recursive = 0 AND D.PackageID = @PackageID) + OR (@Recursive = 1 AND dbo.CheckPackageParent(@PackageID, D.PackageID) = 1)) +AND (@ServerID = 0 OR (@ServerID > 0 AND S.ServerID = @ServerID)) +' + +IF @FilterColumn <> '' AND @FilterValue <> '' +SET @sql = @sql + ' AND ' + @FilterColumn + ' LIKE @FilterValue ' + +IF @SortColumn <> '' AND @SortColumn IS NOT NULL +SET @sql = @sql + ' ORDER BY ' + @SortColumn + ' ' + +SET @sql = @sql + ' SELECT COUNT(DomainID) FROM @Domains;SELECT + D.DomainID, + D.PackageID, + D.ZoneItemID, + D.DomainItemID, + D.DomainName, + D.HostingAllowed, + ISNULL(WS.ItemID, 0) AS WebSiteID, + WS.ItemName AS WebSiteName, + ISNULL(MD.ItemID, 0) AS MailDomainID, + MD.ItemName AS MailDomainName, + D.IsSubDomain, + D.IsInstantAlias, + D.IsDomainPointer, + D.ExpirationDate, + D.LastUpdateDate, + D.RegistrarName, + P.PackageName, + ISNULL(SRV.ServerID, 0) AS ServerID, + ISNULL(SRV.ServerName, '''') AS ServerName, + ISNULL(SRV.Comments, '''') AS ServerComments, + ISNULL(SRV.VirtualServer, 0) AS VirtualServer, + P.UserID, + U.Username, + U.FirstName, + U.LastName, + U.FullName, + U.RoleID, + U.Email +FROM @Domains AS SD +INNER JOIN Domains AS D ON SD.DomainID = D.DomainID +INNER JOIN Packages AS P ON D.PackageID = P.PackageID +INNER JOIN UsersDetailed AS U ON P.UserID = U.UserID +LEFT OUTER JOIN ServiceItems AS WS ON D.WebSiteID = WS.ItemID +LEFT OUTER JOIN ServiceItems AS MD ON D.MailDomainID = MD.ItemID +LEFT OUTER JOIN ServiceItems AS Z ON D.ZoneItemID = Z.ItemID +LEFT OUTER JOIN Services AS S ON Z.ServiceID = S.ServiceID +LEFT OUTER JOIN Servers AS SRV ON S.ServerID = SRV.ServerID +WHERE SD.ItemPosition BETWEEN @StartRow + 1 AND @StartRow + @MaximumRows' + +exec sp_executesql @sql, N'@StartRow int, @MaximumRows int, @PackageID int, @FilterValue nvarchar(50), @ServerID int, @Recursive bit', +@StartRow, @MaximumRows, @PackageID, @FilterValue, @ServerID, @Recursive + + +RETURN +GO + + + + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetDomains') +DROP PROCEDURE GetDomains +GO +CREATE PROCEDURE [dbo].[GetDomains] +( + @ActorID int, + @PackageID int, + @Recursive bit = 1 +) +AS + +-- check rights +IF dbo.CheckActorPackageRights(@ActorID, @PackageID) = 0 +RAISERROR('You are not allowed to access this package', 16, 1) + +SELECT + D.DomainID, + D.PackageID, + D.ZoneItemID, + D.DomainItemID, + D.DomainName, + D.HostingAllowed, + ISNULL(WS.ItemID, 0) AS WebSiteID, + WS.ItemName AS WebSiteName, + ISNULL(MD.ItemID, 0) AS MailDomainID, + MD.ItemName AS MailDomainName, + Z.ItemName AS ZoneName, + D.IsSubDomain, + D.IsInstantAlias, + D.CreationDate, + D.ExpirationDate, + D.LastUpdateDate, + D.IsDomainPointer, + D.RegistrarName +FROM Domains AS D +INNER JOIN PackagesTree(@PackageID, @Recursive) AS PT ON D.PackageID = PT.PackageID +LEFT OUTER JOIN ServiceItems AS WS ON D.WebSiteID = WS.ItemID +LEFT OUTER JOIN ServiceItems AS MD ON D.MailDomainID = MD.ItemID +LEFT OUTER JOIN ServiceItems AS Z ON D.ZoneItemID = Z.ItemID +RETURN + +GO \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Servers/DomainInfo.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Servers/DomainInfo.cs index 1fbca5da..f0f240e7 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Servers/DomainInfo.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Servers/DomainInfo.cs @@ -151,5 +151,6 @@ namespace WebsitePanel.EnterpriseServer public DateTime? CreationDate { get; set; } public DateTime? ExpirationDate { get; set; } public DateTime? LastUpdateDate { get; set; } + public string RegistrarName { get; set; } } } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs index bab3c724..0de87b44 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs @@ -4827,6 +4827,20 @@ namespace WebsitePanel.EnterpriseServer ); } + public static void UpdateWhoisDomainInfo(int domainId, DateTime? domainCreationDate, DateTime? domainExpirationDate, DateTime? domainLastUpdateDate, string registrarName) + { + SqlHelper.ExecuteNonQuery( + ConnectionString, + CommandType.StoredProcedure, + "UpdateWhoisDomainInfo", + new SqlParameter("@DomainId", domainId), + new SqlParameter("@DomainCreationDate", domainCreationDate), + new SqlParameter("@DomainExpirationDate", domainExpirationDate), + new SqlParameter("@DomainLastUpdateDate", domainLastUpdateDate), + new SqlParameter("@DomainRegistrarName", registrarName) + ); + } + #endregion } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs index 4e8b079d..5d2d615b 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs @@ -80,7 +80,7 @@ namespace WebsitePanel.EnterpriseServer checkedDomains.Add(domain.DomainId); - ServerController.UpdateDomainRegistrationData(domain); + ServerController.UpdateDomainWhoisData(domain); if (CheckDomainExpiration(domain.ExpirationDate, daysBeforeNotify)) { @@ -105,7 +105,7 @@ namespace WebsitePanel.EnterpriseServer if (mainDomain != null) { - ServerController.UpdateDomainRegistrationData(subDomain, mainDomain.CreationDate, mainDomain.ExpirationDate); + ServerController.UpdateDomainWhoisData(subDomain, mainDomain.CreationDate, mainDomain.ExpirationDate, mainDomain.RegistrarName); var nonExistenDomain = nonExistenDomains.FirstOrDefault(x => subDomain.DomainId == x.DomainId); @@ -185,6 +185,7 @@ namespace WebsitePanel.EnterpriseServer items["Domains"] = domains.Select(x => new { DomainName = x.DomainName, ExpirationDate = x.ExpirationDate < DateTime.Now ? "Expired" : x.ExpirationDate.ToString(), ExpirationDateOrdering = x.ExpirationDate, + Registrar = x.RegistrarName, Customer = string.Format("{0} {1}", domainUsers[x.PackageId].FirstName, domainUsers[x.PackageId].LastName) }) .OrderBy(x => x.ExpirationDateOrdering).ThenBy(x => x.Customer).ThenBy(x => x.DomainName); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs index b6a7b26d..92bb35a4 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs @@ -106,6 +106,8 @@ namespace WebsitePanel.EnterpriseServer DomainDnsChanges domainChanges = new DomainDnsChanges(); domainChanges.DomainName = domain.DomainName; domainChanges.PackageId = domain.PackageId; + domainChanges.Registrar = domain.RegistrarName; + domainChanges.ExpirationDate = domain.ExpirationDate; var dbDnsRecords = ObjectUtils.CreateListFromDataReader(DataProvider.GetDomainAllDnsRecords(domain.DomainId)); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs index 220ee79d..34a851ef 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs @@ -75,6 +75,12 @@ namespace WebsitePanel.EnterpriseServer @"expires:(.+)" //.fi }; + private static List _registrarNamePatterns = new List { + @"Created by Registrar:(.+)", + @"Registrar:(.+)", + @"Registrant Name:(.+)" + }; + private static List _datePatterns = new List { @"ddd MMM dd HH:mm:ss G\MT yyyy" }; @@ -1837,7 +1843,7 @@ namespace WebsitePanel.EnterpriseServer ServerController.AddServiceDNSRecords(packageId, ResourceGroups.VPSForPC, domain, ""); } - UpdateDomainRegistrationData(domain); + UpdateDomainWhoisData(domain); } // add instant alias @@ -2691,22 +2697,20 @@ namespace WebsitePanel.EnterpriseServer } } - public static DomainInfo UpdateDomainRegistrationData(DomainInfo domain) + public static DomainInfo UpdateDomainWhoisData(DomainInfo domain) { - DateTime? createdDate = null; - DateTime? expiredDate = null; - try { var whoisResult = WhoisClient.Query(domain.DomainName.ToLowerInvariant()); - createdDate = GetDomainInfoDate(whoisResult.Raw, _createdDatePatterns); - expiredDate = GetDomainInfoDate(whoisResult.Raw, _expiredDatePatterns); + string creationDateString = ParseWhoisDomainInfo(whoisResult.Raw, _createdDatePatterns); + string expirationDateString = ParseWhoisDomainInfo(whoisResult.Raw, _expiredDatePatterns); - domain.CreationDate = createdDate; - domain.ExpirationDate = expiredDate; + domain.CreationDate = ParseDate(creationDateString); + domain.ExpirationDate = ParseDate(expirationDateString); + domain.RegistrarName = ParseWhoisDomainInfo(whoisResult.Raw, _registrarNamePatterns); - DataProvider.UpdateDomainDates(domain.DomainId, createdDate, expiredDate, DateTime.Now); + DataProvider.UpdateWhoisDomainInfo(domain.DomainId, domain.CreationDate, domain.ExpirationDate, DateTime.Now, domain.RegistrarName); } catch (Exception e) { @@ -2716,17 +2720,18 @@ namespace WebsitePanel.EnterpriseServer return domain; } - public static DomainInfo UpdateDomainRegistrationData(DomainInfo domain, DateTime? creationDate, DateTime? expirationDate) + public static DomainInfo UpdateDomainWhoisData(DomainInfo domain, DateTime? creationDate, DateTime? expirationDate, string registrarName) { - DataProvider.UpdateDomainDates(domain.DomainId, creationDate, expirationDate, DateTime.Now); + DataProvider.UpdateWhoisDomainInfo(domain.DomainId, creationDate, expirationDate, DateTime.Now, registrarName); domain.CreationDate = creationDate; domain.ExpirationDate = expirationDate; + domain.RegistrarName = registrarName; return domain; } - private static DateTime? GetDomainInfoDate(string raw, IEnumerable patterns) + private static string ParseWhoisDomainInfo(string raw, IEnumerable patterns) { foreach (var createdRegex in patterns) { @@ -2736,7 +2741,7 @@ namespace WebsitePanel.EnterpriseServer { if (match.Success && match.Groups.Count == 2) { - return ParseDate(match.Groups[1].ToString().Trim()); + return match.Groups[1].ToString().Trim(); } } } @@ -2746,6 +2751,11 @@ namespace WebsitePanel.EnterpriseServer private static DateTime? ParseDate(string dateString) { + if (string.IsNullOrEmpty(dateString)) + { + return null; + } + var result = DateTime.MinValue; foreach (var datePattern in _datePatterns) diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsChanges.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsChanges.cs index 3f19ef39..d2c8cd10 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsChanges.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsChanges.cs @@ -8,6 +8,8 @@ namespace WebsitePanel.Providers.DomainLookup public class DomainDnsChanges { public string DomainName { get; set; } + public string Registrar { get; set; } + public DateTime? ExpirationDate { get; set; } public int PackageId { get; set; } public List DnsChanges { get; set; } 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 8ba7b6a4..e6e8c79a 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 @@ -216,4 +216,7 @@ Current Real DNS Values + + Registrar: + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx index c1ac1fcd..fd5adb81 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx @@ -38,12 +38,16 @@ - + <%# GetDomainExpirationDate(Eval("ExpirationDate"), Eval("LastUpdateDate"))%> - -
- "> + + + + + +
+ ">
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx.cs index db114e6d..20e6ace4 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx.cs @@ -55,10 +55,10 @@ namespace WebsitePanel.Portal // visibility chkRecursive.Visible = (PanelSecurity.SelectedUser.Role != UserRole.User); - gvDomains.Columns[3].Visible = gvDomains.Columns[3].Visible = + gvDomains.Columns[4].Visible = gvDomains.Columns[5].Visible = (PanelSecurity.SelectedUser.Role != UserRole.User) && chkRecursive.Checked; - gvDomains.Columns[5].Visible = (PanelSecurity.SelectedUser.Role == UserRole.Administrator); - gvDomains.Columns[6].Visible = (PanelSecurity.EffectiveUser.Role == UserRole.Administrator); + gvDomains.Columns[6].Visible = (PanelSecurity.SelectedUser.Role == UserRole.Administrator); + gvDomains.Columns[7].Visible = (PanelSecurity.EffectiveUser.Role == UserRole.Administrator); if (!IsPostBack) { @@ -185,6 +185,22 @@ namespace WebsitePanel.Portal return dnsRecords[domainId]; } + public string GetDomainTooltip(int domainId, string registrar) + { + var dnsString = GetDomainDnsRecords(domainId); + + var tooltipLines = new List(); + + if (!string.IsNullOrEmpty(registrar)) + { + var header = GetLocalizedString("DomainLookup.TooltipHeader.Registrar"); + tooltipLines.Add(header + " " + registrar); + tooltipLines.Add("\r\n"); + } + + return string.Join("\r\n", tooltipLines) + dnsString; + } + protected void odsDomainsPaged_Selected(object sender, ObjectDataSourceStatusEventArgs e) { if (e.Exception != null) From e993401a2c8104c5424ec0fe4eb9729f42a67bf0 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Wed, 24 Dec 2014 11:17:32 -0500 Subject: [PATCH 11/35] Added tag build-2.1.0.506 for changeset 80b7a92dfe8c From 26dd0065c6a8dbd6cbe022f2aef8ef88df3db21f Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Wed, 24 Dec 2014 13:11:37 -0500 Subject: [PATCH 12/35] Added tag build-2.1.0.507 for changeset 34abac9d94e6 From 4751a2b3492bee76296e5bd2588599930e763f28 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Wed, 24 Dec 2014 13:20:07 -0500 Subject: [PATCH 13/35] Added tag build-2.1.0.508 for changeset 18dbf84cf213 From 935db943cb1189bc54f67a54d262a528d4850b54 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Wed, 24 Dec 2014 14:16:11 -0500 Subject: [PATCH 14/35] Added tag build-2.1.0.509 for changeset 192be760f8aa From bea82d546b7aff6da0a97480774c66710b583c9c Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Wed, 24 Dec 2014 17:42:37 -0500 Subject: [PATCH 15/35] Added tag build-2.1.0.510 for changeset a194c0f1d853 From 3412a8005f787cfe0cfa3d870647018bf1f61cd6 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Wed, 24 Dec 2014 19:02:54 -0500 Subject: [PATCH 16/35] Added tag build-2.1.0.511 for changeset 66f929340d1f From a4081573abdab9fea88ed5820f0ece86ae8f104a Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Thu, 25 Dec 2014 08:45:36 -0500 Subject: [PATCH 17/35] Added tag build-2.1.0.512 for changeset 9ba19d0b4ea6 From cf749150c06a38652352cbd514bd7a761f332c00 Mon Sep 17 00:00:00 2001 From: Olov Karlsson Date: Thu, 25 Dec 2014 23:22:53 +0100 Subject: [PATCH 18/35] Don't do postback for check of IDN domain name. Prohibit wrong use and show error --- .../WebsitePanel_SharedResources.ascx.resx | 7 +++- .../WebsitePanel/DomainsAddDomain.ascx | 6 +--- .../WebsitePanel/DomainsAddDomain.ascx.cs | 22 ++++++++++--- .../WebsitePanel/UserCreateSpace.ascx | 2 +- .../WebsitePanel/UserCreateSpace.ascx.cs | 33 +++++++++++++------ 5 files changed, 48 insertions(+), 22 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx index c8d36c92..f3dc6d89 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx @@ -5620,5 +5620,10 @@ Check domain expiration date - + + You cannot use a IDN domain name for mail + + + You cannot use a IDN domain name for organizations + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsAddDomain.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsAddDomain.ascx index e1f91b1b..7555cf13 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsAddDomain.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsAddDomain.ascx @@ -10,12 +10,8 @@

- +

-<%-- -

- -

--%> diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsAddDomain.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsAddDomain.ascx.cs index 017e6797..6158be2b 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsAddDomain.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsAddDomain.ascx.cs @@ -260,15 +260,27 @@ namespace WebsitePanel.Portal } protected void btnAdd_Click(object sender, EventArgs e) { - AddDomain(); + if (CheckForCorrectIdnDomainUsage(DomainName.Text)) + { + AddDomain(); + } } + private bool CheckForCorrectIdnDomainUsage(string domainName) + { + // If the choosen domain is a idn domain, don't allow to create mail + if (Utils.IsIdnDomain(domainName) && PointMailDomain.Checked) + { + ShowErrorMessage("IDNDOMAIN_NO_MAIL"); + return false; + } + + return true; + } + protected void DomainName_TextChanged(object sender, DomainControl.DomainNameEventArgs e) { - // If the choosen domain is a idn domain, don't allow to create mail - var isIdn = Utils.IsIdnDomain(e.DomainName); - PointMailDomainPanel.Enabled = !isIdn; - PointMailDomain.Checked = !isIdn; + CheckForCorrectIdnDomainUsage(e.DomainName); } } } \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx index ff40e5e3..1d5fe8a2 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx @@ -73,7 +73,7 @@
- +
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx.cs index b0cfd4af..18d830b0 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx.cs @@ -250,7 +250,10 @@ namespace WebsitePanel.Portal protected void btnCreate_Click(object sender, EventArgs e) { - CreateHostingSpace(); + if (CheckForCorrectIdnDomainUsage()) + { + CreateHostingSpace(); + } } protected void rbFtpAccountName_SelectedIndexChanged(object sender, EventArgs e) @@ -268,19 +271,29 @@ namespace WebsitePanel.Portal BindHostingPlan(); } - protected void txtDomainName_OnTextChanged(object sender, DomainControl.DomainNameEventArgs e) + private bool CheckForCorrectIdnDomainUsage() { if (Utils.IsIdnDomain(txtDomainName.Text)) { - fsMail.Disabled = true; - chkIntegratedOUProvisioning.Checked = false; - chkIntegratedOUProvisioning.Enabled = false; - } - else - { - fsMail.Disabled = false; - BindHostingPlan(); + if (chkIntegratedOUProvisioning.Checked) + { + ShowErrorMessage("IDNDOMAIN_NO_ORGANIZATION"); + return false; + } + + if (chkCreateMailAccount.Checked) + { + ShowErrorMessage("IDNDOMAIN_NO_MAIL"); + return false; + } } + + return true; + } + + protected void txtDomainName_OnTextChanged(object sender, DomainControl.DomainNameEventArgs e) + { + CheckForCorrectIdnDomainUsage(); } } } \ No newline at end of file From 40e2bfb8364b71c4fc8536bee2e7fb3eea8cc3ce Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Thu, 25 Dec 2014 18:45:04 -0500 Subject: [PATCH 19/35] Added tag build-2.1.0.513 for changeset 6fbcd74c8689 From cdf5ab0707b298f25f176d866ce2bd9e2bc4378c Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Fri, 26 Dec 2014 11:18:21 -0500 Subject: [PATCH 20/35] Added tag build-2.1.0.514 for changeset f2c2d4b79667 From 5ac2c8300689711a1d202e7fbc54969ccfb7e9b6 Mon Sep 17 00:00:00 2001 From: Olov Karlsson Date: Sat, 27 Dec 2014 18:48:06 +0100 Subject: [PATCH 21/35] Small correction in UI behaviour for checking IDN domains --- .../DesktopModules/WebsitePanel/DomainsAddDomain.ascx.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsAddDomain.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsAddDomain.ascx.cs index 6158be2b..6c6b0dc0 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsAddDomain.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/DomainsAddDomain.ascx.cs @@ -157,6 +157,8 @@ namespace WebsitePanel.Portal // allow sub-domains AllowSubDomainsPanel.Visible = (type == DomainType.Domain) && PanelSecurity.EffectiveUser.Role != UserRole.User; + + CheckForCorrectIdnDomainUsage(DomainName.Text); } private DomainType GetDomainType(string typeName) From 3c5cac21b6d05e4545ff7fa54b45277c24837b09 Mon Sep 17 00:00:00 2001 From: Olov Karlsson Date: Sat, 27 Dec 2014 18:49:16 +0100 Subject: [PATCH 22/35] fix for issue wsp-1029, cannot import mail domain if quota of groups or lists is set to 0 --- .../MailServers/MailServerController.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/MailServers/MailServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/MailServers/MailServerController.cs index 7ae608e5..2ac8a129 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/MailServers/MailServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/MailServers/MailServerController.cs @@ -1505,6 +1505,13 @@ namespace WebsitePanel.EnterpriseServer /// True if quota will exceed. Otherwise, false. protected bool VerifyIfQuotaWillBeExceeded(int packageId, string quotaName, int numberOfItemsToAdd) { + // Don't bother to check quota if the number of items to add is zero or less otherwise IsQuotasWillExceed + // will fail when quota is set to 0 on lists or groups and still thera are no items to import + if (numberOfItemsToAdd <= 0) + { + return false; + } + bool result = false; QuotaValueInfo quotaInfo = PackageController.GetPackageQuota(packageId, quotaName); From 2a1539f8b0a094b8beb68dd5d63946672c8864b7 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Sat, 27 Dec 2014 13:15:05 -0500 Subject: [PATCH 23/35] Added tag build-2.1.0.515 for changeset aa78c1bc4d1a From 02ebc0f66b4e26fd5cfad9d797d87a7d404d0085 Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Mon, 29 Dec 2014 02:36:12 -0800 Subject: [PATCH 24/35] ST domain mx, ns and expiration tasks email templates fixes --- WebsitePanel/Database/update_db.sql | 67 ++++++++++++++++++++++------- 1 file changed, 51 insertions(+), 16 deletions(-) diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index 2329e177..d5886f15 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -6310,9 +6310,10 @@ BEGIN INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [PropertyValue]) VALUES (1, N'DomainExpirationLetter', N'From', N'support@HostingCompany.com') END GO -IF NOT EXISTS (SELECT * FROM [dbo].[UserSettings] WHERE [UserID] = 1 AND [SettingsName]= N'DomainExpirationLetter' AND [PropertyName]= N'HtmlBody' ) -BEGIN -INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [PropertyValue]) VALUES (1, N'DomainExpirationLetter', N'HtmlBody', N' + +DECLARE @DomainExpirationLetterHtmlBody nvarchar(2500) + +Set @DomainExpirationLetterHtmlBody = N' Domain Expiration Information