diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/EnterpriseStorage/IEnterpriseStorage.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/EnterpriseStorage/IEnterpriseStorage.cs index 0d5323d5..24461de5 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/EnterpriseStorage/IEnterpriseStorage.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/EnterpriseStorage/IEnterpriseStorage.cs @@ -28,6 +28,7 @@ using System; using System.Collections; +using WebsitePanel.Providers.OS; namespace WebsitePanel.Providers.EnterpriseStorage { @@ -36,6 +37,10 @@ namespace WebsitePanel.Providers.EnterpriseStorage /// public interface IEnterpriseStorage { - + SystemFile[] GetFolders(string organizationId); + SystemFile GetFolder(string organizationId, string folder); + void CreateFolder(string organizationId, string folder); + void DeleteFolder(string organizationId, string folder); + void SetFolderQuota(string organizationId, string folder, long quota); } } diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/OS/SystemFile.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/OS/SystemFile.cs index 9204535a..1030c519 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/OS/SystemFile.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/OS/SystemFile.cs @@ -41,6 +41,7 @@ namespace WebsitePanel.Providers.OS private DateTime changed; private bool isDirectory; private long size; + private long quota; private bool isEmpty; public SystemFile() diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.EnterpriseStorage.Windows2012/Windows2012.cs b/WebsitePanel/Sources/WebsitePanel.Providers.EnterpriseStorage.Windows2012/Windows2012.cs index 711b7aa4..b313de15 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.EnterpriseStorage.Windows2012/Windows2012.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.EnterpriseStorage.Windows2012/Windows2012.cs @@ -1,5 +1,6 @@ using System; using System.IO; +using System.Collections; using System.Collections.Generic; using System.Text; using Microsoft.Win32; @@ -21,6 +22,52 @@ namespace WebsitePanel.Providers.EnterpriseStorage.Windows2012 #endregion + #region Folders + public SystemFile[] GetFolders(string organizationId) + { + + ArrayList items = new ArrayList(); + DirectoryInfo root = new DirectoryInfo(string.Format("{0}\\{1}", UsersHome, organizationId)); + + // get directories + DirectoryInfo[] dirs = root.GetDirectories(); + foreach (DirectoryInfo dir in dirs) + { + string fullName = System.IO.Path.Combine(string.Format("{0}\\{1}", UsersHome, organizationId), dir.Name); + SystemFile fi = new SystemFile(dir.Name, fullName, true, 0, dir.CreationTime, dir.LastWriteTime); + items.Add(fi); + + // check if the directory is empty + fi.IsEmpty = (Directory.GetFileSystemEntries(fullName).Length == 0); + } + + return (SystemFile[])items.ToArray(typeof(SystemFile)); + } + + public SystemFile GetFolder(string organizationId, string folder) + { + DirectoryInfo root = new DirectoryInfo(string.Format("{0}\\{1}\\{2}", UsersHome, organizationId, folder)); + string fullName = string.Format("{0}\\{1}\\{2}", UsersHome, organizationId, folder); + return new SystemFile(root.Name, fullName, true, 0, root.CreationTime, root.LastWriteTime); + } + + public void CreateFolder(string organizationId, string folder) + { + FileUtils.CreateDirectory(string.Format("{0}\\{1}\\{2}", UsersHome, organizationId, folder)); + } + + public void DeleteFolder(string organizationId, string folder) + { + FileUtils.DeleteDirectoryRecursive(string.Format("{0}\\{1}\\{2}", UsersHome, organizationId, folder)); + } + + public void SetFolderQuota(string organizationId, string folder, long quota) + { + + + } + #endregion + #region HostingServiceProvider methods public override string[] Install() { diff --git a/WebsitePanel/Sources/WebsitePanel.Server/EnterpriseStorage.asmx.cs b/WebsitePanel/Sources/WebsitePanel.Server/EnterpriseStorage.asmx.cs index 6e2ea6cd..6d413784 100644 --- a/WebsitePanel/Sources/WebsitePanel.Server/EnterpriseStorage.asmx.cs +++ b/WebsitePanel/Sources/WebsitePanel.Server/EnterpriseStorage.asmx.cs @@ -37,6 +37,7 @@ using Microsoft.Web.Services3; using WebsitePanel.Providers; using WebsitePanel.Providers.EnterpriseStorage; +using WebsitePanel.Providers.OS; using WebsitePanel.Server.Utils; namespace WebsitePanel.Server @@ -50,12 +51,94 @@ namespace WebsitePanel.Server [ToolboxItem(false)] public class EnterpriseStorage : HostingServiceProviderWebService, IEnterpriseStorage { - private IEnterpriseStorage RDSProvider + private IEnterpriseStorage EnterpriseStorageProvider { get { return (IEnterpriseStorage)Provider; } } + [WebMethod, SoapHeader("settings")] + public SystemFile[] GetFolders(string organizationId) + { + try + { + Log.WriteStart("'{0}' GetFolders", ProviderSettings.ProviderName); + SystemFile[] result = EnterpriseStorageProvider.GetFolders(organizationId); + Log.WriteEnd("'{0}' GetFolders", ProviderSettings.ProviderName); + return result; + } + catch (Exception ex) + { + Log.WriteError(String.Format("'{0}' GetFolders", ProviderSettings.ProviderName), ex); + throw; + } + } + + [WebMethod, SoapHeader("settings")] + public SystemFile GetFolder(string organizationId, string folder) + { + try + { + Log.WriteStart("'{0}' GetFolder", ProviderSettings.ProviderName); + SystemFile result = EnterpriseStorageProvider.GetFolder(organizationId, folder); + Log.WriteEnd("'{0}' GetFolder", ProviderSettings.ProviderName); + return result; + } + catch (Exception ex) + { + Log.WriteError(String.Format("'{0}' GetFolder", ProviderSettings.ProviderName), ex); + throw; + } + } + + [WebMethod, SoapHeader("settings")] + public void CreateFolder(string organizationId, string folder) + { + try + { + Log.WriteStart("'{0}' CreateFolder", ProviderSettings.ProviderName); + EnterpriseStorageProvider.CreateFolder(organizationId, folder); + Log.WriteEnd("'{0}' CreateFolder", ProviderSettings.ProviderName); + } + catch (Exception ex) + { + Log.WriteError(String.Format("'{0}' CreateFolder", ProviderSettings.ProviderName), ex); + throw; + } + } + + [WebMethod, SoapHeader("settings")] + public void DeleteFolder(string organizationId, string folder) + { + try + { + Log.WriteStart("'{0}' DeleteFolder", ProviderSettings.ProviderName); + EnterpriseStorageProvider.DeleteFolder(organizationId, folder); + Log.WriteEnd("'{0}' DeleteFolder", ProviderSettings.ProviderName); + } + catch (Exception ex) + { + Log.WriteError(String.Format("'{0}' DeleteFolder", ProviderSettings.ProviderName), ex); + throw; + } + } + + + [WebMethod, SoapHeader("settings")] + public void SetFolderQuota(string organizationId, string folder, long quota) + { + try + { + Log.WriteStart("'{0}' SetFolderQuota", ProviderSettings.ProviderName); + EnterpriseStorageProvider.SetFolderQuota(organizationId, folder,quota); + Log.WriteEnd("'{0}' SetFolderQuota", ProviderSettings.ProviderName); + } + catch (Exception ex) + { + Log.WriteError(String.Format("'{0}' SetFolderQuota", ProviderSettings.ProviderName), ex); + throw; + } + } } }