webdav portal owa fixes

This commit is contained in:
vfedosevich 2015-02-05 06:44:31 -08:00
parent 2968fbb967
commit eb8c879605
6 changed files with 48 additions and 24 deletions

View file

@ -190,6 +190,8 @@ namespace WebsitePanel.WebDav.Core.Managers
public void DeleteResource(string path) public void DeleteResource(string path)
{ {
path = RemoveLeadingFromPath(path, "office365"); path = RemoveLeadingFromPath(path, "office365");
path = RemoveLeadingFromPath(path, "view");
path = RemoveLeadingFromPath(path, "edit");
path = RemoveLeadingFromPath(path, WspContext.User.OrganizationId); path = RemoveLeadingFromPath(path, WspContext.User.OrganizationId);
string folderPath = GetFileFolder(path); string folderPath = GetFileFolder(path);

View file

@ -45,11 +45,23 @@ namespace WebsitePanel.WebDavPortal
); );
routes.MapRoute( routes.MapRoute(
name: FileSystemRouteNames.ShowOfficeOnlinePath, name: FileSystemRouteNames.ViewOfficeOnline,
url: "office365/{org}/{*pathPart}", url: "office365/view/{org}/{*pathPart}",
defaults: new { controller = "FileSystem", action = "ShowOfficeDocument", pathPart = UrlParameter.Optional } defaults: new { controller = "FileSystem", action = "ViewOfficeDocument", pathPart = UrlParameter.Optional }
); );
routes.MapRoute(
name: FileSystemRouteNames.EditOfficeOnline,
url: "office365/edit/{org}/{*pathPart}",
defaults: new { controller = "FileSystem", action = "EditOfficeDocument", pathPart = UrlParameter.Optional }
);
//routes.MapRoute(
// name: FileSystemRouteNames.ShowOfficeOnlinePath,
// url: "office365/{org}/{*pathPart}",
// defaults: new { controller = "FileSystem", action = "ShowOfficeDocument", pathPart = UrlParameter.Optional }
// );
routes.MapRoute( routes.MapRoute(
name: FileSystemRouteNames.ShowAdditionalContent, name: FileSystemRouteNames.ShowAdditionalContent,
url: "show-additional-content/{*path}", url: "show-additional-content/{*path}",

View file

@ -177,8 +177,8 @@ namespace WebsitePanel.WebDavPortal.Controllers.Api
var newToken = _tokenManager.CreateToken(WspContext.User,newFilePath); var newToken = _tokenManager.CreateToken(WspContext.User,newFilePath);
var readUrlPart = Url.Route(FileSystemRouteNames.ShowOfficeOnlinePath, new { org = WspContext.User.OrganizationId, pathPart = newFilePath, fileAccess = FileAccess.Read }); var readUrlPart = Url.Route(FileSystemRouteNames.ViewOfficeOnline, new { org = WspContext.User.OrganizationId, pathPart = newFilePath});
var writeUrlPart = Url.Route(FileSystemRouteNames.ShowOfficeOnlinePath, new { org = WspContext.User.OrganizationId, pathPart = newFilePath, fileAccess = FileAccess.Write }); var writeUrlPart = Url.Route(FileSystemRouteNames.EditOfficeOnline, new { org = WspContext.User.OrganizationId, pathPart = newFilePath });
result.HostEditUrl = new Uri(Request.RequestUri, writeUrlPart).ToString(); result.HostEditUrl = new Uri(Request.RequestUri, writeUrlPart).ToString();
result.HostViewUrl = new Uri(Request.RequestUri, readUrlPart).ToString(); ; result.HostViewUrl = new Uri(Request.RequestUri, readUrlPart).ToString(); ;

View file

@ -4,6 +4,7 @@ using System.Diagnostics;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Net.Mime; using System.Net.Mime;
using System.Security.Policy;
using System.Web; using System.Web;
using System.Web.Mvc; using System.Web.Mvc;
using System.Web.Routing; using System.Web.Routing;
@ -83,12 +84,8 @@ namespace WebsitePanel.WebDavPortal.Controllers
} }
} }
public ActionResult ShowOfficeDocument(string org, string pathPart = "", FileAccess? fileAccess = null) public ActionResult ShowOfficeDocument(string org, string pathPart, string owaOpenerUri)
{ {
var permissions = _webDavAuthorizationService.GetPermissions(WspContext.User, pathPart);
var owaOpener = WebDavAppConfigManager.Instance.OfficeOnline.Single(x => x.Extension == Path.GetExtension(pathPart));
string fileUrl = WebDavAppConfigManager.Instance.WebdavRoot+ org + "/" + pathPart.TrimStart('/'); string fileUrl = WebDavAppConfigManager.Instance.WebdavRoot+ org + "/" + pathPart.TrimStart('/');
var accessToken = _tokenManager.CreateToken(WspContext.User, pathPart); var accessToken = _tokenManager.CreateToken(WspContext.User, pathPart);
@ -97,22 +94,32 @@ namespace WebsitePanel.WebDavPortal.Controllers
string wopiSrc = Server.UrlDecode(url); string wopiSrc = Server.UrlDecode(url);
string owaOpenerUri = string.Empty;
if (fileAccess == null)
{
owaOpenerUri = permissions.HasFlag(WebDavPermissions.Write) ? owaOpener.OwaEditor : owaOpener.OwaView;
}
else
{
owaOpenerUri = permissions.HasFlag(WebDavPermissions.Write) && fileAccess == FileAccess.Write ? owaOpener.OwaEditor : owaOpener.OwaView;
}
var uri = string.Format("{0}/{1}WOPISrc={2}&access_token={3}", WebDavAppConfigManager.Instance.OfficeOnline.Url, owaOpenerUri, Server.UrlEncode(wopiSrc), Server.UrlEncode(accessToken.AccessToken.ToString("N"))); var uri = string.Format("{0}/{1}WOPISrc={2}&access_token={3}", WebDavAppConfigManager.Instance.OfficeOnline.Url, owaOpenerUri, Server.UrlEncode(wopiSrc), Server.UrlEncode(accessToken.AccessToken.ToString("N")));
string fileName = fileUrl.Split('/').Last(); string fileName = fileUrl.Split('/').Last();
return View(new OfficeOnlineModel(uri, fileName)); return View("ShowOfficeDocument", new OfficeOnlineModel(uri, fileName));
}
public ActionResult ViewOfficeDocument(string org, string pathPart)
{
var owaOpener = WebDavAppConfigManager.Instance.OfficeOnline.Single(x => x.Extension == Path.GetExtension(pathPart));
return ShowOfficeDocument(org, pathPart, owaOpener.OwaView);
}
public ActionResult EditOfficeDocument(string org, string pathPart)
{
var permissions = _webDavAuthorizationService.GetPermissions(WspContext.User, pathPart);
if (permissions.HasFlag(WebDavPermissions.Write) == false)
{
return new RedirectToRouteResult(FileSystemRouteNames.ViewOfficeOnline, null);
}
var owaOpener = WebDavAppConfigManager.Instance.OfficeOnline.Single(x => x.Extension == Path.GetExtension(pathPart));
return ShowOfficeDocument(org, pathPart, owaOpener.OwaEditor);
} }
[HttpPost] [HttpPost]

View file

@ -8,7 +8,10 @@ namespace WebsitePanel.WebDavPortal.UI.Routes
public class FileSystemRouteNames public class FileSystemRouteNames
{ {
public const string ShowContentPath = "ShowContentRoute"; public const string ShowContentPath = "ShowContentRoute";
public const string ShowOfficeOnlinePath = "ShowOfficeOnlineRoute"; public const string ShowOfficeOnlinePath_ = "ShowOfficeOnlineRoute";
public const string ViewOfficeOnline = "ViewOfficeOnlineRoute";
public const string EditOfficeOnline = "EditOfficeOnlineRoute";
public const string ShowAdditionalContent = "ShowAdditionalContentRoute"; public const string ShowAdditionalContent = "ShowAdditionalContentRoute";
public const string UploadFile = "UplaodFIleRoute"; public const string UploadFile = "UplaodFIleRoute";

View file

@ -18,7 +18,7 @@
case FileOpenerType.OfficeOnline: case FileOpenerType.OfficeOnline:
isTargetBlank = true; isTargetBlank = true;
var pathPart = Model.Href.AbsolutePath.Replace("/" + WspContext.User.OrganizationId, "").TrimStart('/'); var pathPart = Model.Href.AbsolutePath.Replace("/" + WspContext.User.OrganizationId, "").TrimStart('/');
href = string.Concat(Url.RouteUrl(FileSystemRouteNames.ShowOfficeOnlinePath, new { org = WspContext.User.OrganizationId, pathPart = "" }), pathPart); href = string.Concat(Url.RouteUrl(FileSystemRouteNames.EditOfficeOnline, new { org = WspContext.User.OrganizationId, pathPart = "" }), pathPart);
break; break;
default: default:
isTargetBlank = false; isTargetBlank = false;