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 {
}
}
+ ///
@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)
}