From 0a64381dacdd1f1fcdb2168135c9fe41940a4dac Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Mon, 9 Mar 2015 03:16:45 -0700 Subject: [PATCH] webdav portal fixes --- .../Windows2012.cs | 32 +++++++++- .../Extensions/UriExtensions.cs | 8 +++ .../WebsitePanel.WebDav.Core/IResource.cs | 2 +- .../Managers/WebDavManager.cs | 2 +- .../Controllers/FileSystemController.cs | 3 +- .../Helpers/ViewDataHelper.cs | 31 +++++++++ .../Resources/UI.Designer.cs | 63 +++++++++++++++++++ .../Resources/UI.resx | 21 +++++++ .../Views/FileSystem/_ResoursePartial.cshtml | 3 +- .../WebsitePanel.WebDavPortal.csproj | 1 + 10 files changed, 161 insertions(+), 5 deletions(-) create mode 100644 WebsitePanel/Sources/WebsitePanel.WebDavPortal/Helpers/ViewDataHelper.cs diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.EnterpriseStorage.Windows2012/Windows2012.cs b/WebsitePanel/Sources/WebsitePanel.Providers.EnterpriseStorage.Windows2012/Windows2012.cs index b2eed0b3..f0a8caf3 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.EnterpriseStorage.Windows2012/Windows2012.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.EnterpriseStorage.Windows2012/Windows2012.cs @@ -342,7 +342,7 @@ namespace WebsitePanel.Providers.EnterpriseStorage } } - file.Summary = reader[6] as string; + file.Summary = SanitizeXmlString(reader[6] as string); result.Add(file); } @@ -354,6 +354,36 @@ namespace WebsitePanel.Providers.EnterpriseStorage } + public string SanitizeXmlString(string xml) + { + if (xml == null) + { + return null; + } + + var buffer = new StringBuilder(xml.Length); + + foreach (char c in xml.Where(c => IsLegalXmlChar(c))) + { + buffer.Append(c); + } + + return buffer.ToString(); + } + + public bool IsLegalXmlChar(int character) + { + return + ( + character == 0x9 /* == '\t' == 9 */ || + character == 0xA /* == '\n' == 10 */ || + character == 0xD /* == '\r' == 13 */ || + (character >= 0x20 && character <= 0xD7FF) || + (character >= 0xE000 && character <= 0xFFFD) || + (character >= 0x10000 && character <= 0x10FFFF) + ); + } + #region HostingServiceProvider methods public override string[] Install() diff --git a/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Extensions/UriExtensions.cs b/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Extensions/UriExtensions.cs index 8ba4aeeb..0311ecce 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Extensions/UriExtensions.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Extensions/UriExtensions.cs @@ -9,5 +9,13 @@ namespace WebsitePanel.WebDav.Core.Extensions { return new Uri(paths.Aggregate(uri.AbsoluteUri, (current, path) => string.Format("{0}/{1}", current.TrimEnd('/'), path.TrimStart('/')))); } + + public static string ToStringPath(this Uri uri) + { + var hostStart = uri.ToString().IndexOf(uri.Host, System.StringComparison.Ordinal); + var hostLength = uri.Host.Length; + + return uri.ToString().Substring(hostStart + hostLength, uri.ToString().Length - hostStart - hostLength); + } } } \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebDav.Core/IResource.cs b/WebsitePanel/Sources/WebsitePanel.WebDav.Core/IResource.cs index 1a099ebf..2f706746 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebDav.Core/IResource.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebDav.Core/IResource.cs @@ -483,7 +483,7 @@ namespace WebsitePanel.WebDav.Core { _href = href; - var baseUrl = href.AbsoluteUri.Remove(href.AbsoluteUri.Length - href.Segments.Last().Length); + var baseUrl = href.ToString().Remove(href.ToString().Length - href.ToString().Trim('/').Split('/').Last().Length); _baseUri = new Uri(baseUrl); } diff --git a/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Managers/WebDavManager.cs b/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Managers/WebDavManager.cs index d3f837a7..5853f525 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Managers/WebDavManager.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Managers/WebDavManager.cs @@ -52,7 +52,7 @@ namespace WebsitePanel.WebDav.Core.Managers Href = new Uri(x.Url), ItemType = ItemType.Folder, ContentLength = x.Size * 1024 * 1024, - AllocatedSpace = x.FRSMQuotaMB * 1024 * 1024, + AllocatedSpace = (long)x.FRSMQuotaMB * 1024 * 1024, IsRootItem = true }).ToArray(); } diff --git a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Controllers/FileSystemController.cs b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Controllers/FileSystemController.cs index 9d4016e1..c66cb750 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Controllers/FileSystemController.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Controllers/FileSystemController.cs @@ -352,7 +352,8 @@ namespace WebsitePanel.WebDavPortal.Controllers foreach (var item in items) { var opener = _openerManager[Path.GetExtension(item.DisplayName)]; - var pathPart = item.Href.AbsolutePath.Replace("/" + WspContext.User.OrganizationId, "").TrimStart('/'); + //var pathPart = item.Href.ToString().Replace("/" + WspContext.User.OrganizationId, "").TrimStart('/'); + var pathPart = item.Href.ToStringPath().Replace("/" + WspContext.User.OrganizationId, "").TrimStart('/'); switch (opener) { diff --git a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Helpers/ViewDataHelper.cs b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Helpers/ViewDataHelper.cs new file mode 100644 index 00000000..6bcbccc6 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Helpers/ViewDataHelper.cs @@ -0,0 +1,31 @@ +using System; + +namespace WebsitePanel.WebDavPortal.Helpers +{ + public class ViewDataHelper + { + public static string BytesToSize(long bytes) + { + if (bytes == 0) + { + return string.Format("0 {0}", Resources.UI.Byte); + } + + var k = 1024; + + var sizes = new[] + { + Resources.UI.Bytes, + Resources.UI.KilobyteShort, + Resources.UI.MegabyteShort, + Resources.UI.GigabyteShort, + Resources.UI.TerabyteShort, + Resources.UI.PetabyteShort, + Resources.UI.ExabyteShort + }; + + var i = (int) Math.Floor(Math.Log(bytes)/Math.Log(k)); + return string.Format("{0} {1}", Math.Round(bytes/Math.Pow(k, i), 3), sizes[i]); + } + } +} \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Resources/UI.Designer.cs b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Resources/UI.Designer.cs index 0aa9d823..4a5a4578 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Resources/UI.Designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Resources/UI.Designer.cs @@ -69,6 +69,24 @@ namespace WebsitePanel.WebDavPortal.Resources { } } + /// + /// Looks up a localized string similar to Byte. + /// + public static string Byte { + get { + return ResourceManager.GetString("Byte", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Bytes. + /// + public static string Bytes { + get { + return ResourceManager.GetString("Bytes", resourceCulture); + } + } + /// /// Looks up a localized string similar to Cancel. /// @@ -150,6 +168,15 @@ namespace WebsitePanel.WebDavPortal.Resources { } } + /// + /// Looks up a localized string similar to EB. + /// + public static string ExabyteShort { + get { + return ResourceManager.GetString("ExabyteShort", resourceCulture); + } + } + /// /// Looks up a localized string similar to File. /// @@ -195,6 +222,24 @@ namespace WebsitePanel.WebDavPortal.Resources { } } + /// + /// Looks up a localized string similar to KB. + /// + public static string KilobyteShort { + get { + return ResourceManager.GetString("KilobyteShort", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to MB. + /// + public static string MegabyteShort { + get { + return ResourceManager.GetString("MegabyteShort", resourceCulture); + } + } + /// /// Looks up a localized string similar to Modified. /// @@ -240,6 +285,15 @@ namespace WebsitePanel.WebDavPortal.Resources { } } + /// + /// Looks up a localized string similar to PB. + /// + public static string PetabyteShort { + get { + return ResourceManager.GetString("PetabyteShort", resourceCulture); + } + } + /// /// Looks up a localized string similar to Please wait.... /// @@ -321,6 +375,15 @@ namespace WebsitePanel.WebDavPortal.Resources { } } + /// + /// Looks up a localized string similar to TB. + /// + public static string TerabyteShort { + get { + return ResourceManager.GetString("TerabyteShort", resourceCulture); + } + } + /// /// Looks up a localized string similar to Type. /// diff --git a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Resources/UI.resx b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Resources/UI.resx index 7d3fbf56..2ffe1406 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Resources/UI.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Resources/UI.resx @@ -120,6 +120,12 @@ Actions + + Byte + + + Bytes + Cancel @@ -147,6 +153,9 @@ Error + + EB + File @@ -162,6 +171,12 @@ {0} items was removed. + + KB + + + MB + Modified @@ -177,6 +192,9 @@ or drag and drop files here. + + PB + Please wait... @@ -204,6 +222,9 @@ Table + + TB + Type diff --git a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Views/FileSystem/_ResoursePartial.cshtml b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Views/FileSystem/_ResoursePartial.cshtml index 274f677b..9285872a 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Views/FileSystem/_ResoursePartial.cshtml +++ b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Views/FileSystem/_ResoursePartial.cshtml @@ -4,6 +4,7 @@ @using WebsitePanel.WebDav.Core.Config @using WebsitePanel.WebDavPortal.FileOperations @using Ninject; +@using WebsitePanel.WebDavPortal.Helpers @using WebsitePanel.WebDavPortal.Resources @using WebsitePanel.WebDavPortal.UI @using WebsitePanel.WebDavPortal.UI.Routes @@ -63,7 +64,7 @@

@percent%

-

@Math.Round(Convert.ToDecimal(resource.ContentLength) / 1024, 2) / @Math.Round(Convert.ToDecimal(resource.AllocatedSpace) / 1024, 2) @UI.GigabyteShort

+

@ViewDataHelper.BytesToSize(resource.ContentLength) / @ViewDataHelper.BytesToSize(resource.AllocatedSpace)

}
diff --git a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/WebsitePanel.WebDavPortal.csproj b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/WebsitePanel.WebDavPortal.csproj index 6ccbc782..a2c21f6c 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/WebsitePanel.WebDavPortal.csproj +++ b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/WebsitePanel.WebDavPortal.csproj @@ -183,6 +183,7 @@ Global.asax +