webdav portal owa editing alpha

This commit is contained in:
vfedosevich 2015-01-30 00:28:47 -08:00
parent 7aa68cd775
commit aedc7ec08e
33 changed files with 969 additions and 153 deletions

View file

@ -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>

View file

@ -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",

View file

@ -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();
}
}
}

View file

@ -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);
}
}
}

View file

@ -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());
}
}
}

View file

@ -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);
}
}
}

View file

@ -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()));
}

View file

@ -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;
}
}
}

View file

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

View file

@ -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>();
}
}
}

View file

@ -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);

View file

@ -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);
}
}
}

View file

@ -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&amp;" />
<add extension=".xlsx" OwaView="x/_layouts/xlviewerinternal.aspx?" OwaEditor="x/_layouts/xlviewerinternal.aspx?edit=1&amp;" />
<add extension=".ppt" OwaView="p/PowerPointFrame.aspx?" OwaEditor="p/PowerPointFrame.aspx?PowerPointView=EditView&amp;" />
<add extension=".pptx" OwaView="p/PowerPointFrame.aspx?" OwaEditor="p/PowerPointFrame.aspx?PowerPointView=EditView&amp;" />
</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>

View file

@ -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" />

View file

@ -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" />