add functionallity enterprise storage

This commit is contained in:
vfedosevich 2013-11-04 18:07:47 +03:00
parent cdf761d3ec
commit 922009d402
54 changed files with 4427 additions and 563 deletions

View file

@ -36,63 +36,127 @@ using Microsoft.Win32;
using WebsitePanel.Server.Utils;
using WebsitePanel.Providers.Utils;
using WebsitePanel.Providers.OS;
using WebsitePanel.Providers.Web;
namespace WebsitePanel.Providers.EnterpriseStorage
{
public class Windows2012 : HostingServiceProviderBase
public class Windows2012 : HostingServiceProviderBase, IEnterpriseStorage
{
#region Properties
protected string UsersHome
{
get { return FileUtils.EvaluateSystemVariables(ProviderSettings["UsersHome"]); }
}
#endregion
protected string LocationDrive
{
get { return FileUtils.EvaluateSystemVariables(ProviderSettings["LocationDrive"]); }
}
protected string UsersDomain
{
get { return FileUtils.EvaluateSystemVariables(ProviderSettings["UsersDomain"]); }
}
#endregion
#region Folders
public SystemFile[] GetFolders(string organizationId)
{
string rootPath = string.Format("{0}:\\{1}\\{2}", LocationDrive, UsersHome, organizationId);
DirectoryInfo root = new DirectoryInfo(rootPath);
IWebDav webdav = new Web.WebDav(UsersDomain);
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);
string fullName = System.IO.Path.Combine(rootPath, dir.Name);
SystemFile folder = new SystemFile(dir.Name, fullName, true,
FileUtils.BytesToMb(FileUtils.CalculateFolderSize(dir.FullName)), dir.CreationTime, dir.LastWriteTime);
folder.Url = string.Format("https://{0}/{1}/{2}", UsersDomain, organizationId, dir.Name);
folder.Rules = webdav.GetFolderWebDavRules(organizationId, dir.Name);
items.Add(folder);
// check if the directory is empty
fi.IsEmpty = (Directory.GetFileSystemEntries(fullName).Length == 0);
folder.IsEmpty = (Directory.GetFileSystemEntries(fullName).Length == 0);
}
return (SystemFile[])items.ToArray(typeof(SystemFile));
}
public SystemFile GetFolder(string organizationId, string folder)
public SystemFile GetFolder(string organizationId, string folderName)
{
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);
string fullName = string.Format("{0}:\\{1}\\{2}\\{3}", LocationDrive, UsersHome, organizationId, folderName);
DirectoryInfo root = new DirectoryInfo(fullName);
SystemFile folder = new SystemFile(root.Name, fullName, true,
FileUtils.BytesToMb( FileUtils.CalculateFolderSize(root.FullName)), root.CreationTime, root.LastWriteTime);
folder.Url = string.Format("https://{0}/{1}/{2}", UsersDomain, organizationId, folderName);
folder.Rules = GetFolderWebDavRules(organizationId, folderName);
return folder;
}
public void CreateFolder(string organizationId, string folder)
{
FileUtils.CreateDirectory(string.Format("{0}\\{1}\\{2}", UsersHome, organizationId, folder));
FileUtils.CreateDirectory(string.Format("{0}:\\{1}\\{2}\\{3}", LocationDrive, UsersHome, organizationId, folder));
}
public void DeleteFolder(string organizationId, string folder)
{
FileUtils.DeleteDirectoryRecursive(string.Format("{0}\\{1}\\{2}", UsersHome, organizationId, folder));
string rootPath = string.Format("{0}:\\{1}\\{2}\\{3}", LocationDrive, UsersHome, organizationId, folder);
DirectoryInfo treeRoot = new DirectoryInfo(rootPath);
if (treeRoot.Exists)
{
DirectoryInfo[] dirs = treeRoot.GetDirectories();
while (dirs.Length > 0)
{
foreach (DirectoryInfo dir in dirs)
DeleteFolder(organizationId, folder != string.Empty ? string.Format("{0}\\{1}", folder, dir.Name) : dir.Name);
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);
}
IWebDav webdav = new WebDav(UsersDomain);
webdav.DeleteAllWebDavRules(organizationId, folder);
Directory.Delete(treeRoot.FullName, true);
}
}
public void SetFolderQuota(string organizationId, string folder, long quota)
public bool SetFolderWebDavRules(string organizationId, string folder, WebDavFolderRule[] rules)
{
IWebDav webdav = new WebDav(UsersDomain);
return webdav.SetFolderWebDavRules(organizationId, folder, rules);
}
public WebDavFolderRule[] GetFolderWebDavRules(string organizationId, string folder)
{
IWebDav webdav = new WebDav(UsersDomain);
return webdav.GetFolderWebDavRules(organizationId, folder);
}
public bool CheckFileServicesInstallation()
@ -103,6 +167,7 @@ namespace WebsitePanel.Providers.EnterpriseStorage
#endregion
#region HostingServiceProvider methods
public override string[] Install()
{
List<string> messages = new List<string>();
@ -177,5 +242,6 @@ namespace WebsitePanel.Providers.EnterpriseStorage
Server.Utils.OS.WindowsVersion version = WebsitePanel.Server.Utils.OS.GetVersion();
return version == WebsitePanel.Server.Utils.OS.WindowsVersion.WindowsServer2012;
}
}
}