webdav portal owa editing alpha
This commit is contained in:
parent
7aa68cd775
commit
aedc7ec08e
33 changed files with 969 additions and 153 deletions
|
@ -3,7 +3,7 @@
|
|||
<!-- Display Settings -->
|
||||
<PortalName>WebsitePanel</PortalName>
|
||||
<!-- Enterprise Server -->
|
||||
<EnterpriseServer>http://127.0.0.1:9555</EnterpriseServer>
|
||||
<EnterpriseServer>http://localhost:9002</EnterpriseServer>
|
||||
<!-- General Settings -->
|
||||
<CultureCookieName>UserCulture</CultureCookieName>
|
||||
<ThemeCookieName>UserTheme</ThemeCookieName>
|
||||
|
|
|
@ -26,22 +26,6 @@ namespace WebsitePanel.WebDavPortal
|
|||
|
||||
#endregion
|
||||
|
||||
#region Owa
|
||||
|
||||
routes.MapRoute(
|
||||
name: OwaRouteNames.GetFile,
|
||||
url: "owa/wopi*/files/{accessTokenId}/contents",
|
||||
defaults: new { controller = "Owa", action = "GetFile" }
|
||||
);
|
||||
|
||||
routes.MapRoute(
|
||||
name: OwaRouteNames.CheckFileInfo,
|
||||
url: "owa/wopi*/files/{accessTokenId}",
|
||||
defaults: new { controller = "Owa", action = "CheckFileInfo" }
|
||||
);
|
||||
|
||||
#endregion
|
||||
|
||||
routes.MapRoute(
|
||||
name: FileSystemRouteNames.DeleteFiles,
|
||||
url: "files-group-action/delete",
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using System.Web.Http;
|
||||
using WebsitePanel.WebDavPortal.DependencyInjection;
|
||||
using WebsitePanel.WebDavPortal.UI.Routes;
|
||||
|
||||
namespace WebsitePanel.WebDavPortal.App_Start
|
||||
{
|
||||
public class WebApiConfig
|
||||
{
|
||||
public static void Register(HttpConfiguration configuration)
|
||||
{
|
||||
#region Owa
|
||||
|
||||
configuration.Routes.MapHttpRoute(
|
||||
name: OwaRouteNames.GetFile,
|
||||
routeTemplate: "owa/wopi*/files/{accessTokenId}/contents",
|
||||
defaults: new {controller = "Owa", action = "GetFile"});
|
||||
|
||||
configuration.Routes.MapHttpRoute(
|
||||
name: OwaRouteNames.CheckFileInfo,
|
||||
routeTemplate: "owa/wopi*/files/{accessTokenId}",
|
||||
defaults: new {controller = "Owa", action = "CheckFileInfo"});
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
configuration.Routes.MapHttpRoute("API Default", "api/{controller}/{id}",
|
||||
new { id = RouteParameter.Optional });
|
||||
|
||||
configuration.DependencyResolver = new NinjectDependecyResolver();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
using System.Linq;
|
||||
using System.Web.Http.Controllers;
|
||||
|
||||
namespace WebsitePanel.WebDavPortal.Configurations.ActionSelectors
|
||||
{
|
||||
public class OwaActionSelector : ApiControllerActionSelector
|
||||
{
|
||||
public override HttpActionDescriptor SelectAction(HttpControllerContext controllerContext)
|
||||
{
|
||||
if (controllerContext.Request.Headers.Contains("X-WOPI-Override"))
|
||||
{
|
||||
var matchingHeaders = controllerContext.Request.Headers.GetValues("X-WOPI-Override");
|
||||
var headerValue = (matchingHeaders == null) ? "" : (matchingHeaders.FirstOrDefault() ?? "");
|
||||
|
||||
if (!string.IsNullOrEmpty(headerValue))
|
||||
{
|
||||
controllerContext.RouteData.Values["action"] = headerValue;
|
||||
}
|
||||
}
|
||||
|
||||
return base.SelectAction(controllerContext);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using System.Web.Http.Controllers;
|
||||
using WebsitePanel.WebDavPortal.Configurations.ActionSelectors;
|
||||
|
||||
namespace WebsitePanel.WebDavPortal.Configurations.ControllerConfigurations
|
||||
{
|
||||
public class OwaControllerConfiguration : Attribute, IControllerConfiguration
|
||||
{
|
||||
public void Initialize(HttpControllerSettings controllerSettings, HttpControllerDescriptor controllerDescriptor)
|
||||
{
|
||||
controllerSettings.Services.Replace(typeof(IHttpActionSelector), new OwaActionSelector());
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,129 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Net.Sockets;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Web;
|
||||
using System.Web.Hosting;
|
||||
using System.Web.Http;
|
||||
using Cobalt;
|
||||
using WebsitePanel.EnterpriseServer.Base.HostedSolution;
|
||||
using WebsitePanel.WebDav.Core;
|
||||
using WebsitePanel.WebDav.Core.Client;
|
||||
using WebsitePanel.WebDav.Core.Entities.Owa;
|
||||
using WebsitePanel.WebDav.Core.Interfaces.Managers;
|
||||
using WebsitePanel.WebDav.Core.Interfaces.Owa;
|
||||
using WebsitePanel.WebDav.Core.Interfaces.Security;
|
||||
using WebsitePanel.WebDav.Core.Security.Cryptography;
|
||||
using WebsitePanel.WebDav.Core.Wsp.Framework;
|
||||
using WebsitePanel.WebDavPortal.Configurations.ControllerConfigurations;
|
||||
|
||||
namespace WebsitePanel.WebDavPortal.Controllers.Api
|
||||
{
|
||||
[Authorize]
|
||||
[OwaControllerConfiguration]
|
||||
public class OwaController : ApiController
|
||||
{
|
||||
private readonly IWopiServer _wopiServer;
|
||||
private readonly IWebDavManager _webDavManager;
|
||||
private readonly IAuthenticationService _authenticationService;
|
||||
private readonly IAccessTokenManager _tokenManager;
|
||||
private readonly ICryptography _cryptography;
|
||||
//private static WopiSession _session;
|
||||
private readonly ICobaltManager _cobaltManager;
|
||||
|
||||
public OwaController(IWopiServer wopiServer, IWebDavManager webDavManager, IAuthenticationService authenticationService, IAccessTokenManager tokenManager, ICryptography cryptography, ICobaltManager cobaltManager)
|
||||
{
|
||||
_wopiServer = wopiServer;
|
||||
_webDavManager = webDavManager;
|
||||
_authenticationService = authenticationService;
|
||||
_tokenManager = tokenManager;
|
||||
_cryptography = cryptography;
|
||||
_cobaltManager = cobaltManager;
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public CheckFileInfo CheckFileInfo(int accessTokenId)
|
||||
{
|
||||
var token = _tokenManager.GetToken(accessTokenId);
|
||||
|
||||
var fileInfo = _wopiServer.GetCheckFileInfo(token.FilePath);
|
||||
|
||||
return fileInfo;
|
||||
}
|
||||
|
||||
public HttpResponseMessage GetFile(int accessTokenId)
|
||||
{
|
||||
var token = _tokenManager.GetToken(accessTokenId);
|
||||
|
||||
var bytes = _webDavManager.GetFileBytes(token.FilePath);
|
||||
|
||||
var result = new HttpResponseMessage(HttpStatusCode.OK);
|
||||
|
||||
var stream = new MemoryStream(bytes);
|
||||
|
||||
result.Content = new StreamContent(stream);
|
||||
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public async Task<HttpResponseMessage> Cobalt(int accessTokenId)
|
||||
{
|
||||
var memoryStream = new MemoryStream();
|
||||
|
||||
await Request.Content.CopyToAsync(memoryStream);
|
||||
|
||||
var responseBatch = _cobaltManager.ProcessRequest(accessTokenId, memoryStream);
|
||||
|
||||
var correlationId = Request.Headers.GetValues("X-WOPI-CorrelationID").FirstOrDefault() ?? "";
|
||||
|
||||
var response = new HttpResponseMessage();
|
||||
|
||||
response.Content = new PushStreamContent(
|
||||
(stream, content, context) =>
|
||||
{
|
||||
responseBatch.CopyTo(stream);
|
||||
stream.Close();
|
||||
});
|
||||
|
||||
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
|
||||
response.Content.Headers.ContentLength = responseBatch.Length;
|
||||
|
||||
response.Headers.Add("X-WOPI-CorellationID", correlationId);
|
||||
response.Headers.Add("request-id", correlationId);
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public HttpResponseMessage Lock(int accessTokenId)
|
||||
{
|
||||
return new HttpResponseMessage(HttpStatusCode.OK);
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public HttpResponseMessage UnLock(int accessTokenId)
|
||||
{
|
||||
return new HttpResponseMessage(HttpStatusCode.OK);
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public async Task<HttpResponseMessage> Put(int accessTokenId)
|
||||
{
|
||||
var token = _tokenManager.GetToken(accessTokenId);
|
||||
|
||||
var bytes = await Request.Content.ReadAsByteArrayAsync();
|
||||
|
||||
_webDavManager.UploadFile(token.FilePath, bytes);
|
||||
|
||||
return new HttpResponseMessage(HttpStatusCode.OK);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -14,6 +14,7 @@ using WebsitePanel.WebDav.Core.Config;
|
|||
using WebsitePanel.WebDav.Core.Exceptions;
|
||||
using WebsitePanel.WebDav.Core.Interfaces.Managers;
|
||||
using WebsitePanel.WebDav.Core.Interfaces.Security;
|
||||
using WebsitePanel.WebDav.Core.Security.Authorization.Enums;
|
||||
using WebsitePanel.WebDav.Core.Security.Cryptography;
|
||||
using WebsitePanel.WebDavPortal.CustomAttributes;
|
||||
using WebsitePanel.WebDavPortal.Extensions;
|
||||
|
@ -84,14 +85,21 @@ namespace WebsitePanel.WebDavPortal.Controllers
|
|||
|
||||
public ActionResult ShowOfficeDocument(string org, string pathPart = "")
|
||||
{
|
||||
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('/');
|
||||
var accessToken = _tokenManager.CreateToken(WspContext.User, pathPart);
|
||||
|
||||
string wopiSrc = Server.UrlDecode(Url.RouteUrl(OwaRouteNames.CheckFileInfo, new { accessTokenId = accessToken.Id }, Request.Url.Scheme));
|
||||
var urlPart = Url.HttpRouteUrl(OwaRouteNames.CheckFileInfo, new {accessTokenId = accessToken.Id});
|
||||
var url = new Uri(Request.Url, urlPart).ToString();
|
||||
|
||||
var uri = string.Format("{0}/{1}?WOPISrc={2}&access_token={3}", WebDavAppConfigManager.Instance.OfficeOnline.Url, owaOpener.OwaOpener, Server.UrlEncode(wopiSrc), Server.UrlEncode(accessToken.AccessToken.ToString("N")));
|
||||
string wopiSrc = Server.UrlDecode(url);
|
||||
|
||||
string owaOpenerUri = permissions.HasFlag(WebDavPermissions.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")));
|
||||
|
||||
return View(new OfficeOnlineModel(uri, new Uri(fileUrl).Segments.Last()));
|
||||
}
|
||||
|
|
|
@ -1,86 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Web;
|
||||
using System.Web.Mvc;
|
||||
using WebsitePanel.EnterpriseServer.Base.HostedSolution;
|
||||
using WebsitePanel.WebDav.Core.Interfaces.Managers;
|
||||
using WebsitePanel.WebDav.Core.Interfaces.Owa;
|
||||
using WebsitePanel.WebDav.Core.Interfaces.Security;
|
||||
using WebsitePanel.WebDav.Core.Security.Cryptography;
|
||||
using WebsitePanel.WebDav.Core.Wsp.Framework;
|
||||
|
||||
namespace WebsitePanel.WebDavPortal.Controllers
|
||||
{
|
||||
[AllowAnonymous]
|
||||
public class OwaController : Controller
|
||||
{
|
||||
private readonly IWopiServer _wopiServer;
|
||||
private readonly IWebDavManager _webDavManager;
|
||||
private readonly IAuthenticationService _authenticationService;
|
||||
private readonly IAccessTokenManager _tokenManager;
|
||||
private readonly ICryptography _cryptography;
|
||||
private WebDavAccessToken _token;
|
||||
|
||||
|
||||
public OwaController(IWopiServer wopiServer, IWebDavManager webDavManager, IAuthenticationService authenticationService, IAccessTokenManager tokenManager, ICryptography cryptography)
|
||||
{
|
||||
_wopiServer = wopiServer;
|
||||
_webDavManager = webDavManager;
|
||||
_authenticationService = authenticationService;
|
||||
_tokenManager = tokenManager;
|
||||
_cryptography = cryptography;
|
||||
}
|
||||
|
||||
public ActionResult CheckFileInfo(int accessTokenId)
|
||||
{
|
||||
if (!CheckAccess(accessTokenId))
|
||||
{
|
||||
return new HttpStatusCodeResult(HttpStatusCode.NoContent);
|
||||
}
|
||||
|
||||
var fileInfo = _wopiServer.GetCheckFileInfo(_token.FilePath);
|
||||
|
||||
return Json(fileInfo, JsonRequestBehavior.AllowGet);
|
||||
}
|
||||
|
||||
public ActionResult GetFile(int accessTokenId)
|
||||
{
|
||||
if (!CheckAccess(accessTokenId))
|
||||
{
|
||||
return new HttpStatusCodeResult(HttpStatusCode.NoContent);
|
||||
}
|
||||
|
||||
return _wopiServer.GetFile((_token.FilePath));
|
||||
}
|
||||
|
||||
protected override void OnActionExecuting(ActionExecutingContext filterContext)
|
||||
{
|
||||
base.OnActionExecuting(filterContext);
|
||||
|
||||
if (!string.IsNullOrEmpty(Request["access_token"]))
|
||||
{
|
||||
var guid = Guid.Parse((Request["access_token"]));
|
||||
|
||||
_tokenManager.ClearExpiredTokens();
|
||||
|
||||
_token = _tokenManager.GetToken(guid);
|
||||
|
||||
var user = WSP.Services.ExchangeServer.GetAccount(_token.ItemId, _token.AccountId);
|
||||
|
||||
_authenticationService.LogIn(user.UserPrincipalName, _cryptography.Decrypt(_token.AuthData));
|
||||
}
|
||||
}
|
||||
|
||||
private bool CheckAccess(int accessTokenId)
|
||||
{
|
||||
if (_token == null || accessTokenId != _token.Id)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,4 +1,5 @@
|
|||
using Ninject;
|
||||
using System.Web.Http.Dependencies;
|
||||
using Ninject;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
@ -7,13 +8,14 @@ using System.Web.Mvc;
|
|||
|
||||
namespace WebsitePanel.WebDavPortal.DependencyInjection
|
||||
{
|
||||
public class NinjectDependecyResolver : IDependencyResolver
|
||||
public class NinjectDependecyResolver : System.Web.Mvc.IDependencyResolver, System.Web.Http.Dependencies.IDependencyResolver
|
||||
{
|
||||
IKernel kernal;
|
||||
|
||||
public NinjectDependecyResolver()
|
||||
{
|
||||
kernal = new StandardKernel(new NinjectSettings { AllowNullInjection = true });
|
||||
|
||||
AddBindings();
|
||||
}
|
||||
|
||||
|
@ -27,9 +29,19 @@ namespace WebsitePanel.WebDavPortal.DependencyInjection
|
|||
return kernal.GetAll(serviceType);
|
||||
}
|
||||
|
||||
public IDependencyScope BeginScope()
|
||||
{
|
||||
return this;
|
||||
}
|
||||
|
||||
private void AddBindings()
|
||||
{
|
||||
PortalDependencies.Configure(kernal);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
|
@ -3,11 +3,13 @@ using System.Web.SessionState;
|
|||
using WebsitePanel.WebDav.Core.Interfaces.Managers;
|
||||
using WebsitePanel.WebDav.Core.Interfaces.Owa;
|
||||
using WebsitePanel.WebDav.Core.Interfaces.Security;
|
||||
using WebsitePanel.WebDav.Core.Interfaces.Storages;
|
||||
using WebsitePanel.WebDav.Core.Managers;
|
||||
using WebsitePanel.WebDav.Core.Owa;
|
||||
using WebsitePanel.WebDav.Core.Security.Authentication;
|
||||
using WebsitePanel.WebDav.Core.Security.Authorization;
|
||||
using WebsitePanel.WebDav.Core.Security.Cryptography;
|
||||
using WebsitePanel.WebDav.Core.Storages;
|
||||
using WebsitePanel.WebDavPortal.DependencyInjection.Providers;
|
||||
|
||||
namespace WebsitePanel.WebDavPortal.DependencyInjection
|
||||
|
@ -22,7 +24,10 @@ namespace WebsitePanel.WebDavPortal.DependencyInjection
|
|||
kernel.Bind<IWebDavManager>().To<WebDavManager>();
|
||||
kernel.Bind<IAccessTokenManager>().To<AccessTokenManager>();
|
||||
kernel.Bind<IWopiServer>().To<WopiServer>();
|
||||
kernel.Bind<IWopiFileManager>().To<CobaltFileManager>();
|
||||
kernel.Bind<IWebDavAuthorizationService>().To<WebDavAuthorizationService>();
|
||||
kernel.Bind<ICobaltManager>().To<CobaltManager>();
|
||||
kernel.Bind<ITtlStorage>().To<CacheTtlStorage>();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,15 +1,18 @@
|
|||
using System;
|
||||
using System.Threading;
|
||||
using System.Web;
|
||||
using System.Web.Http;
|
||||
using System.Web.Mvc;
|
||||
using System.Web.Optimization;
|
||||
using System.Web.Routing;
|
||||
using System.Web.Script.Serialization;
|
||||
using System.Web.Security;
|
||||
using System.Web.SessionState;
|
||||
using WebsitePanel.WebDav.Core.Config;
|
||||
using WebsitePanel.WebDav.Core.Interfaces.Security;
|
||||
using WebsitePanel.WebDav.Core.Security.Authentication.Principals;
|
||||
using WebsitePanel.WebDav.Core.Security.Cryptography;
|
||||
using WebsitePanel.WebDavPortal.App_Start;
|
||||
using WebsitePanel.WebDavPortal.Controllers;
|
||||
using WebsitePanel.WebDavPortal.DependencyInjection;
|
||||
using WebsitePanel.WebDavPortal.HttpHandlers;
|
||||
|
@ -22,8 +25,10 @@ namespace WebsitePanel.WebDavPortal
|
|||
{
|
||||
AreaRegistration.RegisterAllAreas();
|
||||
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
|
||||
WebApiConfig.Register(GlobalConfiguration.Configuration);
|
||||
RouteConfig.RegisterRoutes(RouteTable.Routes);
|
||||
BundleConfig.RegisterBundles(BundleTable.Bundles);
|
||||
GlobalConfiguration.Configuration.MessageHandlers.Add(new AccessTokenHandler());
|
||||
|
||||
DependencyResolver.SetResolver(new NinjectDependecyResolver());
|
||||
|
||||
|
@ -57,31 +62,47 @@ namespace WebsitePanel.WebDavPortal
|
|||
Response.End();
|
||||
}
|
||||
|
||||
protected void Application_BeginRequest(object sender, EventArgs e)
|
||||
{
|
||||
var s = HttpContext.Current.Request;
|
||||
}
|
||||
|
||||
protected void Application_PostAuthenticateRequest(Object sender, EventArgs e)
|
||||
{
|
||||
var contextWrapper = new HttpContextWrapper(Context);
|
||||
HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
|
||||
|
||||
var authService = DependencyResolver.Current.GetService<IAuthenticationService>();
|
||||
var cryptography = DependencyResolver.Current.GetService<ICryptography>();
|
||||
|
||||
if (authCookie != null)
|
||||
if (!IsOwaRequest())
|
||||
{
|
||||
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
|
||||
var contextWrapper = new HttpContextWrapper(Context);
|
||||
HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
|
||||
|
||||
var serializer = new JavaScriptSerializer();
|
||||
var authService = DependencyResolver.Current.GetService<IAuthenticationService>();
|
||||
var cryptography = DependencyResolver.Current.GetService<ICryptography>();
|
||||
|
||||
var principalSerialized = serializer.Deserialize<WspPrincipal>(authTicket.UserData);
|
||||
|
||||
authService.LogIn(principalSerialized.Login, cryptography.Decrypt(principalSerialized.EncryptedPassword));
|
||||
|
||||
if (!contextWrapper.Request.IsAjaxRequest())
|
||||
if (authCookie != null)
|
||||
{
|
||||
SetAuthenticationExpirationTicket();
|
||||
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
|
||||
|
||||
var serializer = new JavaScriptSerializer();
|
||||
|
||||
var principalSerialized = serializer.Deserialize<WspPrincipal>(authTicket.UserData);
|
||||
|
||||
authService.LogIn(principalSerialized.Login,
|
||||
cryptography.Decrypt(principalSerialized.EncryptedPassword));
|
||||
|
||||
if (!contextWrapper.Request.IsAjaxRequest())
|
||||
{
|
||||
SetAuthenticationExpirationTicket();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private bool IsOwaRequest()
|
||||
{
|
||||
return HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath.StartsWith("~/owa");
|
||||
}
|
||||
|
||||
public static void SetAuthenticationExpirationTicket()
|
||||
{
|
||||
var expirationDateTimeInUtc = DateTime.UtcNow.AddMinutes(FormsAuthentication.Timeout.TotalMinutes).AddSeconds(1);
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net.Http;
|
||||
using System.Security.Claims;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Web;
|
||||
using System.Web.Mvc;
|
||||
using WebsitePanel.WebDav.Core.Interfaces.Managers;
|
||||
using WebsitePanel.WebDav.Core.Interfaces.Security;
|
||||
using WebsitePanel.WebDav.Core.Security.Cryptography;
|
||||
using WebsitePanel.WebDav.Core.Wsp.Framework;
|
||||
|
||||
namespace WebsitePanel.WebDavPortal.HttpHandlers
|
||||
{
|
||||
public class AccessTokenHandler : DelegatingHandler
|
||||
{
|
||||
private const string Bearer = "Bearer ";
|
||||
|
||||
protected override async Task<HttpResponseMessage> SendAsync(
|
||||
HttpRequestMessage request, CancellationToken cancellationToken)
|
||||
{
|
||||
if (request.Headers.Contains("Authorization"))
|
||||
{
|
||||
var tokenString = request.Headers.GetValues("Authorization").First();
|
||||
if (!string.IsNullOrEmpty(tokenString) && tokenString.StartsWith(Bearer))
|
||||
{
|
||||
try
|
||||
{
|
||||
var accessToken = tokenString.Substring(Bearer.Length - 1);
|
||||
|
||||
var tokenManager = DependencyResolver.Current.GetService<IAccessTokenManager>();
|
||||
|
||||
var guid = Guid.Parse(accessToken);
|
||||
tokenManager.ClearExpiredTokens();
|
||||
|
||||
var token = tokenManager.GetToken(guid);
|
||||
|
||||
if (token != null)
|
||||
{
|
||||
var authenticationService = DependencyResolver.Current.GetService<IAuthenticationService>();
|
||||
var cryptography = DependencyResolver.Current.GetService<ICryptography>();
|
||||
|
||||
|
||||
var user = WSP.Services.ExchangeServer.GetAccount(token.ItemId, token.AccountId);
|
||||
|
||||
authenticationService.LogIn(user.UserPrincipalName, cryptography.Decrypt(token.AuthData));
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return await
|
||||
base.SendAsync(request, cancellationToken);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -61,13 +61,13 @@
|
|||
<add extension=".xlsx" path="~/Content/Images/excel-icon.png" />
|
||||
<add extension=".png" path="~/Content/Images/png-icon.png" />
|
||||
</fileIcons>
|
||||
<officeOnline isEnabled="True" url="https://vir-owa.virtuworks.net">
|
||||
<add extension=".doc" owaOpener="wv/wordviewerframe.aspx" />
|
||||
<add extension=".docx" owaOpener="wv/wordviewerframe.aspx" />
|
||||
<add extension=".xls" owaOpener="x/_layouts/xlviewerinternal.aspx" />
|
||||
<add extension=".xlsx" owaOpener="x/_layouts/xlviewerinternal.aspx" />
|
||||
<add extension=".ppt" owaOpener="p/PowerPointFrame.aspx" />
|
||||
<add extension=".pptx" owaOpener="p/PowerPointFrame.aspx" />
|
||||
<officeOnline isEnabled="True" url="https://vir-owa.virtuworks.net" cobaltFileTtl="30">
|
||||
<add extension=".doc" OwaView="wv/wordviewerframe.aspx?" OwaEditor="we/wordeditorframe.aspx?" />
|
||||
<add extension=".docx" OwaView="wv/wordviewerframe.aspx?" OwaEditor="we/wordeditorframe.aspx?" />
|
||||
<add extension=".xls" OwaView="x/_layouts/xlviewerinternal.aspx?" OwaEditor="x/_layouts/xlviewerinternal.aspx?edit=1&" />
|
||||
<add extension=".xlsx" OwaView="x/_layouts/xlviewerinternal.aspx?" OwaEditor="x/_layouts/xlviewerinternal.aspx?edit=1&" />
|
||||
<add extension=".ppt" OwaView="p/PowerPointFrame.aspx?" OwaEditor="p/PowerPointFrame.aspx?PowerPointView=EditView&" />
|
||||
<add extension=".pptx" OwaView="p/PowerPointFrame.aspx?" OwaEditor="p/PowerPointFrame.aspx?PowerPointView=EditView&" />
|
||||
</officeOnline>
|
||||
</webDavExplorerConfigurationSettings>
|
||||
<!--
|
||||
|
@ -79,6 +79,7 @@
|
|||
</system.Web>
|
||||
-->
|
||||
<system.web>
|
||||
<customErrors mode="Off"/>
|
||||
<!--<identity impersonate="true"/>-->
|
||||
<compilation debug="true" targetFramework="4.5" />
|
||||
<!-- Maximum size of uploaded file, in MB -->
|
||||
|
@ -101,7 +102,7 @@
|
|||
<remove name="UrlRoutingModule-4.0" />
|
||||
<add name="ChartImg" path="ChartImg.axd" verb="GET,HEAD,POST" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" resourceType="Unspecified" preCondition="integratedMode" />
|
||||
<add name="FileHandler" path="*.*" verb="GET" type="WebsitePanel.WebDavPortal.HttpHandlers.FileTransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
|
||||
</handlers>
|
||||
<remove name="ExtensionlessUrlHandler-Integrated-4.0" /><remove name="OPTIONSVerbHandler" /><remove name="TRACEVerbHandler" /><add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /></handlers>
|
||||
<modules>
|
||||
<add name="SecureSession" type="WebsitePanel.WebPortal.SecureSessionModule" />
|
||||
</modules>
|
||||
|
|
|
@ -51,6 +51,9 @@
|
|||
<Reference Include="log4net">
|
||||
<HintPath>..\packages\log4net.2.0.0\lib\net40-full\log4net.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.CobaltCore">
|
||||
<HintPath>..\..\Lib\References\Microsoft\Microsoft.CobaltCore.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="Microsoft.Web.Services3">
|
||||
<HintPath>..\..\Lib\Microsoft.Web.Services3.dll</HintPath>
|
||||
|
@ -71,6 +74,10 @@
|
|||
<Reference Include="System.Data.Entity" />
|
||||
<Reference Include="System.DirectoryServices" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Net.Http.Formatting, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\packages\Microsoft.AspNet.WebApi.Client.5.2.2\lib\net45\System.Net.Http.Formatting.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Web.DataVisualization" />
|
||||
<Reference Include="System.Web.DynamicData" />
|
||||
<Reference Include="System.Web.Entity" />
|
||||
|
@ -81,6 +88,14 @@
|
|||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.2\lib\net45\System.Web.Helpers.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Web.Http, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\packages\Microsoft.AspNet.WebApi.Core.5.2.2\lib\net45\System.Web.Http.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Web.Http.WebHost, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\packages\Microsoft.AspNet.WebApi.WebHost.5.2.2\lib\net45\System.Web.Http.WebHost.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Web.Mvc, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\packages\Microsoft.AspNet.Mvc.5.2.2\lib\net45\System.Web.Mvc.dll</HintPath>
|
||||
|
@ -140,11 +155,15 @@
|
|||
<Compile Include="App_Start\BundleConfig.cs" />
|
||||
<Compile Include="App_Start\FilterConfig.cs" />
|
||||
<Compile Include="App_Start\RouteConfig.cs" />
|
||||
<Compile Include="Constraints\OrganizationRouteConstraint.cs" />
|
||||
<Compile Include="App_Start\WebApiConfig.cs" />
|
||||
<Compile Include="Configurations\ActionSelectors\OwaActionSelector.cs" />
|
||||
<Compile Include="Configurations\Constraints\OrganizationRouteConstraint.cs" />
|
||||
<Compile Include="Configurations\ControllerConfigurations\OwaControllerConfiguration.cs" />
|
||||
<Compile Include="Controllers\AccountController.cs" />
|
||||
<Compile Include="Controllers\ErrorController.cs" />
|
||||
<Compile Include="Controllers\FileSystemController.cs" />
|
||||
<Compile Include="Controllers\OwaController.cs" />
|
||||
<Compile Include="Controllers\Api\OwaController.cs" />
|
||||
<Compile Include="Controllers\WopiSession.cs" />
|
||||
<Compile Include="CustomAttributes\FormValueRequiredAttribute.cs" />
|
||||
<Compile Include="CustomAttributes\LdapAuthorizationAttribute.cs" />
|
||||
<Compile Include="DependencyInjection\NinjectDependecyResolver.cs" />
|
||||
|
@ -158,6 +177,7 @@
|
|||
<Compile Include="Global.asax.cs">
|
||||
<DependentUpon>Global.asax</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="HttpHandlers\AccessTokenHandler.cs" />
|
||||
<Compile Include="HttpHandlers\FileTransferRequestHandler.cs" />
|
||||
<Compile Include="Models\AccountModel.cs" />
|
||||
<Compile Include="Models\Common\BaseModel.cs" />
|
||||
|
|
|
@ -9,6 +9,10 @@
|
|||
<package id="Microsoft.AspNet.Mvc" version="5.2.2" targetFramework="net45" />
|
||||
<package id="Microsoft.AspNet.Razor" version="3.2.2" targetFramework="net45" />
|
||||
<package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net45" />
|
||||
<package id="Microsoft.AspNet.WebApi" version="5.2.2" targetFramework="net45" />
|
||||
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.2" targetFramework="net45" />
|
||||
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.2" targetFramework="net45" />
|
||||
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.2" targetFramework="net45" />
|
||||
<package id="Microsoft.AspNet.WebPages" version="3.2.2" targetFramework="net45" />
|
||||
<package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.2.2" targetFramework="net45" />
|
||||
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue