From 6437148de47965be4872386a6cbe1acd5af01e1a Mon Sep 17 00:00:00 2001 From: Haya Nmeir Date: Tue, 27 Nov 2012 22:57:15 +0200 Subject: [PATCH] Web Changes --- .../FilesProxy.cs | 11 + .../OperatingSystemsProxy.cs | 11 + .../WebServersProxy.cs | 6 +- .../Code/Files/FilesController.cs | 158 +++ .../OperatingSystemController.cs | 9 + .../Code/Packages/PackageController.cs | 39 + .../Code/WebServers/WebServerController.cs | 12 +- .../WebsitePanel.EnterpriseServer/Web.config | 4 +- .../esFiles.asmx.cs | 8 + .../esOperatingSystems.asmx.cs | 8 + .../esWebServers.asmx.cs | 4 +- .../OS/IOperatingSystem.cs | 6 + .../Windows2003.cs | 16 + .../OperatingSystemProxy.cs | 256 ++++- .../WebsitePanel.Server.Utils/FileUtils.cs | 121 +++ .../Sources/WebsitePanel.Server.Utils/OS.cs | 18 + .../OperatingSystem.asmx.cs | 49 + .../App_Data/ModulesData.config | 3 + .../App_Data/WebsitePanel_Modules.config | 8 + .../App_Data/WebsitePanel_Pages.config | 13 + .../WebsitePanel_Modules.ascx.resx | 5 +- .../WebsitePanel_Pages.ascx.resx | 3 + .../WebsitePanel_SharedResources.ascx.resx | 7 +- .../WebSitesEditSite.ascx.resx | 3 + .../ApplyEnableHardQuotaFeature.ascx | 19 + .../ApplyEnableHardQuotaFeature.ascx.cs | 74 ++ ...plyEnableHardQuotaFeature.ascx.designer.cs | 33 + .../Windows2008_Settings.ascx.resx | 10 +- .../Windows2008_Settings.ascx | 39 +- .../Windows2008_Settings.ascx.cs | 24 + .../Windows2008_Settings.ascx.designer.cs | 54 +- .../Resources/Windows2008_Settings.ascx.resx | 129 +++ .../WebsitePanel/WebSitesEditSite.ascx | 916 +++++++++--------- .../WebsitePanel/WebSitesEditSite.ascx.cs | 2 +- .../WebSitesEditSite.ascx.designer.cs | 9 + .../WebsitePanel.Portal.Modules.csproj | 9 + .../WebsitePanel.WebPortal.csproj | 4 +- 37 files changed, 1618 insertions(+), 482 deletions(-) create mode 100644 WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ApplyEnableHardQuotaFeature.ascx create mode 100644 WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ApplyEnableHardQuotaFeature.ascx.cs create mode 100644 WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ApplyEnableHardQuotaFeature.ascx.designer.cs create mode 100644 WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Resources/Windows2008_Settings.ascx.resx diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/FilesProxy.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/FilesProxy.cs index 9018d66a..984321d9 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/FilesProxy.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/FilesProxy.cs @@ -1238,6 +1238,17 @@ namespace WebsitePanel.EnterpriseServer { this.ExecuteSyncActionsCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } + + //CO Changes + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/ApplyEnableHardQuotaFeature", 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 int ApplyEnableHardQuotaFeature(int packageId) + { + object[] results = this.Invoke("ApplyEnableHardQuotaFeature", new object[] { + packageId }); + return ((int)(results[0])); + } + //END /// public new void CancelAsync(object userState) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/OperatingSystemsProxy.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/OperatingSystemsProxy.cs index f64b1da1..1d23ee54 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/OperatingSystemsProxy.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/OperatingSystemsProxy.cs @@ -463,6 +463,17 @@ namespace WebsitePanel.EnterpriseServer } } + //CO Changes + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/CheckFileServicesInstallation", 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 bool CheckFileServicesInstallation(int serviceId) + { + object[] results = this.Invoke("CheckFileServicesInstallation", new object[] { + serviceId}); + return ((bool)(results[0])); + } + //END + /// public new void CancelAsync(object userState) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/WebServersProxy.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/WebServersProxy.cs index dfd90b61..c6c88a5a 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/WebServersProxy.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/WebServersProxy.cs @@ -1198,9 +1198,11 @@ namespace WebsitePanel.EnterpriseServer { /// [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/DeleteWebSite", 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 int DeleteWebSite(int siteItemId) { + public int DeleteWebSite(int siteItemId, bool deleteWebsiteDirectory) + { object[] results = this.Invoke("DeleteWebSite", new object[] { - siteItemId}); + siteItemId, + deleteWebsiteDirectory}); return ((int)(results[0])); } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Files/FilesController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Files/FilesController.cs index 7784cad8..e9dc8e48 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Files/FilesController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Files/FilesController.cs @@ -912,5 +912,163 @@ namespace WebsitePanel.EnterpriseServer return users.ToArray(); } + + public static int SetFolderQuota(int packageId, string path, string driveName) + { + + // check account + int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); + if (accountCheck < 0) return accountCheck; + + // check package + int packageCheck = SecurityContext.CheckPackage(packageId, DemandPackage.IsActive); + if (packageCheck < 0) return packageCheck; + + // place log record + TaskManager.StartTask("FILES", "SET_QUOTA_ON_FOLDER", path); + TaskManager.ItemId = packageId; + + try + { + + // disk space quota + // This gets all the disk space allocated for a specific customer + // It includes the package Add Ons * Quatity + Hosting Plan System disk space value. + QuotaValueInfo diskSpaceQuota = PackageController.GetPackageQuota(packageId, Quotas.OS_DISKSPACE); + + + #region figure Quota Unit + + // Quota Unit + string unit = String.Empty; + if (diskSpaceQuota.QuotaDescription.ToLower().Contains("gb")) + unit = "GB"; + else if (diskSpaceQuota.QuotaDescription.ToLower().Contains("mb")) + unit = "MB"; + else + unit = "KB"; + + #endregion + + OS.OperatingSystem os = GetOS(packageId); + + os.SetQuotaLimitOnFolder(path, driveName, diskSpaceQuota.QuotaAllocatedValue.ToString() + unit, 0, String.Empty, String.Empty); + + return 0; + } + catch (Exception ex) + { + //Log and return a generic error rather than throwing an exception + TaskManager.WriteError(ex); + return BusinessErrorCodes.ERROR_FILE_GENERIC_LOGGED; + } + finally + { + TaskManager.CompleteTask(); + } + + + } + + public static int ApplyEnableHardQuotaFeature(int packageId) + { + if (SecurityContext.CheckAccount(DemandAccount.IsActive | DemandAccount.IsAdmin | DemandAccount.NotDemo) != 0) + throw new Exception("This method could be called by serveradmin only."); + + // place log record + TaskManager.StartTask("FILES", "APPLY_ENABLEHARDQUOTAFEATURE"); + + try + { + + // request OS service + //int osId = PackageController.GetPackageServiceId(packageId, ResourceGroups.Os); + //if (osId == 0) + // return -1; + + //OS.OperatingSystem os = new OS.OperatingSystem(); + //ServiceProviderProxy.Init(os, osId); + + ////Get operating system settings + // StringDictionary osSesstings = ServerController.GetServiceSettings(osId); + // bool diskQuotaEnabled = (osSesstings["EnableHardQuota"] != null) ? bool.Parse(osSesstings["EnableHardQuota"]) : false; + //string driveName = osSesstings["LocationDrive"]; + + //if (!diskQuotaEnabled) + // return -1; + + + List allPackages = PackageController.GetPackagePackages(packageId, true); + + foreach (PackageInfo childPackage in allPackages) + { + // request OS service + int osId = PackageController.GetPackageServiceId(childPackage.PackageId, ResourceGroups.Os); + if (osId == 0) + continue; + + OS.OperatingSystem os = new OS.OperatingSystem(); + ServiceProviderProxy.Init(os, osId); + + //Get operating system settings + StringDictionary osSesstings = ServerController.GetServiceSettings(osId); + string driveName = osSesstings["LocationDrive"]; + + if (String.IsNullOrEmpty(driveName)) + continue; + + string homeFolder = FilesController.GetHomeFolder(childPackage.PackageId); + FilesController.SetFolderQuota(childPackage.PackageId, homeFolder, driveName); + } + } + catch (Exception ex) + { + throw TaskManager.WriteError(ex); + } + finally + { + TaskManager.CompleteTask(); + } + + return 0; + + } + + public static int DeleteDirectoryRecursive(int packageId, string rootPath) + { + + // check account + int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); + if (accountCheck < 0) return accountCheck; + + // check package + int packageCheck = SecurityContext.CheckPackage(packageId, DemandPackage.IsActive); + if (packageCheck < 0) return packageCheck; + + // place log record + TaskManager.StartTask("FILES", "DELETE_DIRECTORY_RECURSIVE", rootPath); + TaskManager.ItemId = packageId; + + try + { + + OS.OperatingSystem os = GetOS(packageId); + os.DeleteDirectoryRecursive(rootPath); + + return 0; + } + catch (Exception ex) + { + //Log and return a generic error rather than throwing an exception + TaskManager.WriteError(ex); + return BusinessErrorCodes.ERROR_FILE_GENERIC_LOGGED; + } + finally + { + TaskManager.CompleteTask(); + } + + + } } } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/OperatingSystems/OperatingSystemController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/OperatingSystems/OperatingSystemController.cs index 2e6bc7bb..238ec360 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/OperatingSystems/OperatingSystemController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/OperatingSystems/OperatingSystemController.cs @@ -406,6 +406,15 @@ namespace WebsitePanel.EnterpriseServer TaskManager.CompleteTask(); } } + + // Check If FSRM Role services were installed + public static bool CheckFileServicesInstallation(int serviceId) + { + OS.OperatingSystem os = GetOS(serviceId); + return os.CheckFileServicesInstallation(); + + } + #endregion #region Web Platform Installer diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Packages/PackageController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Packages/PackageController.cs index fd61926f..3363a13f 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Packages/PackageController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Packages/PackageController.cs @@ -770,6 +770,9 @@ namespace WebsitePanel.EnterpriseServer if (result.ExceedingQuotas.Tables[0].Rows.Count > 0) result.Result = BusinessErrorCodes.ERROR_PACKAGE_QUOTA_EXCEED; + + // Update the Hard quota on home folder in case it was enabled and in case there was a change in disk space + UpdatePackageHardQuota(package.PackageId); } finally { @@ -963,6 +966,9 @@ namespace WebsitePanel.EnterpriseServer homeFolder.PackageId = packageId; homeFolder.Name = path; + // Added By Haya + UpdatePackageHardQuota(packageId); + // save package item return AddPackageItem(homeFolder); } @@ -976,6 +982,30 @@ namespace WebsitePanel.EnterpriseServer { DataProvider.UpdatePackageBandwidthUpdate(packageId, updateDate); } + + // This gets the system quota and updates the home folder with the value + public static void UpdatePackageHardQuota(int packageId) + { + // request OS service + int osId = GetPackageServiceId(packageId, ResourceGroups.Os); + if (osId == 0) + return; + + OS.OperatingSystem os = new OS.OperatingSystem(); + ServiceProviderProxy.Init(os, osId); + + //Get operating system settings + StringDictionary osSesstings = ServerController.GetServiceSettings(osId); + bool diskQuotaEnabled = (osSesstings["EnableHardQuota"] != null) ? bool.Parse(osSesstings["EnableHardQuota"]) : false; + string driveName = osSesstings["LocationDrive"]; + + if (!diskQuotaEnabled) + return; + + string homeFolder = FilesController.GetHomeFolder(packageId); + FilesController.SetFolderQuota(packageId, homeFolder, driveName); + + } #endregion @@ -1035,6 +1065,8 @@ namespace WebsitePanel.EnterpriseServer result.Result = addonId; + // Update the Hard quota on home folder in case it was enabled and in case there was a change in disk space + UpdatePackageHardQuota(addon.PackageId); return result; } @@ -1062,6 +1094,9 @@ namespace WebsitePanel.EnterpriseServer if (result.ExceedingQuotas.Tables[0].Rows.Count > 0) result.Result = BusinessErrorCodes.ERROR_PACKAGE_QUOTA_EXCEED; + // Update the Hard quota on home folder in case it was enabled and in case there was a change in disk space + UpdatePackageHardQuota(addon.PackageId); + return result; } @@ -1072,6 +1107,10 @@ namespace WebsitePanel.EnterpriseServer | DemandAccount.IsReseller); if (accountCheck < 0) return accountCheck; + + // Update the Hard quota on home folder in case it was enabled and in case there was a change in disk space + UpdatePackageHardQuota(GetPackageAddon(packageAddonId).PackageId); + DataProvider.DeletePackageAddon(SecurityContext.User.UserId, packageAddonId); return 0; diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs index 1590849d..d93c9ed9 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs @@ -583,7 +583,7 @@ namespace WebsitePanel.EnterpriseServer } } - public static int DeleteWebSite(int siteItemId) + public static int DeleteWebSite(int siteItemId, bool deleteWebsiteDirectory) { // check account int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); @@ -655,6 +655,16 @@ namespace WebsitePanel.EnterpriseServer // web.DeleteSite(siteItem.SiteId); + // Delete WebManagementAccess Account + WebServerController.RevokeWebManagementAccess(siteItemId); + + if (deleteWebsiteDirectory) + { + // Delete website directory from file server + // This will remove the hard quota as well + FilesController.DeleteDirectoryRecursive(siteItem.PackageId, new DirectoryInfo(siteItem.DataPath).Parent.FullName); + + } // delete service item PackageController.DeletePackageItem(siteItemId); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config index 3766094f..cbf6a05d 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config @@ -5,11 +5,11 @@ - + - + diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esFiles.asmx.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esFiles.asmx.cs index 15a64d0d..14b2b455 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esFiles.asmx.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esFiles.asmx.cs @@ -193,5 +193,13 @@ namespace WebsitePanel.EnterpriseServer { FilesController.ExecuteSyncActions(packageId, actions); } + + //CO Changes + [WebMethod] + public int ApplyEnableHardQuotaFeature(int packageId) + { + return FilesController.ApplyEnableHardQuotaFeature(packageId); + } + //END } } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esOperatingSystems.asmx.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esOperatingSystems.asmx.cs index e8b01891..807901a9 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esOperatingSystems.asmx.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esOperatingSystems.asmx.cs @@ -93,5 +93,13 @@ namespace WebsitePanel.EnterpriseServer { return OperatingSystemController.DeleteOdbcSource(itemId); } + + //CO Changes + [WebMethod] + public bool CheckFileServicesInstallation(int serviceId) + { + return OperatingSystemController.CheckFileServicesInstallation(serviceId); + } + //END } } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esWebServers.asmx.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esWebServers.asmx.cs index 00dc32d0..6f0fe0d3 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esWebServers.asmx.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esWebServers.asmx.cs @@ -152,9 +152,9 @@ namespace WebsitePanel.EnterpriseServer } [WebMethod] - public int DeleteWebSite(int siteItemId) + public int DeleteWebSite(int siteItemId, bool deleteWebsiteDirectory) { - return WebServerController.DeleteWebSite(siteItemId); + return WebServerController.DeleteWebSite(siteItemId, deleteWebsiteDirectory); } [WebMethod] diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/OS/IOperatingSystem.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/OS/IOperatingSystem.cs index fc9f3076..0877a008 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/OS/IOperatingSystem.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/OS/IOperatingSystem.cs @@ -81,5 +81,11 @@ namespace WebsitePanel.Providers.OS // Synchronizing FolderGraph GetFolderGraph(string path); void ExecuteSyncActions(FileSyncAction[] actions); + + void SetQuotaLimitOnFolder(string folderPath, string shareNameDrive, string quotaLimit, int mode, string wmiUserName, string wmiPassword); + void DeleteDirectoryRecursive(string rootPath); + + // File Services + bool CheckFileServicesInstallation(); } } diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2003/Windows2003.cs b/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2003/Windows2003.cs index f251bd66..f9c8026b 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2003/Windows2003.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2003/Windows2003.cs @@ -209,6 +209,16 @@ namespace WebsitePanel.Providers.OS SecurityUtils.GrantGroupNtfsPermissions(path, users, resetChildPermissions, ServerSettings, usersOU, null); } + + public virtual void SetQuotaLimitOnFolder(string folderPath, string shareNameDrive, string quotaLimit, int mode, string wmiUserName, string wmiPassword) + { + FileUtils.SetQuotaLimitOnFolder(folderPath, shareNameDrive, quotaLimit, mode, wmiUserName, wmiPassword); + } + + public virtual void DeleteDirectoryRecursive(string rootPath) + { + FileUtils.DeleteDirectoryRecursive(rootPath); + } #endregion #region ODBC DSNs @@ -729,5 +739,11 @@ namespace WebsitePanel.Providers.OS { return WebsitePanel.Server.Utils.OS.GetVersion() == WebsitePanel.Server.Utils.OS.WindowsVersion.WindowsServer2003; } + + public virtual bool CheckFileServicesInstallation() + { + return WebsitePanel.Server.Utils.OS.CheckFileServicesInstallation(); + + } } } diff --git a/WebsitePanel/Sources/WebsitePanel.Server.Client/OperatingSystemProxy.cs b/WebsitePanel/Sources/WebsitePanel.Server.Client/OperatingSystemProxy.cs index f40b6d59..b6675706 100644 --- a/WebsitePanel/Sources/WebsitePanel.Server.Client/OperatingSystemProxy.cs +++ b/WebsitePanel/Sources/WebsitePanel.Server.Client/OperatingSystemProxy.cs @@ -131,6 +131,12 @@ namespace WebsitePanel.Providers.OS { private System.Threading.SendOrPostCallback UpdateDSNOperationCompleted; private System.Threading.SendOrPostCallback DeleteDSNOperationCompleted; + + private System.Threading.SendOrPostCallback SetQuotaLimitOnFolderOperationCompleted; + + private System.Threading.SendOrPostCallback DeleteDirectoryRecursiveOperationCompleted; + + private System.Threading.SendOrPostCallback CheckFileServicesInstallationOperationCompleted; /// public OperatingSystem() { @@ -247,6 +253,16 @@ namespace WebsitePanel.Providers.OS { /// public event DeleteDSNCompletedEventHandler DeleteDSNCompleted; + + /// + public event SetQuotaLimitOnFolderCompletedEventHandler SetQuotaLimitOnFolderCompleted; + + /// + public event DeleteDirectoryRecursiveCompletedEventHandler DeleteDirectoryRecursiveCompleted; + + /// + public event CheckFileServicesInstallationCompletedEventHandler CheckFileServicesInstallationCompleted; + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] @@ -1592,7 +1608,154 @@ namespace WebsitePanel.Providers.OS { this.ExecuteSyncActionsCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } - + + /// + [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/SetQuotaLimitOnFolder", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public bool SetQuotaLimitOnFolder(string folderPath, string shareNameDrive, string quotaLimit, int mode, string wmiUserName, string wmiPassword) + { + object[] results = this.Invoke("SetQuotaLimitOnFolder", new object[] { + folderPath, shareNameDrive, quotaLimit, mode, wmiUserName, wmiPassword}); + return ((bool)(results[0])); + } + + /// + public System.IAsyncResult BeginSetQuotaLimitOnFolder(string folderPath, string shareNameDrive, string quotaLimit, int mode, string wmiUserName, string wmiPassword, System.AsyncCallback callback, object asyncState) + { + return this.BeginInvoke("SetQuotaLimitOnFolder", new object[] { + folderPath, shareNameDrive, quotaLimit, mode, wmiUserName, wmiPassword}, callback, asyncState); + } + + /// + public bool EndSetQuotaLimitOnFolder(System.IAsyncResult asyncResult) + { + object[] results = this.EndInvoke(asyncResult); + return ((bool)(results[0])); + } + + /// + public void SetQuotaLimitOnFolderAsync(string folderPath, string shareNameDrive, string quotaLimit, int mode, string wmiUserName, string wmiPassword) + { + this.SetQuotaLimitOnFolderAsync(folderPath, shareNameDrive, quotaLimit, mode, wmiUserName, wmiPassword, null); + } + + /// + public void SetQuotaLimitOnFolderAsync(string folderPath, string shareNameDrive, string quotaLimit, int mode, string wmiUserName, string wmiPassword, object userState) + { + if ((this.SetQuotaLimitOnFolderOperationCompleted == null)) + { + this.SetQuotaLimitOnFolderOperationCompleted = new System.Threading.SendOrPostCallback(this.OnSetQuotaLimitOnFolderOperationCompleted); + } + this.InvokeAsync("SetQuotaLimitOnFolder", new object[] { + folderPath, shareNameDrive, quotaLimit, mode, wmiUserName, wmiPassword}, this.SetQuotaLimitOnFolderOperationCompleted, userState); + } + + private void OnSetQuotaLimitOnFolderOperationCompleted(object arg) + { + if ((this.SetQuotaLimitOnFolderCompleted != null)) + { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.SetQuotaLimitOnFolderCompleted(this, new SetQuotaLimitOnFolderCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/DeleteDirectoryRecursive", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public bool DeleteDirectoryRecursive(string rootPath) + { + object[] results = this.Invoke("DeleteDirectoryRecursive", new object[] { + rootPath }); + return ((bool)(results[0])); + } + + /// + public System.IAsyncResult BeginDeleteDirectoryRecursive(string rootPath, System.AsyncCallback callback, object asyncState) + { + return this.BeginInvoke("DeleteDirectoryRecursive", new object[] { + rootPath}, callback, asyncState); + } + + /// + public bool EndDeleteDirectoryRecursive(System.IAsyncResult asyncResult) + { + object[] results = this.EndInvoke(asyncResult); + return ((bool)(results[0])); + } + + /// + public void DeleteDirectoryRecursiveAsync(string rootPath) + { + this.DeleteDirectoryRecursiveAsync(rootPath, null); + } + + /// + public void DeleteDirectoryRecursiveAsync(string rootPath, object userState) + { + if ((this.DeleteDirectoryRecursiveOperationCompleted == null)) + { + this.DeleteDirectoryRecursiveOperationCompleted = new System.Threading.SendOrPostCallback(this.OnDeleteDirectoryRecursiveOperationCompleted); + } + this.InvokeAsync("DeleteDirectoryRecursive", new object[] { + rootPath}, this.DeleteDirectoryRecursiveOperationCompleted, userState); + } + + private void OnDeleteDirectoryRecursiveOperationCompleted(object arg) + { + if ((this.DeleteDirectoryRecursiveCompleted != null)) + { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.DeleteDirectoryRecursiveCompleted(this, new DeleteDirectoryRecursiveCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/CheckFileServicesInstallation", RequestNamespace = "http://smbsaas/websitepanel/server/", ResponseNamespace = "http://smbsaas/websitepanel/server/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public bool CheckFileServicesInstallation() + { + object[] results = this.Invoke("CheckFileServicesInstallation", new object[0]); + return ((bool)(results[0])); + } + + /// + public System.IAsyncResult BeginCheckFileServicesInstallation(System.AsyncCallback callback, object asyncState) + { + return this.BeginInvoke("CheckFileServicesInstallation", new object[0], callback, asyncState); + } + + /// + public bool EndCheckFileServicesInstallation(System.IAsyncResult asyncResult) + { + object[] results = this.EndInvoke(asyncResult); + return ((bool)(results[0])); + } + + /// + public void CheckFileServicesInstallationAsync() + { + this.CheckFileServicesInstallationAsync(null); + } + + /// + public void CheckFileServicesInstallationAsync(object userState) + { + if ((this.CheckFileServicesInstallationOperationCompleted == null)) + { + this.CheckFileServicesInstallationOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCheckFileServicesInstallationOperationCompleted); + } + this.InvokeAsync("CheckFileServicesInstallation", new object[0], this.CheckFileServicesInstallationOperationCompleted, userState); + } + + private void OnCheckFileServicesInstallationOperationCompleted(object arg) + { + if ((this.CheckFileServicesInstallationCompleted != null)) + { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CheckFileServicesInstallationCompleted(this, new CheckFileServicesInstallationCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetInstalledOdbcDrivers", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] @@ -2391,4 +2554,95 @@ namespace WebsitePanel.Providers.OS { /// [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void DeleteDSNCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + public delegate void SetQuotaLimitOnFolderCompletedEventHandler(object sender, SetQuotaLimitOnFolderCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class SetQuotaLimitOnFolderCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs + { + + private object[] results; + + internal SetQuotaLimitOnFolderCompletedEventArgs(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.42")] + public delegate void CheckFileServicesInstallationCompletedEventHandler(object sender, CheckFileServicesInstallationCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CheckFileServicesInstallationCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs + { + + private object[] results; + + internal CheckFileServicesInstallationCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public bool Result + { + get + { + this.RaiseExceptionIfNecessary(); + return ((bool)(this.results[0])); + } + } + } + + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + public delegate void DeleteDirectoryRecursiveCompletedEventHandler(object sender, DeleteDirectoryRecursiveCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class DeleteDirectoryRecursiveCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs + { + + private object[] results; + + internal DeleteDirectoryRecursiveCompletedEventArgs(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.Utils/FileUtils.cs b/WebsitePanel/Sources/WebsitePanel.Server.Utils/FileUtils.cs index f30354a5..cdc199d3 100644 --- a/WebsitePanel/Sources/WebsitePanel.Server.Utils/FileUtils.cs +++ b/WebsitePanel/Sources/WebsitePanel.Server.Utils/FileUtils.cs @@ -37,6 +37,7 @@ using System.Collections.Generic; using System.Reflection; using Ionic.Zip; using WebsitePanel.Providers.OS; +using System.Management; namespace WebsitePanel.Providers.Utils { @@ -844,6 +845,126 @@ namespace WebsitePanel.Providers.Utils conn, null); cat = null; } + + public static void DeleteDirectoryRecursive(string rootPath) + { + // This code is done this way to force folder deletion + // even if the folder was opened + + DirectoryInfo treeRoot = new DirectoryInfo(rootPath); + if (treeRoot.Exists) + { + + DirectoryInfo[] dirs = treeRoot.GetDirectories(); + while (dirs.Length > 0) + { + foreach (DirectoryInfo dir in dirs) + DeleteDirectoryRecursive(dir.FullName); + + dirs = treeRoot.GetDirectories(); + } + + // DELETE THE FILES UNDER THE CURRENT ROOT + string[] files = Directory.GetFiles(treeRoot.FullName); + foreach (string file in files) + { + File.SetAttributes(file, FileAttributes.Normal); + File.Delete(file); + } + + Directory.Delete(treeRoot.FullName, true); + } + + + } + + public static void SetQuotaLimitOnFolder(string folderPath, string shareNameDrive, string quotaLimit, int mode, string wmiUserName, string wmiPassword) + { + + try + { + string[] splits = folderPath.Split('\\'); + if (splits.Length > 0) + { + // bat file pat + string cmdFilePath = @"\\" + splits[2] + @"\" + splits[3] + @"\" + "Process.bat"; + + // Creating the BAT file + FileStream fs = File.Create(cmdFilePath); + if (fs != null) + { + fs.Close(); + fs.Dispose(); + } + + StreamWriter swr = new StreamWriter(cmdFilePath); + + if (swr != null) + { + swr.WriteLine(@"cd c:\windows\system32"); + + string sharePath = String.Empty; + + if (splits.Length > 4) + { + // Form the share physicalPath + sharePath = shareNameDrive + @":\" + splits[3]; + + if (splits.Length == 5 && !quotaLimit.Equals(String.Empty)) + { + + switch (mode) + { + // Set + case 0: + // Delete the quota in case one exists + swr.WriteLine(@"dirquota quota delete /path:" + sharePath + @"\" + splits[4] + @" /remote:" + splits[2] + @" /quiet"); + swr.WriteLine(@"dirquota quota add /path:" + sharePath + @"\" + splits[4] + @" /limit:" + quotaLimit + @" /remote:" + splits[2]); + break; + + // Modify + case 1: swr.WriteLine(@"dirquota quota modify /path:" + sharePath + @"\" + splits[4] + @" /limit:" + quotaLimit + @" /remote:" + splits[2]); + break; + } + } + + + } + swr.Flush(); + swr.Close(); + swr.Dispose(); + } + + ConnectionOptions connOptions = new ConnectionOptions(); + + if (wmiUserName.Length > 0) + { + connOptions.Username = wmiUserName; + connOptions.Password = wmiPassword; + } + + connOptions.Impersonation = ImpersonationLevel.Impersonate; + + connOptions.EnablePrivileges = true; + + ManagementScope manScope = + new ManagementScope(String.Format(@"\\{0}\ROOT\CIMV2", splits[2]), connOptions); + manScope.Connect(); + + ObjectGetOptions objectGetOptions = new ObjectGetOptions(); + ManagementPath managementPath = new ManagementPath("Win32_Process"); + ManagementClass processClass = new ManagementClass(manScope, managementPath, objectGetOptions); + + ManagementBaseObject inParams = processClass.GetMethodParameters("Create"); + inParams["CommandLine"] = cmdFilePath; + ManagementBaseObject outParams = processClass.InvokeMethod("Create", inParams, null); + + } + } + catch + { } + } + #region Advanced Delete /// /// Deletes the specified file. diff --git a/WebsitePanel/Sources/WebsitePanel.Server.Utils/OS.cs b/WebsitePanel/Sources/WebsitePanel.Server.Utils/OS.cs index accc9d27..03f07a5b 100644 --- a/WebsitePanel/Sources/WebsitePanel.Server.Utils/OS.cs +++ b/WebsitePanel/Sources/WebsitePanel.Server.Utils/OS.cs @@ -30,6 +30,8 @@ using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; +using System.Management; + namespace WebsitePanel.Server.Utils { @@ -402,6 +404,22 @@ namespace WebsitePanel.Server.Utils { return Environment.GetEnvironmentVariable("windir"); } + /// + /// Checks Whether the FSRM role services are installed + /// + /// + public static bool CheckFileServicesInstallation() + { + + ManagementClass objMC = new ManagementClass("Win32_ServerFeature"); + ManagementObjectCollection objMOC = objMC.GetInstances(); + foreach (ManagementObject objMO in objMOC) + if (objMO.Properties["Name"].Value.ToString().ToLower().Contains("file server resource manager")) + return true; + + return false; + + } } } diff --git a/WebsitePanel/Sources/WebsitePanel.Server/OperatingSystem.asmx.cs b/WebsitePanel/Sources/WebsitePanel.Server/OperatingSystem.asmx.cs index e258900a..235fb03d 100644 --- a/WebsitePanel/Sources/WebsitePanel.Server/OperatingSystem.asmx.cs +++ b/WebsitePanel/Sources/WebsitePanel.Server/OperatingSystem.asmx.cs @@ -533,6 +533,55 @@ namespace WebsitePanel.Server throw; } } + + + [WebMethod, SoapHeader("settings")] + public void SetQuotaLimitOnFolder(string folderPath, string shareNameDrive, string quotaLimit, int mode, string wmiUserName, string wmiPassword) + { + try + { + Log.WriteStart("'{0}' SetQuotaLimitOnFolder", ProviderSettings.ProviderName); + OsProvider.SetQuotaLimitOnFolder(folderPath, shareNameDrive, quotaLimit, mode, wmiUserName, wmiPassword); + Log.WriteEnd("'{0}' SetQuotaLimitOnFolder", ProviderSettings.ProviderName); + } + catch (Exception ex) + { + Log.WriteError(String.Format("'{0}' SetQuotaLimitOnFolder", ProviderSettings.ProviderName), ex); + throw; + } + } + + [WebMethod, SoapHeader("settings")] + public void DeleteDirectoryRecursive(string rootPath) + { + try + { + Log.WriteStart("'{0}' DeleteDirectoryRecursive", ProviderSettings.ProviderName); + OsProvider.DeleteDirectoryRecursive(rootPath); + Log.WriteEnd("'{0}' DeleteDirectoryRecursive", ProviderSettings.ProviderName); + } + catch (Exception ex) + { + Log.WriteError(String.Format("'{0}' DeleteDirectoryRecursive", ProviderSettings.ProviderName), ex); + throw; + } + } + + [WebMethod, SoapHeader("settings")] + public bool CheckFileServicesInstallation() + { + try + { + Log.WriteStart("'{0}' CheckFileServicesInstallation", ProviderSettings.ProviderName); + return OsProvider.CheckFileServicesInstallation(); + Log.WriteEnd("'{0}' CheckFileServicesInstallation", ProviderSettings.ProviderName); + } + catch (Exception ex) + { + Log.WriteError(String.Format("'{0}' CheckFileServicesInstallation", ProviderSettings.ProviderName), ex); + throw; + } + } #endregion #region Synchronizing diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/ModulesData.config b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/ModulesData.config index efd04273..b2602ecb 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/ModulesData.config +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/ModulesData.config @@ -76,6 +76,9 @@ + + + diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/WebsitePanel_Modules.config b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/WebsitePanel_Modules.config index 73475696..496315ef 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/WebsitePanel_Modules.config +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/WebsitePanel_Modules.config @@ -594,4 +594,12 @@ + + + + + + + + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/WebsitePanel_Pages.config b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/WebsitePanel_Pages.config index 9143f106..e6277aa7 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/WebsitePanel_Pages.config +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/WebsitePanel_Pages.config @@ -566,4 +566,17 @@ + + + + diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_Modules.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_Modules.ascx.resx index 3ecef0a5..fef0f5c7 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_Modules.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_Modules.ascx.resx @@ -762,10 +762,13 @@ System Center Server Addresses - + Add VLan to user Setup WebsitePanel Accounts + + System Hard Quota + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_Pages.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_Pages.ascx.resx index d4b134f6..6b30cf6d 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_Pages.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_Pages.ascx.resx @@ -459,4 +459,7 @@ {user} - {space} - Virtual Private Servers for Private Cloud + + System Hard Quota + \ No newline at end of file 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 fc7a3c5b..7f65ab56 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx @@ -2124,7 +2124,6 @@ Web Site Host Header - Applications Installer @@ -5243,4 +5242,10 @@ Web site has been updated to shared IP + + Apply Enable Hard Quota Feature + + + By clicking on the button 'Apply', you will apply the respective hard quota on each provisioned home folder. Note that this may take some time. + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/WebSitesEditSite.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/WebSitesEditSite.ascx.resx index f82d2d99..78df331e 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/WebSitesEditSite.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/WebSitesEditSite.ascx.resx @@ -486,4 +486,7 @@ To connect to web site management service please use username and password provi IP address: Shared + + Force delete website directory? + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ApplyEnableHardQuotaFeature.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ApplyEnableHardQuotaFeature.ascx new file mode 100644 index 00000000..38488387 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ApplyEnableHardQuotaFeature.ascx @@ -0,0 +1,19 @@ +<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ApplyEnableHardQuotaFeature.ascx.cs" Inherits="WebsitePanel.Portal.ApplyEnableHardQuotaFeature" %> +<%@ Register Src="UserControls/SimpleMessageBox.ascx" TagName="messageBox" TagPrefix="uc4" %> + +
+ + + + + +
+ + +
+ +
+
+ + +
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ApplyEnableHardQuotaFeature.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ApplyEnableHardQuotaFeature.ascx.cs new file mode 100644 index 00000000..c96f2e87 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ApplyEnableHardQuotaFeature.ascx.cs @@ -0,0 +1,74 @@ +// Copyright (c) 2012, Outercurve Foundation. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// - Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// - Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// - Neither the name of the Outercurve Foundation nor the names of its +// contributors may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using WebsitePanel.EnterpriseServer; +using WebsitePanel.EnterpriseServer.Base.Scheduling; +using WebsitePanel.Portal.Code.Framework; + +namespace WebsitePanel.Portal +{ + public partial class ApplyEnableHardQuotaFeature : WebsitePanelModuleBase + { + + public int PackageId + { + get { return PanelSecurity.PackageId; } + } + + protected void Page_Load(object sender, EventArgs e) + { + messageBox.ShowWarningMessage("ApplyEnableHardQuotaFeature"); + } + + private void Update() + { + try + { + ES.Services.Files.ApplyEnableHardQuotaFeature(PackageId); + // redirect + Response.Redirect(NavigatePageURL("SpaceHome", "SpaceID", PackageId.ToString())); + } + catch (Exception ex) + { + messageBox.ShowErrorMessage("APPLY_QUOTA", ex); + } + } + + + protected void btnUpdate_Click(object sender, EventArgs e) + { + Update(); + } + + } +} \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ApplyEnableHardQuotaFeature.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ApplyEnableHardQuotaFeature.ascx.designer.cs new file mode 100644 index 00000000..9234e54a --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ApplyEnableHardQuotaFeature.ascx.designer.cs @@ -0,0 +1,33 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WebsitePanel.Portal { + + + public partial class ApplyEnableHardQuotaFeature { + + /// + /// messageBox control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::WebsitePanel.Portal.UserControls.SimpleMessageBox messageBox; + + /// + /// btnUpdate control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Button btnUpdate; + } +} diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/App_LocalResources/Windows2008_Settings.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/App_LocalResources/Windows2008_Settings.ascx.resx index 8f21e2f8..d2f4439d 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/App_LocalResources/Windows2008_Settings.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/App_LocalResources/Windows2008_Settings.ascx.resx @@ -112,11 +112,17 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Enable Hard Quota: + + + Location Drive: + Hosting Spaces Folder: diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/Windows2008_Settings.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/Windows2008_Settings.ascx index 972b403e..66819836 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/Windows2008_Settings.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/Windows2008_Settings.ascx @@ -1,9 +1,36 @@ <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Windows2008_Settings.ascx.cs" Inherits="WebsitePanel.Portal.ProviderControls.Windows2008_Settings" %> - - - - + + + + + + + + + + + +
- -
+ + +
+ + + + + +
+ + + + + + + +
+
+
+
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/Windows2008_Settings.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/Windows2008_Settings.ascx.cs index 5d8ec8f1..822b3f93 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/Windows2008_Settings.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/Windows2008_Settings.ascx.cs @@ -44,16 +44,40 @@ namespace WebsitePanel.Portal.ProviderControls { protected void Page_Load(object sender, EventArgs e) { + //CO Changes + if (!IsPostBack) + { + try + { + chkEnableHardQuota.Enabled = ES.Services.OperatingSystems.CheckFileServicesInstallation(PanelRequest.ServiceId); + txtLocationDrive.Enabled = chkEnableHardQuota.Enabled; + valLocationDrive.Enabled = chkEnableHardQuota.Enabled; + if (!chkEnableHardQuota.Enabled) + lblFileServiceInfo.Visible = true; + } + catch + { + } + } + //END } public void BindSettings(StringDictionary settings) { txtFolder.Text = settings["UsersHome"]; + //CO Changes + txtLocationDrive.Text = settings["LocationDrive"]; + chkEnableHardQuota.Checked = settings["EnableHardQuota"] == "true" ? true : false; + //END } public void SaveSettings(StringDictionary settings) { settings["UsersHome"] = txtFolder.Text; + //CO Changes + settings["LocationDrive"] = txtLocationDrive.Text; + settings["EnableHardQuota"] = chkEnableHardQuota.Checked.ToString().ToLower(); + //END } } } \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/Windows2008_Settings.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/Windows2008_Settings.ascx.designer.cs index 4250465f..631ad2c7 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/Windows2008_Settings.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/Windows2008_Settings.ascx.designer.cs @@ -1,22 +1,15 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:2.0.50727.312 // // Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. +// the code is regenerated. // //------------------------------------------------------------------------------ namespace WebsitePanel.Portal.ProviderControls { - /// - /// Windows2008_Settings class. - /// - /// - /// Auto-generated class. - /// public partial class Windows2008_Settings { /// @@ -36,5 +29,50 @@ namespace WebsitePanel.Portal.ProviderControls { /// To modify move field declaration from designer file to code-behind file. /// protected global::System.Web.UI.WebControls.TextBox txtFolder; + + /// + /// lblLocationDrive control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblLocationDrive; + + /// + /// txtLocationDrive control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.TextBox txtLocationDrive; + + /// + /// valLocationDrive control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.RequiredFieldValidator valLocationDrive; + + /// + /// chkEnableHardQuota control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.CheckBox chkEnableHardQuota; + + /// + /// lblFileServiceInfo control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblFileServiceInfo; } } diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Resources/Windows2008_Settings.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Resources/Windows2008_Settings.ascx.resx new file mode 100644 index 00000000..d2f4439d --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Resources/Windows2008_Settings.ascx.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Enable Hard Quota: + + + Location Drive: + + + Hosting Spaces Folder: + + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx index 3af4a279..0ae495ee 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx @@ -1,119 +1,119 @@ <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebSitesEditSite.ascx.cs" - Inherits="WebsitePanel.Portal.WebSitesEditSite" %> + Inherits="WebsitePanel.Portal.WebSitesEditSite" %> <%@ Import Namespace="WebsitePanel.Portal" %> -<%@ Register Src="WebSitesExtensionsControl.ascx" TagName="WebSitesExtensionsControl" TagPrefix="uc6" %> -<%@ Register Src="WebSitesCustomErrorsControl.ascx" TagName="WebSitesCustomErrorsControl" TagPrefix="uc4" %> -<%@ Register Src="WebSitesMimeTypesControl.ascx" TagName="WebSitesMimeTypesControl" TagPrefix="uc5" %> -<%@ Register Src="WebSitesHomeFolderControl.ascx" TagName="WebSitesHomeFolderControl" TagPrefix="uc1" %> -<%@ Register Src="WebSitesCustomHeadersControl.ascx" TagName="WebSitesCustomHeadersControl" TagPrefix="uc6" %> -<%@ Register Src="WebSitesSecuredFoldersControl.ascx" TagName="WebSitesSecuredFoldersControl" TagPrefix="wsp" %> -<%@ Register Src="WebSitesHeliconApeControl.ascx" TagName="WebSitesHeliconApeControl" TagPrefix="wsp" %> +<%@ Register Src="WebSitesExtensionsControl.ascx" TagName="WebSitesExtensionsControl" TagPrefix="uc6" %> +<%@ Register Src="WebSitesCustomErrorsControl.ascx" TagName="WebSitesCustomErrorsControl" TagPrefix="uc4" %> +<%@ Register Src="WebSitesMimeTypesControl.ascx" TagName="WebSitesMimeTypesControl" TagPrefix="uc5" %> +<%@ Register Src="WebSitesHomeFolderControl.ascx" TagName="WebSitesHomeFolderControl" TagPrefix="uc1" %> +<%@ Register Src="WebSitesCustomHeadersControl.ascx" TagName="WebSitesCustomHeadersControl" TagPrefix="uc6" %> +<%@ Register Src="WebSitesSecuredFoldersControl.ascx" TagName="WebSitesSecuredFoldersControl" TagPrefix="wsp" %> +<%@ Register Src="WebSitesHeliconApeControl.ascx" TagName="WebSitesHeliconApeControl" TagPrefix="wsp" %> <%@ Register Src="UserControls/PasswordControl.ascx" TagName="PasswordControl" TagPrefix="wsp" %> <%@ Register Src="UserControls/UsernameControl.ascx" TagName="UsernameControl" TagPrefix="wsp" %> -<%@ Register Src="UserControls/EnableAsyncTasksSupport.ascx" TagName="EnableAsyncTasksSupport" TagPrefix="wsp" %> -<%@ Register Src="UserControls/SimpleMessageBox.ascx" TagName="SimpleMessageBox" TagPrefix="wsp" %> +<%@ Register Src="UserControls/EnableAsyncTasksSupport.ascx" TagName="EnableAsyncTasksSupport" TagPrefix="wsp" %> +<%@ Register Src="UserControls/SimpleMessageBox.ascx" TagName="SimpleMessageBox" TagPrefix="wsp" %> <%@ Register Src="UserControls/PopupHeader.ascx" TagName="PopupHeader" TagPrefix="wsp" %> <%@ Register TagPrefix="wsp" Namespace="WebsitePanel.Portal" %> <%@ Register Src="WebsitesSSL.ascx" TagName="WebsitesSSL" TagPrefix="uc2" %> + TargetControlID="WDeployRebuildPubProfileLinkButton" PopupControlID="WDeployBuildPublishingProfileWizardPanel" + BackgroundCssClass="modalBackground" DropShadow="false" CancelControlID="PubProfileWizardCancelButton" />
- - - - - -
- - - + +
- domain.com -
+ + - - - - + + + + + +
+ + + - - - - -
+ domain.com + @@ -128,376 +128,386 @@ - +    
-
- -
- - - - - - <%# Eval("DomainName") %> - - - - - - -
-
- - - - - - - -
- -
- - - - -
-
- - - + + + +
-    +
+
+ +
+ + + + + + <%# Eval("DomainName") %> + + + + + +
+
+ + + + + + + +
+ +
+ + + + +
+
+ + + - -
   - - - + RepeatLayout="Flow" DataKeyField="ViewId"> + + + <%# Eval("Name") %> - - - - - + + + + + <%# Eval("Name") %> - - - -
-
- - - - - -
-
- -
- - - - - - + + + +
+
+ + + + + +
+
+ +
+ + + + + + <%# Eval("Name") %> - - - - - - - - -
-
- - - - - - - - - - - - -
- -
- - - - - - - - - - - - - - - - - - -
- - - -
- - - -
- - - -
- - - - -
-
-
- - - - - - - - - - -
- -
-
-
-
-
-
-
- -
-
-
-
-
-
-

-  / 

-
-
- - - - - - - - - - - - - - -
- - - - - -
- - - - -
- - - - - -
-
-
-   + + + + + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+
+
+ + + + + + + + + + +
+ +
+ +
+
+
+ +
+
+
+ +
+ +
+
+
+ +
+
+

+  /  +

+
+
+ + + + + + + + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + +
+
+
+     + CssClass="Button1" OnClick="WDeployChangePublishingPasswButton_Click" ValidationGroup="WDeployPublishingGroup" />  -
-
- Web Deploy + CssClass="Button1" OnClick="WDeployDisablePublishingButton_Click" OnClientClick="return confirmationWebDeployPublishing();" + ValidationGroup="WDeployPublishingGroup" CausesValidation="false" /> +
+
+ Web Deploy Remote Agent is not installed... -
-
- - - - - -

-

- - - - - - - - - -
- - - -
- - - -
-
- -
- -
-
-
-
-
-
-
- -
-
-
-
-
-
-
- - - - - - - - - - - - - - -
- - - - - -
- - - - -
- - - - - -
-
-
- -   +
+ + + + + + +

+

+ + + + + + + + + +
+ + + +
+ + + +
+
+ +
+ +
+ +
+
+
+ +
+
+
+ +
+ +
+
+
+ +
+
+
+ + + + + + + + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + +
+
+
+ +   -
-
- -
-
-
-
-
- - - - -
-
+ CssClass="Button1" OnClick="btnWmSvcSiteDisable_Click" OnClientClick="return confirmationWMSVC();" + ValidationGroup="WmSvcGroup" CausesValidation="false" /> +
+ + +
+ +
+
+ + + + + + + + + +
- - - -
\ No newline at end of file + + + +
+ + +
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx.cs index d3ac61b0..162d35ce 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx.cs @@ -913,7 +913,7 @@ namespace WebsitePanel.Portal { try { - int result = ES.Services.WebServers.DeleteWebSite(PanelRequest.ItemID); + int result = ES.Services.WebServers.DeleteWebSite(PanelRequest.ItemID, chkDeleteWebsiteDirectory.Checked); if (result < 0) { ShowResultMessage(result); diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx.designer.cs index 299d66d1..609a2047 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesEditSite.ascx.designer.cs @@ -1073,5 +1073,14 @@ namespace WebsitePanel.Portal { /// To modify move field declaration from designer file to code-behind file. /// protected global::System.Web.UI.WebControls.Button btnDelete; + + /// + /// chkDeleteWebsiteDirectory control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.CheckBox chkDeleteWebsiteDirectory; } } diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitePanel.Portal.Modules.csproj b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitePanel.Portal.Modules.csproj index bea7dc26..881b1ce1 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitePanel.Portal.Modules.csproj +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitePanel.Portal.Modules.csproj @@ -93,6 +93,13 @@ Code\VersionInfo.cs + + ApplyEnableHardQuotaFeature.ascx + ASPXCodeBehind + + + ApplyEnableHardQuotaFeature.ascx + AuditLog.ascx ASPXCodeBehind @@ -3811,6 +3818,7 @@ + @@ -4975,6 +4983,7 @@ Designer + Designer diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/WebsitePanel.WebPortal.csproj b/WebsitePanel/Sources/WebsitePanel.WebPortal/WebsitePanel.WebPortal.csproj index b28564d3..269cdc7f 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/WebsitePanel.WebPortal.csproj +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/WebsitePanel.WebPortal.csproj @@ -717,8 +717,8 @@ False - False - 9001 + True + 58306 / http://localhost/WebPortal False