webdav portal Dependency resolver added

This commit is contained in:
vfedosevich 2015-01-10 00:49:29 -08:00
parent 6e6b2abd8a
commit 2244ce5add
16 changed files with 210 additions and 35 deletions

View file

@ -3,6 +3,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Web; using System.Web;
using System.Web.Mvc;
using System.Web.Routing; using System.Web.Routing;
using WebsitePanel.WebDavPortal.Config; using WebsitePanel.WebDavPortal.Config;
using WebsitePanel.WebDavPortal.DependencyInjection; using WebsitePanel.WebDavPortal.DependencyInjection;
@ -16,6 +17,8 @@ namespace WebsitePanel.WebDavPortal.Constraints
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{ {
var webdavManager = DependencyResolver.Current.GetService<IWebDavManager>();
object value; object value;
if (!values.TryGetValue(parameterName, out value)) if (!values.TryGetValue(parameterName, out value))
return false; return false;
@ -30,9 +33,7 @@ namespace WebsitePanel.WebDavPortal.Constraints
if (httpContext.Session == null) if (httpContext.Session == null)
return false; return false;
IKernel kernel = new StandardKernel(new WebDavExplorerAppModule()); if (webdavManager != null && str == webdavManager.OrganizationName)
var webDavManager = kernel.Get<IWebDavManager>();
if (webDavManager != null && str == webDavManager.OrganizationName)
{ {
actualOrgName = str; actualOrgName = str;
return true; return true;

View file

@ -28,13 +28,21 @@ namespace WebsitePanel.WebDavPortal.Controllers
{ {
public class AccountController : Controller public class AccountController : Controller
{ {
private readonly IKernel _kernel = new StandardKernel(new NinjectSettings {AllowNullInjection = true}, new WebDavExplorerAppModule()); private readonly AccountModel _accountModel;
private readonly IWebDavManager _webdavManager;
private readonly ICryptography _cryptography;
public AccountController(AccountModel accountModel, IWebDavManager webdavManager, ICryptography cryptography)
{
_accountModel = accountModel;
_webdavManager = webdavManager;
_cryptography = cryptography;
}
[HttpGet] [HttpGet]
public ActionResult Login() public ActionResult Login()
{ {
object isAuthentication = _kernel.Get<AccountModel>(); if (_accountModel != null)
if (isAuthentication != null)
return RedirectToAction("ShowContent", "FileSystem"); return RedirectToAction("ShowContent", "FileSystem");
return View(); return View();
} }
@ -54,16 +62,22 @@ namespace WebsitePanel.WebDavPortal.Controllers
model.Groups = ES.Services.Organizations.GetSecurityGroupsByMember(exchangeAccount.ItemId, exchangeAccount.AccountId); model.Groups = ES.Services.Organizations.GetSecurityGroupsByMember(exchangeAccount.ItemId, exchangeAccount.AccountId);
WebDavManager manager = null;
try try
{ {
Session[WebDavAppConfigManager.Instance.SessionKeys.AccountInfo] = model; Session[WebDavAppConfigManager.Instance.SessionKeys.AccountInfo] = model;
Session[WebDavAppConfigManager.Instance.SessionKeys.WebDavManager] = new WebDavManager(new NetworkCredential(model.Login, model.Password, WebDavAppConfigManager.Instance.UserDomain), exchangeAccount.ItemId);
manager = new WebDavManager(new NetworkCredential(model.Login, model.Password, WebDavAppConfigManager.Instance.UserDomain), exchangeAccount.ItemId);
Session[WebDavAppConfigManager.Instance.SessionKeys.WebDavManager] = manager;
} }
catch (ConnectToWebDavServerException exception) catch (ConnectToWebDavServerException exception)
{ {
return View(new AccountModel { LdapError = exception.Message }); return View(new AccountModel { LdapError = exception.Message });
} }
return RedirectToAction("ShowContent", "FileSystem", new { org = _kernel.Get<IWebDavManager>().OrganizationName });
return RedirectToAction("ShowContent", "FileSystem", new { org = manager.OrganizationName });
} }
return View(new AccountModel { LdapError = "The user name or password is incorrect" }); return View(new AccountModel { LdapError = "The user name or password is incorrect" });
} }
@ -78,15 +92,19 @@ namespace WebsitePanel.WebDavPortal.Controllers
private void AutheticationToServicesUsingWebsitePanelUser() private void AutheticationToServicesUsingWebsitePanelUser()
{ {
var crypto = _kernel.Get<ICryptography>();
var websitePanelLogin = WebDavAppConfigManager.Instance.WebsitePanelConstantUserParameters.Login; var websitePanelLogin = WebDavAppConfigManager.Instance.WebsitePanelConstantUserParameters.Login;
var websitePanelPassword = crypto.Decrypt(WebDavAppConfigManager.Instance.WebsitePanelConstantUserParameters.Password); var websitePanelPassword = _cryptography.Decrypt(WebDavAppConfigManager.Instance.WebsitePanelConstantUserParameters.Password);
var authTicket = new FormsAuthenticationTicket(1, websitePanelLogin, DateTime.Now, DateTime.Now.Add(FormsAuthentication.Timeout), var authTicket = new FormsAuthenticationTicket(1, websitePanelLogin, DateTime.Now, DateTime.Now.Add(FormsAuthentication.Timeout),
FormsAuthentication.SlidingExpiration, websitePanelPassword + Environment.NewLine); FormsAuthentication.SlidingExpiration, websitePanelPassword + Environment.NewLine);
var encryptedTicket = FormsAuthentication.Encrypt(authTicket); var encryptedTicket = FormsAuthentication.Encrypt(authTicket);
var authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); var authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
if (FormsAuthentication.SlidingExpiration) if (FormsAuthentication.SlidingExpiration)
{
authCookie.Expires = authTicket.Expiration; authCookie.Expires = authTicket.Expiration;
}
Response.Cookies.Add(authCookie); Response.Cookies.Add(authCookie);
} }
} }

View file

@ -22,26 +22,30 @@ namespace WebsitePanel.WebDavPortal.Controllers
[LdapAuthorization] [LdapAuthorization]
public class FileSystemController : Controller public class FileSystemController : Controller
{ {
private readonly IKernel _kernel = new StandardKernel(new WebDavExplorerAppModule()); private readonly IWebDavManager _webdavManager;
public FileSystemController(IWebDavManager webdavManager)
{
_webdavManager = webdavManager;
}
[HttpGet] [HttpGet]
public ActionResult ShowContent(string org, string pathPart = "") public ActionResult ShowContent(string org, string pathPart = "")
{ {
var webDavManager = new StandardKernel(new WebDavExplorerAppModule()).Get<IWebDavManager>(); if (org != _webdavManager.OrganizationName)
if (org != webDavManager.OrganizationName)
return new HttpStatusCodeResult(HttpStatusCode.NoContent); return new HttpStatusCodeResult(HttpStatusCode.NoContent);
string fileName = pathPart.Split('/').Last(); string fileName = pathPart.Split('/').Last();
if (webDavManager.IsFile(fileName)) if (_webdavManager.IsFile(fileName))
{ {
var fileBytes = webDavManager.GetFileBytes(fileName); var fileBytes = _webdavManager.GetFileBytes(fileName);
return File(fileBytes, MediaTypeNames.Application.Octet, fileName); return File(fileBytes, MediaTypeNames.Application.Octet, fileName);
} }
try try
{ {
webDavManager.OpenFolder(pathPart); _webdavManager.OpenFolder(pathPart);
IEnumerable<IHierarchyItem> children = webDavManager.GetChildren().Where(x => !WebDavAppConfigManager.Instance.ElementsRendering.ElementsToIgnore.Contains(x.DisplayName.Trim('/'))); IEnumerable<IHierarchyItem> children = _webdavManager.GetChildren().Where(x => !WebDavAppConfigManager.Instance.ElementsRendering.ElementsToIgnore.Contains(x.DisplayName.Trim('/')));
var model = new ModelForWebDav { Items = children.Take(WebDavAppConfigManager.Instance.ElementsRendering.DefaultCount), UrlSuffix = pathPart }; var model = new ModelForWebDav { Items = children.Take(WebDavAppConfigManager.Instance.ElementsRendering.DefaultCount), UrlSuffix = pathPart };
Session[WebDavAppConfigManager.Instance.SessionKeys.ResourseRenderCount] = WebDavAppConfigManager.Instance.ElementsRendering.DefaultCount; Session[WebDavAppConfigManager.Instance.SessionKeys.ResourseRenderCount] = WebDavAppConfigManager.Instance.ElementsRendering.DefaultCount;
@ -56,8 +60,7 @@ namespace WebsitePanel.WebDavPortal.Controllers
public ActionResult ShowOfficeDocument(string org, string pathPart = "") public ActionResult ShowOfficeDocument(string org, string pathPart = "")
{ {
var webDavManager = _kernel.Get<IWebDavManager>(); string fileUrl = _webdavManager.RootPath.TrimEnd('/') + "/" + pathPart.TrimStart('/');
string fileUrl = webDavManager.RootPath.TrimEnd('/') + "/" + pathPart.TrimStart('/');
var uri = new Uri(WebDavAppConfigManager.Instance.OfficeOnline.Url).AddParameter("src", fileUrl).ToString(); var uri = new Uri(WebDavAppConfigManager.Instance.OfficeOnline.Url).AddParameter("src", fileUrl).ToString();
return View(new OfficeOnlineModel(uri, new Uri(fileUrl).Segments.Last())); return View(new OfficeOnlineModel(uri, new Uri(fileUrl).Segments.Last()));
@ -69,9 +72,11 @@ namespace WebsitePanel.WebDavPortal.Controllers
if (Session[WebDavAppConfigManager.Instance.SessionKeys.ResourseRenderCount] != null) if (Session[WebDavAppConfigManager.Instance.SessionKeys.ResourseRenderCount] != null)
{ {
var renderedElementsCount = (int)Session[WebDavAppConfigManager.Instance.SessionKeys.ResourseRenderCount]; var renderedElementsCount = (int)Session[WebDavAppConfigManager.Instance.SessionKeys.ResourseRenderCount];
var webDavManager = _kernel.Get<IWebDavManager>();
IEnumerable<IHierarchyItem> children = webDavManager.GetChildren(); IEnumerable<IHierarchyItem> children = _webdavManager.GetChildren();
var result = children.Skip(renderedElementsCount).Take(WebDavAppConfigManager.Instance.ElementsRendering.AddElementsCount); var result = children.Skip(renderedElementsCount).Take(WebDavAppConfigManager.Instance.ElementsRendering.AddElementsCount);
Session[WebDavAppConfigManager.Instance.SessionKeys.ResourseRenderCount] = renderedElementsCount + WebDavAppConfigManager.Instance.ElementsRendering.AddElementsCount; Session[WebDavAppConfigManager.Instance.SessionKeys.ResourseRenderCount] = renderedElementsCount + WebDavAppConfigManager.Instance.ElementsRendering.AddElementsCount;
return PartialView("_ResourseCollectionPartial", result); return PartialView("_ResourseCollectionPartial", result);

View file

@ -4,6 +4,7 @@ using System.Web.Routing;
using Ninject; using Ninject;
using WebsitePanel.WebDavPortal.DependencyInjection; using WebsitePanel.WebDavPortal.DependencyInjection;
using WebsitePanel.WebDavPortal.Models; using WebsitePanel.WebDavPortal.Models;
using WebsitePanel.WebDavPortal.UI.Routes;
namespace WebsitePanel.WebDavPortal.CustomAttributes namespace WebsitePanel.WebDavPortal.CustomAttributes
{ {
@ -11,16 +12,19 @@ namespace WebsitePanel.WebDavPortal.CustomAttributes
{ {
protected override bool AuthorizeCore(HttpContextBase httpContext) protected override bool AuthorizeCore(HttpContextBase httpContext)
{ {
IKernel kernel = new StandardKernel(new NinjectSettings { AllowNullInjection = true }, new WebDavExplorerAppModule()); var accountInfo = DependencyResolver.Current.GetService<AccountModel>();
var accountInfo = kernel.Get<AccountModel>();
if (accountInfo == null) if (accountInfo == null)
{
return false; return false;
}
return true; return true;
} }
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{ {
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Account", action = "Login" })); filterContext.Result = new RedirectToRouteResult(AccountRouteNames.Login, null);
} }
} }
} }

View file

@ -0,0 +1,35 @@
using Ninject;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace WebsitePanel.WebDavPortal.DependencyInjection
{
public class NinjectDependecyResolver : IDependencyResolver
{
IKernel kernal;
public NinjectDependecyResolver()
{
kernal = new StandardKernel(new NinjectSettings { AllowNullInjection = true });
AddBindings();
}
public object GetService(Type serviceType)
{
return kernal.TryGet(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType)
{
return kernal.GetAll(serviceType);
}
private void AddBindings()
{
PortalDependencies.Configure(kernal);
}
}
}

View file

@ -0,0 +1,23 @@
using Ninject;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.SessionState;
using WebsitePanel.WebDavPortal.Cryptography;
using WebsitePanel.WebDavPortal.DependencyInjection.Providers;
using WebsitePanel.WebDavPortal.Models;
namespace WebsitePanel.WebDavPortal.DependencyInjection
{
public class PortalDependencies
{
public static void Configure(IKernel kernerl)
{
kernerl.Bind<HttpSessionState>().ToProvider<HttpSessionStateProvider>();
kernerl.Bind<IWebDavManager>().ToProvider<WebDavManagerProvider>();
kernerl.Bind<AccountModel>().ToProvider<AccountInfoProvider>();
kernerl.Bind<ICryptography>().To<CryptoUtils>();
}
}
}

View file

@ -0,0 +1,25 @@
using System.Web.SessionState;
using Ninject;
using Ninject.Activation;
using WebsitePanel.WebDavPortal.Config;
using WebsitePanel.WebDavPortal.Models;
namespace WebsitePanel.WebDavPortal.DependencyInjection.Providers
{
public class AccountInfoProvider : Provider<AccountModel>
{
protected override AccountModel CreateInstance(IContext context)
{
var session = context.Kernel.Get<HttpSessionState>();
AccountModel accountInfo = null;
if (session != null)
{
accountInfo = session[WebDavAppConfigManager.Instance.SessionKeys.AccountInfo] as AccountModel;
}
return accountInfo;
}
}
}

View file

@ -0,0 +1,17 @@
using Ninject.Activation;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.SessionState;
namespace WebsitePanel.WebDavPortal.DependencyInjection.Providers
{
public class HttpSessionStateProvider : Provider<HttpSessionState>
{
protected override HttpSessionState CreateInstance(IContext context)
{
return HttpContext.Current.Session;
}
}
}

View file

@ -0,0 +1,25 @@
using System.Web.SessionState;
using Ninject;
using Ninject.Activation;
using WebsitePanel.WebDavPortal.Config;
using WebsitePanel.WebDavPortal.Models;
namespace WebsitePanel.WebDavPortal.DependencyInjection.Providers
{
public class WebDavManagerProvider : Provider<WebDavManager>
{
protected override WebDavManager CreateInstance(IContext context)
{
var session = context.Kernel.Get<HttpSessionState>();
WebDavManager webDavManager = null;
if (session != null)
{
webDavManager = session[WebDavAppConfigManager.Instance.SessionKeys.WebDavManager] as WebDavManager;
}
return webDavManager;
}
}
}

View file

@ -4,6 +4,7 @@ using System.Web.Mvc;
using System.Web.Optimization; using System.Web.Optimization;
using System.Web.Routing; using System.Web.Routing;
using WebsitePanel.WebDavPortal.Controllers; using WebsitePanel.WebDavPortal.Controllers;
using WebsitePanel.WebDavPortal.DependencyInjection;
namespace WebsitePanel.WebDavPortal namespace WebsitePanel.WebDavPortal
{ {
@ -15,6 +16,8 @@ namespace WebsitePanel.WebDavPortal
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes); RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles); BundleConfig.RegisterBundles(BundleTable.Bundles);
DependencyResolver.SetResolver(new NinjectDependecyResolver());
} }
protected void Application_Error(object sender, EventArgs e) protected void Application_Error(object sender, EventArgs e)

View file

@ -11,12 +11,15 @@ using WebsitePanel.Portal;
using WebsitePanel.Providers.OS; using WebsitePanel.Providers.OS;
using Ninject; using Ninject;
using WebsitePanel.WebDavPortal.DependencyInjection; using WebsitePanel.WebDavPortal.DependencyInjection;
using System.Web.Mvc;
namespace WebsitePanel.WebDavPortal.Models namespace WebsitePanel.WebDavPortal.Models
{ {
public class WebDavManager : IWebDavManager public class WebDavManager : IWebDavManager
{ {
private readonly WebDavSession _webDavSession = new WebDavSession(); private readonly WebDavSession _webDavSession = new WebDavSession();
private readonly AccountModel _accountModel;
private IList<SystemFile> _rootFolders; private IList<SystemFile> _rootFolders;
private int _itemId; private int _itemId;
private IFolder _currentFolder; private IFolder _currentFolder;
@ -36,11 +39,11 @@ namespace WebsitePanel.WebDavPortal.Models
public WebDavManager(NetworkCredential credential, int itemId) public WebDavManager(NetworkCredential credential, int itemId)
{ {
_accountModel = DependencyResolver.Current.GetService<AccountModel>();
_webDavSession.Credentials = credential; _webDavSession.Credentials = credential;
_itemId = itemId; _itemId = itemId;
IKernel _kernel = new StandardKernel(new NinjectSettings { AllowNullInjection = true }, new WebDavExplorerAppModule()); _rootFolders = ConnectToWebDavServer(_accountModel);
var accountModel = _kernel.Get<AccountModel>();
_rootFolders = ConnectToWebDavServer(accountModel);
if (_rootFolders.Any()) if (_rootFolders.Any())
{ {

View file

@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WebsitePanel.WebDavPortal.UI.Routes
{
public class FileSystemRouteNames
{
public const string FilePath = "FilePathRoute";
}
}

View file

@ -2,7 +2,7 @@
@using Ninject @using Ninject
@model WebsitePanel.WebDavPortal.Models.ModelForWebDav @model WebsitePanel.WebDavPortal.Models.ModelForWebDav
@{ @{
var webDavManager = (new StandardKernel(new WebsitePanel.WebDavPortal.DependencyInjection.WebDavExplorerAppModule())).Get<WebsitePanel.WebDavPortal.Models.IWebDavManager>(); var webDavManager = DependencyResolver.Current.GetService<WebsitePanel.WebDavPortal.Models.IWebDavManager>();
ViewBag.Title = (string.IsNullOrEmpty(Model.UrlSuffix) ? webDavManager.OrganizationName : Model.UrlSuffix); ViewBag.Title = (string.IsNullOrEmpty(Model.UrlSuffix) ? webDavManager.OrganizationName : Model.UrlSuffix);
} }
@Scripts.Render("~/bundles/jquery") @Scripts.Render("~/bundles/jquery")

View file

@ -18,8 +18,7 @@
break; break;
default: default:
isTargetBlank = false; isTargetBlank = false;
IKernel _kernel = new StandardKernel(new WebsitePanel.WebDavPortal.DependencyInjection.WebDavExplorerAppModule()); var webDavManager = DependencyResolver.Current.GetService<WebsitePanel.WebDavPortal.Models.IWebDavManager>();
var webDavManager = _kernel.Get<WebsitePanel.WebDavPortal.Models.IWebDavManager>();
href = Model.Href.AbsolutePath; href = Model.Href.AbsolutePath;
break; break;
} }

View file

@ -3,6 +3,11 @@
@using WebsitePanel.WebDavPortal.DependencyInjection @using WebsitePanel.WebDavPortal.DependencyInjection
@using WebsitePanel.WebDavPortal.Models @using WebsitePanel.WebDavPortal.Models
@using WebsitePanel.WebDavPortal.UI.Routes; @using WebsitePanel.WebDavPortal.UI.Routes;
@{
var account = DependencyResolver.Current.GetService<AccountModel>();
}
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
@ -25,8 +30,6 @@
</div> </div>
<div class="navbar-collapse collapse"> <div class="navbar-collapse collapse">
@{ @{
IKernel kernel = new StandardKernel(new NinjectSettings { AllowNullInjection = true }, new WebDavExplorerAppModule());
var account = kernel.Get<AccountModel>();
if (account != null) if (account != null)
{ {
<a id="logout" class="nav navbar-text navbar-right" href="@Url.RouteUrl(AccountRouteNames.Logout)" title="Log out"><i class="glyphicon glyphicon-log-out"></i></a> <a id="logout" class="nav navbar-text navbar-right" href="@Url.RouteUrl(AccountRouteNames.Logout)" title="Log out"><i class="glyphicon glyphicon-log-out"></i></a>

View file

@ -158,9 +158,11 @@
<Compile Include="Cryptography\CryptoUtils.cs" /> <Compile Include="Cryptography\CryptoUtils.cs" />
<Compile Include="Cryptography\ICryptography.cs" /> <Compile Include="Cryptography\ICryptography.cs" />
<Compile Include="CustomAttributes\LdapAuthorizationAttribute.cs" /> <Compile Include="CustomAttributes\LdapAuthorizationAttribute.cs" />
<Compile Include="DependencyInjection\AccountInfoProvider.cs" /> <Compile Include="DependencyInjection\Providers\AccountInfoProvider.cs" />
<Compile Include="DependencyInjection\WebDavExplorerAppModule.cs" /> <Compile Include="DependencyInjection\NinjectDependecyResolver.cs" />
<Compile Include="DependencyInjection\WebDavManagerProvider.cs" /> <Compile Include="DependencyInjection\PortalDependencies.cs" />
<Compile Include="DependencyInjection\Providers\HttpSessionStateProvider.cs" />
<Compile Include="DependencyInjection\Providers\WebDavManagerProvider.cs" />
<Compile Include="Exceptions\ConnectToWebDavServerException.cs" /> <Compile Include="Exceptions\ConnectToWebDavServerException.cs" />
<Compile Include="Exceptions\ResourceNotFoundException.cs" /> <Compile Include="Exceptions\ResourceNotFoundException.cs" />
<Compile Include="Extensions\DictionaryExtensions.cs" /> <Compile Include="Extensions\DictionaryExtensions.cs" />