diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/EnterpriseStorageProxy.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/EnterpriseStorageProxy.cs index d4a8196b..214dda5a 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/EnterpriseStorageProxy.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/EnterpriseStorageProxy.cs @@ -85,6 +85,12 @@ namespace WebsitePanel.EnterpriseServer private System.Threading.SendOrPostCallback RenameEnterpriseFolderOperationCompleted; + private System.Threading.SendOrPostCallback CreateEnterpriseStorageOperationCompleted; + + private System.Threading.SendOrPostCallback CheckEnterpriseStorageInitializationOperationCompleted; + + private System.Threading.SendOrPostCallback CheckUsersDomainExistsOperationCompleted; + /// public esEnterpriseStorage() { @@ -121,6 +127,15 @@ namespace WebsitePanel.EnterpriseServer /// public event RenameEnterpriseFolderCompletedEventHandler RenameEnterpriseFolderCompleted; + /// + public event CreateEnterpriseStorageCompletedEventHandler CreateEnterpriseStorageCompleted; + + /// + public event CheckEnterpriseStorageInitializationCompletedEventHandler CheckEnterpriseStorageInitializationCompleted; + + /// + public event CheckUsersDomainExistsCompletedEventHandler CheckUsersDomainExistsCompleted; + /// [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) @@ -656,6 +671,160 @@ namespace WebsitePanel.EnterpriseServer } } + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/CreateEnterpriseStorage", RequestNamespace = "http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace = "http://smbsaas/websitepanel/enterpriseserver", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public ResultObject CreateEnterpriseStorage(int packageId, int itemId) + { + object[] results = this.Invoke("CreateEnterpriseStorage", new object[] { + packageId, + itemId}); + return ((ResultObject)(results[0])); + } + + /// + public System.IAsyncResult BeginCreateEnterpriseStorage(int packageId, int itemId, System.AsyncCallback callback, object asyncState) + { + return this.BeginInvoke("CreateEnterpriseStorage", new object[] { + packageId, + itemId}, callback, asyncState); + } + + /// + public ResultObject EndCreateEnterpriseStorage(System.IAsyncResult asyncResult) + { + object[] results = this.EndInvoke(asyncResult); + return ((ResultObject)(results[0])); + } + + /// + public void CreateEnterpriseStorageAsync(int packageId, int itemId) + { + this.CreateEnterpriseStorageAsync(packageId, itemId, null); + } + + /// + public void CreateEnterpriseStorageAsync(int packageId, int itemId, object userState) + { + if ((this.CreateEnterpriseStorageOperationCompleted == null)) + { + this.CreateEnterpriseStorageOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateEnterpriseStorageOperationCompleted); + } + this.InvokeAsync("CreateEnterpriseStorage", new object[] { + packageId, + itemId}, this.CreateEnterpriseStorageOperationCompleted, userState); + } + + private void OnCreateEnterpriseStorageOperationCompleted(object arg) + { + if ((this.CreateEnterpriseStorageCompleted != null)) + { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CreateEnterpriseStorageCompleted(this, new CreateEnterpriseStorageCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/CheckEnterpriseStorageInitialization" + + "", 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 CheckEnterpriseStorageInitialization(int packageId, int itemId) + { + object[] results = this.Invoke("CheckEnterpriseStorageInitialization", new object[] { + packageId, + itemId}); + return ((bool)(results[0])); + } + + /// + public System.IAsyncResult BeginCheckEnterpriseStorageInitialization(int packageId, int itemId, System.AsyncCallback callback, object asyncState) + { + return this.BeginInvoke("CheckEnterpriseStorageInitialization", new object[] { + packageId, + itemId}, callback, asyncState); + } + + /// + public bool EndCheckEnterpriseStorageInitialization(System.IAsyncResult asyncResult) + { + object[] results = this.EndInvoke(asyncResult); + return ((bool)(results[0])); + } + + /// + public void CheckEnterpriseStorageInitializationAsync(int packageId, int itemId) + { + this.CheckEnterpriseStorageInitializationAsync(packageId, itemId, null); + } + + /// + public void CheckEnterpriseStorageInitializationAsync(int packageId, int itemId, object userState) + { + if ((this.CheckEnterpriseStorageInitializationOperationCompleted == null)) + { + this.CheckEnterpriseStorageInitializationOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCheckEnterpriseStorageInitializationOperationCompleted); + } + this.InvokeAsync("CheckEnterpriseStorageInitialization", new object[] { + packageId, + itemId}, this.CheckEnterpriseStorageInitializationOperationCompleted, userState); + } + + private void OnCheckEnterpriseStorageInitializationOperationCompleted(object arg) + { + if ((this.CheckEnterpriseStorageInitializationCompleted != null)) + { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CheckEnterpriseStorageInitializationCompleted(this, new CheckEnterpriseStorageInitializationCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/CheckUsersDomainExists", 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 CheckUsersDomainExists(int itemId) + { + object[] results = this.Invoke("CheckUsersDomainExists", new object[] { + itemId}); + return ((bool)(results[0])); + } + + /// + public System.IAsyncResult BeginCheckUsersDomainExists(int itemId, System.AsyncCallback callback, object asyncState) + { + return this.BeginInvoke("CheckUsersDomainExists", new object[] { + itemId}, callback, asyncState); + } + + /// + public bool EndCheckUsersDomainExists(System.IAsyncResult asyncResult) + { + object[] results = this.EndInvoke(asyncResult); + return ((bool)(results[0])); + } + + /// + public void CheckUsersDomainExistsAsync(int itemId) + { + this.CheckUsersDomainExistsAsync(itemId, null); + } + + /// + public void CheckUsersDomainExistsAsync(int itemId, object userState) + { + if ((this.CheckUsersDomainExistsOperationCompleted == null)) + { + this.CheckUsersDomainExistsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCheckUsersDomainExistsOperationCompleted); + } + this.InvokeAsync("CheckUsersDomainExists", new object[] { + itemId}, this.CheckUsersDomainExistsOperationCompleted, userState); + } + + private void OnCheckUsersDomainExistsOperationCompleted(object arg) + { + if ((this.CheckUsersDomainExistsCompleted != null)) + { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CheckUsersDomainExistsCompleted(this, new CheckUsersDomainExistsCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + /// public new void CancelAsync(object userState) { @@ -962,4 +1131,94 @@ namespace WebsitePanel.EnterpriseServer } } } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + public delegate void CreateEnterpriseStorageCompletedEventHandler(object sender, CreateEnterpriseStorageCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CreateEnterpriseStorageCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs + { + + private object[] results; + + internal CreateEnterpriseStorageCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public ResultObject Result + { + get + { + this.RaiseExceptionIfNecessary(); + return ((ResultObject)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + public delegate void CheckEnterpriseStorageInitializationCompletedEventHandler(object sender, CheckEnterpriseStorageInitializationCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CheckEnterpriseStorageInitializationCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs + { + + private object[] results; + + internal CheckEnterpriseStorageInitializationCompletedEventArgs(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 CheckUsersDomainExistsCompletedEventHandler(object sender, CheckUsersDomainExistsCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CheckUsersDomainExistsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs + { + + private object[] results; + + internal CheckUsersDomainExistsCompletedEventArgs(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.EnterpriseServer.Code/EnterpriseStorage/EnterpriseStorageController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/EnterpriseStorage/EnterpriseStorageController.cs index 388e841b..097c6223 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/EnterpriseStorage/EnterpriseStorageController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/EnterpriseStorage/EnterpriseStorageController.cs @@ -53,9 +53,24 @@ namespace WebsitePanel.EnterpriseServer { #region Public Methods + public static bool CheckEnterpriseStorageInitialization(int packageId, int itemId) + { + return CheckEnterpriseStorageInitializationInternal(packageId, itemId); + } + + public static ResultObject CreateEnterpriseStorage(int packageId, int itemId) + { + return CreateEnterpriseStorageInternal(packageId, itemId); + } + + public static ResultObject DeleteEnterpriseStorage(int packageId, int itemId) + { + return DeleteEnterpriseStorageInternal(packageId,itemId); + } + public static SystemFile[] GetFolders(int itemId) { - return GetFoldersInternal(itemId); + return GetFoldersInternal(itemId); } public static SystemFile GetFolder(int itemId, string folderName) @@ -63,6 +78,11 @@ namespace WebsitePanel.EnterpriseServer return GetFolderInternal(itemId, folderName); } + public static SystemFile GetFolder(int itemId) + { + return GetFolder(itemId, string.Empty); + } + public static ResultObject CreateFolder(int itemId) { return CreateFolder(itemId, string.Empty); @@ -114,8 +134,169 @@ namespace WebsitePanel.EnterpriseServer return RenameFolderInternal(itemId, oldFolder, newFolder); } + public static bool CheckUsersDomainExists(int itemId) + { + return CheckUsersDomainExistsInternal(itemId); + } + #endregion + protected static bool CheckUsersDomainExistsInternal(int itemId) + { + Organization org = OrganizationController.GetOrganization(itemId); + + return CheckUsersDomainExistsInternal(itemId, org.PackageId); + } + + protected static bool CheckUsersDomainExistsInternal(int itemId, int packageId) + { + int webServiceId = PackageController.GetPackageServiceId(packageId, ResourceGroups.Web); + var esServiceId = GetEnterpriseStorageServiceID(packageId); + + StringDictionary esSesstings = ServerController.GetServiceSettings(esServiceId); + + string usersDomain = esSesstings["UsersDomain"]; + + WebServer web = new WebServer(); + ServiceProviderProxy.Init(web, webServiceId); + + if (web.SiteExists(usersDomain)) + return true; + + return false; + } + + protected static bool CheckEnterpriseStorageInitializationInternal(int packageId, int itemId) + { + bool checkResult = true; + + var esServiceId = GetEnterpriseStorageServiceID(packageId); + int webServiceId = PackageController.GetPackageServiceId(packageId, ResourceGroups.Web); + + Organization org = OrganizationController.GetOrganization(itemId); + + if (org == null) + { + return false; + } + + //root folder not created + if (GetFolder(itemId) == null) + { + checkResult = false; + } + + //checking if virtual directory is created + StringDictionary esSesstings = ServerController.GetServiceSettings(esServiceId); + + string usersDomain = esSesstings["UsersDomain"]; + + WebServer web = new WebServer(); + ServiceProviderProxy.Init(web, webServiceId); + + if (!web.VirtualDirectoryExists(usersDomain, org.OrganizationId)) + { + checkResult = false; + } + + + return checkResult; + } + + protected static ResultObject CreateEnterpriseStorageInternal(int packageId, int itemId) + { + ResultObject result = TaskManager.StartResultTask("ORGANIZATION", "CREATE_ORGANIZATION_ENTERPRISE_STORAGE", itemId, packageId); + + try + { + int esServiceId = PackageController.GetPackageServiceId(packageId, ResourceGroups.EnterpriseStorage); + + if (esServiceId != 0) + { + StringDictionary esSesstings = ServerController.GetServiceSettings(esServiceId); + + Organization org = OrganizationController.GetOrganization(itemId); + + string usersHome = esSesstings["UsersHome"]; + string usersDomain = esSesstings["UsersDomain"]; + string locationDrive = esSesstings["LocationDrive"]; + + string homePath = string.Format("{0}:\\{1}", locationDrive, usersHome); + + EnterpriseStorageController.CreateFolder(itemId); + + WebServerController.AddWebDavDirectory(packageId, usersDomain, org.OrganizationId, homePath); + + int osId = PackageController.GetPackageServiceId(packageId, ResourceGroups.Os); + bool enableHardQuota = (esSesstings["enablehardquota"] != null) + ? bool.Parse(esSesstings["enablehardquota"]) + : false; + + if (enableHardQuota && osId != 0 && OperatingSystemController.CheckFileServicesInstallation(osId)) + { + FilesController.SetFolderQuota(packageId, Path.Combine(usersHome, org.OrganizationId), + locationDrive, Quotas.ENTERPRISESTORAGE_DISKSTORAGESPACE); + } + } + } + catch (Exception ex) + { + result.AddError("ENTERPRISE_STORAGE_CREATE_FOLDER", ex); + } + finally + { + if (!result.IsSuccess) + { + TaskManager.CompleteResultTask(result); + } + else + { + TaskManager.CompleteResultTask(); + } + } + + return result; + } + + protected static ResultObject DeleteEnterpriseStorageInternal(int packageId, int itemId) + { + ResultObject result = TaskManager.StartResultTask("ORGANIZATION", "CLEANUP_ORGANIZATION_ENTERPRISE_STORAGE", itemId, packageId); + + try + { + int esId = PackageController.GetPackageServiceId(packageId, ResourceGroups.EnterpriseStorage); + + Organization org = OrganizationController.GetOrganization(itemId); + + if (esId != 0) + { + StringDictionary esSesstings = ServerController.GetServiceSettings(esId); + + string usersDomain = esSesstings["UsersDomain"]; + + WebServerController.DeleteWebDavDirectory(packageId, usersDomain, org.OrganizationId); + EnterpriseStorageController.DeleteFolder(itemId); + + } + } + catch (Exception ex) + { + result.AddError("ENTERPRISE_STORAGE_CLEANUP", ex); + } + finally + { + if (!result.IsSuccess) + { + TaskManager.CompleteResultTask(result); + } + else + { + TaskManager.CompleteResultTask(); + } + } + + return result; + } private static EnterpriseStorage GetEnterpriseStorage(int serviceId) { @@ -166,7 +347,6 @@ namespace WebsitePanel.EnterpriseServer } } - protected static SystemFile RenameFolderInternal(int itemId, string oldFolder, string newFolder) { try @@ -311,21 +491,24 @@ namespace WebsitePanel.EnterpriseServer return null; } - EnterpriseStorage es = GetEnterpriseStorage(GetEnterpriseStorageServiceID(org.PackageId)); - List folders = es.GetFolders(org.OrganizationId).Where(x => x.Name.Contains(filterValue)).ToList(); - - switch (sortColumn) + if (CheckUsersDomainExistsInternal(itemId, org.PackageId)) { - case "Size": - folders = folders.OrderBy(x => x.Size).ToList(); - break; - default: - folders = folders.OrderBy(x => x.Name).ToList(); - break; - } + EnterpriseStorage es = GetEnterpriseStorage(GetEnterpriseStorageServiceID(org.PackageId)); + List folders = es.GetFolders(org.OrganizationId).Where(x => x.Name.Contains(filterValue)).ToList(); - result.RecordsCount = folders.Count; - result.PageItems = folders.Skip(startRow).Take(maximumRows).ToArray(); + switch (sortColumn) + { + case "Size": + folders = folders.OrderBy(x => x.Size).ToList(); + break; + default: + folders = folders.OrderBy(x => x.Name).ToList(); + break; + } + + result.RecordsCount = folders.Count; + result.PageItems = folders.Skip(startRow).Take(maximumRows).ToArray(); + } } catch { /*skip exception*/} diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OrganizationController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OrganizationController.cs index a2dc1d4a..0099c991 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OrganizationController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OrganizationController.cs @@ -418,36 +418,6 @@ namespace WebsitePanel.EnterpriseServer }; PackageController.AddPackageItem(orgDomain); - - //Create Enterprise storage - - int esServiceId = PackageController.GetPackageServiceId(packageId, ResourceGroups.EnterpriseStorage); - - if (esServiceId != 0) - { - StringDictionary esSesstings = ServerController.GetServiceSettings(esServiceId); - - string usersHome = esSesstings["UsersHome"]; - string usersDomain = esSesstings["UsersDomain"]; - string locationDrive = esSesstings["LocationDrive"]; - - string homePath = string.Format("{0}:\\{1}",locationDrive, usersHome); - - EnterpriseStorageController.CreateFolder(itemId); - - WebServerController.AddWebDavDirectory(packageId, usersDomain, organizationId, homePath); - - int osId = PackageController.GetPackageServiceId(packageId, ResourceGroups.Os); - bool enableHardQuota = (esSesstings["enablehardquota"] != null) - ? bool.Parse(esSesstings["enablehardquota"]) - : false; - - if (enableHardQuota && osId != 0 && OperatingSystemController.CheckFileServicesInstallation(osId)) - { - FilesController.SetFolderQuota(packageId, Path.Combine(usersHome, organizationId), - locationDrive, Quotas.ENTERPRISESTORAGE_DISKSTORAGESPACE); - } - } } catch (Exception ex) { @@ -746,24 +716,10 @@ namespace WebsitePanel.EnterpriseServer } //Cleanup Enterprise storage - int esId = PackageController.GetPackageServiceId(org.PackageId, ResourceGroups.EnterpriseStorage); - if (esId != 0) + if (EnterpriseStorageController.DeleteEnterpriseStorage(org.PackageId, itemId).IsSuccess == false) { - StringDictionary esSesstings = ServerController.GetServiceSettings(esId); - - string usersDomain = esSesstings["UsersDomain"]; - - try - { - WebServerController.DeleteWebDavDirectory(org.PackageId, usersDomain, org.OrganizationId); - EnterpriseStorageController.DeleteFolder(itemId); - } - catch (Exception ex) - { - successful = false; - TaskManager.WriteError(ex); - } + successful = false; } //Cleanup Exchange diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/WebServers/WebServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/WebServers/WebServerController.cs index cae1da64..75f415ff 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/WebServers/WebServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/WebServers/WebServerController.cs @@ -4632,8 +4632,6 @@ Please ensure the space has been allocated {0} IP address as a dedicated one and return false; } - siteId = RemoveProtocolFromUrl(siteId); - var webServer = GetWebServer(GetWebServerServiceID(org.PackageId)); return webServer.GetDirectoryBrowseEnabled(siteId); @@ -4648,23 +4646,11 @@ Please ensure the space has been allocated {0} IP address as a dedicated one and return; } - siteId = RemoveProtocolFromUrl(siteId); - var webServer = GetWebServer(GetWebServerServiceID(org.PackageId)); webServer.SetDirectoryBrowseEnabled(siteId, enabled); } - private static string RemoveProtocolFromUrl(string input) - { - if (input.Contains("//")) - { - return System.Text.RegularExpressions.Regex.Split(input, "//")[1]; - } - - return input; - } - #endregion private static int GetWebServerServiceID(int packageId) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esEnterpriseStorage.asmx.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esEnterpriseStorage.asmx.cs index 638886e6..a97a8cd7 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esEnterpriseStorage.asmx.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esEnterpriseStorage.asmx.cs @@ -116,5 +116,23 @@ namespace WebsitePanel.EnterpriseServer { return EnterpriseStorageController.RenameFolder(itemId, oldName, newName); } + + [WebMethod] + public ResultObject CreateEnterpriseStorage(int packageId, int itemId) + { + return EnterpriseStorageController.CreateEnterpriseStorage(packageId, itemId); + } + + [WebMethod] + public bool CheckEnterpriseStorageInitialization(int packageId, int itemId) + { + return EnterpriseStorageController.CheckEnterpriseStorageInitialization(packageId, itemId); + } + + [WebMethod] + public bool CheckUsersDomainExists(int itemId) + { + return EnterpriseStorageController.CheckUsersDomainExists(itemId); + } } } diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.EnterpriseStorage.Windows2012/Windows2012.cs b/WebsitePanel/Sources/WebsitePanel.Providers.EnterpriseStorage.Windows2012/Windows2012.cs index 948d93fa..c407d08f 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.EnterpriseStorage.Windows2012/Windows2012.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.EnterpriseStorage.Windows2012/Windows2012.cs @@ -100,7 +100,7 @@ namespace WebsitePanel.Providers.EnterpriseStorage public SystemFile GetFolder(string organizationId, string folderName) { string fullName = string.Format("{0}:\\{1}\\{2}\\{3}", LocationDrive, UsersHome, organizationId, folderName); - SystemFile folder = new SystemFile(); + SystemFile folder = null; if (Directory.Exists(fullName)) { diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/IIs70.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/IIs70.cs index 0a203841..a46b5731 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/IIs70.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/IIs70.cs @@ -3775,17 +3775,33 @@ namespace WebsitePanel.Providers.Web public override bool GetDirectoryBrowseEnabled(string siteId) { - using (ServerManager srvman = webObjectsSvc.GetServerManager()) - { - var enabled = dirBrowseSvc.GetDirectoryBrowseSettings(srvman, siteId)[DirectoryBrowseGlobals.Enabled]; + var uri = new Uri(siteId); + var host = uri.Host; + var site = uri.Host + uri.PathAndQuery; - return enabled != null ? (bool)enabled : false; + if (SiteExists(host)) + { + using (ServerManager srvman = webObjectsSvc.GetServerManager()) + { + var enabled = dirBrowseSvc.GetDirectoryBrowseSettings(srvman, site)[DirectoryBrowseGlobals.Enabled]; + + return enabled != null ? (bool)enabled : false; + } } + + return false; } public override void SetDirectoryBrowseEnabled(string siteId, bool enabled) { - dirBrowseSvc.SetDirectoryBrowseEnabled(siteId, enabled); + var uri = new Uri(siteId); + var host = uri.Host; + var site = uri.Host + uri.PathAndQuery; + + if (SiteExists(host)) + { + dirBrowseSvc.SetDirectoryBrowseEnabled(site, enabled); + } } diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.WebDav/WebDav.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Web.WebDav/WebDav.cs index 36610f03..1ec41b3d 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Web.WebDav/WebDav.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.WebDav/WebDav.cs @@ -100,26 +100,27 @@ namespace WebsitePanel.Providers.Web public WebDavFolderRule[] GetFolderWebDavRules(string organizationId, string folder) { - using (ServerManager serverManager = new ServerManager()) + var rules = new List(); + try { - Configuration config = serverManager.GetApplicationHostConfiguration(); - - ConfigurationSection authoringRulesSection = config.GetSection("system.webServer/webdav/authoringRules", string.Format("{0}/{1}/{2}", _usersDomain, organizationId, folder)); - - ConfigurationElementCollection authoringRulesCollection = authoringRulesSection.GetCollection(); - - var rules = new List(); - try + using (ServerManager serverManager = new ServerManager()) { + Configuration config = serverManager.GetApplicationHostConfiguration(); + + ConfigurationSection authoringRulesSection = config.GetSection("system.webServer/webdav/authoringRules", string.Format("{0}/{1}/{2}", _usersDomain, organizationId, folder)); + + ConfigurationElementCollection authoringRulesCollection = authoringRulesSection.GetCollection(); + + foreach (var rule in authoringRulesCollection) { rules.Add(rule.ToWebDavFolderRule()); } } - catch { } - - return rules.ToArray(); } + catch { } + + return rules.ToArray(); } 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 d6bb4628..00edd2fb 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx @@ -5358,5 +5358,7 @@ Remote Desktop Services + + Website is not created \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/EnterpriseStorageCreateFolder.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/EnterpriseStorageCreateFolder.ascx.cs index bfe407d3..ecf80a9b 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/EnterpriseStorageCreateFolder.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/EnterpriseStorageCreateFolder.ascx.cs @@ -35,6 +35,18 @@ namespace WebsitePanel.Portal.ExchangeServer { public partial class EnterpriseStorageCreateFolder : WebsitePanelModuleBase { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + if (!ES.Services.EnterpriseStorage.CheckUsersDomainExists(PanelRequest.ItemID)) + { + Response.Redirect(EditUrl("SpaceID", PanelSecurity.PackageId.ToString(), "enterprisestorage_folders", + "ItemID=" + PanelRequest.ItemID)); + } + } + } + protected void btnCreate_Click(object sender, EventArgs e) { @@ -42,6 +54,21 @@ namespace WebsitePanel.Portal.ExchangeServer return; try { + foreach (var invalidChar in System.IO.Path.GetInvalidFileNameChars()) + { + if (txtFolderName.Text.Contains(invalidChar.ToString())) + { + messageBox.ShowErrorMessage("FILES_CREATE_FILE"); + + return; + } + } + + if (!ES.Services.EnterpriseStorage.CheckEnterpriseStorageInitialization(PanelSecurity.PackageId, PanelRequest.ItemID)) + { + ES.Services.EnterpriseStorage.CreateEnterpriseStorage(PanelSecurity.PackageId, PanelRequest.ItemID); + } + ResultObject result = ES.Services.EnterpriseStorage.CreateEnterpriseFolder(PanelRequest.ItemID, txtFolderName.Text); if (!result.IsSuccess && result.ErrorCodes.Count > 0) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/EnterpriseStorageFolderGeneralSettings.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/EnterpriseStorageFolderGeneralSettings.ascx.cs index 74b6bdfc..a56fba80 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/EnterpriseStorageFolderGeneralSettings.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/EnterpriseStorageFolderGeneralSettings.ascx.cs @@ -49,6 +49,12 @@ namespace WebsitePanel.Portal.ExchangeServer { if (!IsPostBack) { + if (!ES.Services.EnterpriseStorage.CheckUsersDomainExists(PanelRequest.ItemID)) + { + Response.Redirect(EditUrl("SpaceID", PanelSecurity.PackageId.ToString(), "enterprisestorage_folders", + "ItemID=" + PanelRequest.ItemID)); + } + BindSettings(); } } @@ -92,25 +98,44 @@ namespace WebsitePanel.Portal.ExchangeServer { bool redirectNeeded = false; + string fileName = PanelRequest.FolderID; + string fileUrl = lblFolderUrl.Text; + litFolderName.Text = txtFolderName.Text; - // SystemFile folder = ES.Services.EnterpriseStorage.GetEnterpriseFolder(PanelRequest.ItemID, PanelRequest.FolderID); - SystemFile folder = new SystemFile(); + SystemFile folder = null; + if (!ES.Services.EnterpriseStorage.CheckEnterpriseStorageInitialization(PanelSecurity.PackageId, PanelRequest.ItemID)) + { + ES.Services.EnterpriseStorage.CreateEnterpriseStorage(PanelSecurity.PackageId, PanelRequest.ItemID); + } + + //File is renaming if (PanelRequest.FolderID != txtFolderName.Text) { - if (txtFolderName.Text.Contains("\\")) + //check if filename is correct + foreach (var invalidChar in System.IO.Path.GetInvalidFileNameChars()) { - throw new Exception("Wrong file name"); + if (txtFolderName.Text.Contains(invalidChar.ToString())) + { + messageBox.ShowErrorMessage("FILES_RENAME_FILE"); + + return; + } } folder = ES.Services.EnterpriseStorage.RenameEnterpriseFolder(PanelRequest.ItemID, PanelRequest.FolderID, txtFolderName.Text); + + // file is renamed - new name and url + fileName = folder.Name; + fileUrl = folder.Url; + redirectNeeded = true; } - ES.Services.EnterpriseStorage.SetEnterpriseFolderPermissions(PanelRequest.ItemID, redirectNeeded ? folder.Name : PanelRequest.FolderID, permissions.GetPemissions()); + ES.Services.EnterpriseStorage.SetEnterpriseFolderPermissions(PanelRequest.ItemID, fileName, permissions.GetPemissions()); - ES.Services.WebServers.SetDirectoryBrowseEnabled(PanelRequest.ItemID, redirectNeeded ? folder.Url : lblFolderUrl.Text, chkDirectoryBrowsing.Checked); + ES.Services.WebServers.SetDirectoryBrowseEnabled(PanelRequest.ItemID, fileUrl, chkDirectoryBrowsing.Checked); if (redirectNeeded) { diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/EnterpriseStorageFolders.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/EnterpriseStorageFolders.ascx.cs index 04bee17f..dea4ca60 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/EnterpriseStorageFolders.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/EnterpriseStorageFolders.ascx.cs @@ -41,7 +41,16 @@ namespace WebsitePanel.Portal.ExchangeServer { if (!IsPostBack) { - BindEnterpriseStorageStats(); + if (ES.Services.EnterpriseStorage.CheckUsersDomainExists(PanelRequest.ItemID)) + { + BindEnterpriseStorageStats(); + } + else + { + btnAddFolder.Enabled = false; + + messageBox.ShowWarningMessage("WEB_SITE_IS_NOT_CREATED"); + } } }