From c32aafcaac0d002487b40859a631d86e3f488603 Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Tue, 6 Jan 2015 05:58:18 -0800 Subject: [PATCH 01/23] Domain expiration sub domain fix --- .../SchedulerTasks/DomainExpirationTask.cs | 13 ++++++------- .../Servers/ServerController.cs | 2 ++ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs index b6c9c613..5ca21217 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2015, Outercurve Foundation. +// Copyright (c) 2015, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, @@ -57,7 +57,7 @@ namespace WebsitePanel.EnterpriseServer { BackgroundTask topTask = TaskManager.TopTask; var domainUsers = new Dictionary(); - var checkedDomains = new List(); + var checkedDomains = new List(); var expiredDomains = new List(); var nonExistenDomains = new List(); var allDomains = new List(); @@ -101,12 +101,12 @@ namespace WebsitePanel.EnterpriseServer foreach (var domain in domains) { - if (checkedDomains.Contains(domain.DomainId)) + if (checkedDomains.Any(x=> x.DomainId == domain.DomainId)) { continue; } - checkedDomains.Add(domain.DomainId); + checkedDomains.Add(domain); ServerController.UpdateDomainWhoisData(domain); @@ -124,12 +124,11 @@ namespace WebsitePanel.EnterpriseServer } } - var subDomains = allDomains.Where(x => x.ExpirationDate == null || CheckDomainExpiration(x.ExpirationDate, daysBeforeNotify)).GroupBy(p => p.DomainId).Select(g => g.First()).ToList(); - allTopLevelDomains = allTopLevelDomains.GroupBy(p => p.DomainId).Select(g => g.First()).ToList(); + var subDomains = allDomains.Where(x => !checkedDomains.Any(z => z.DomainId == x.DomainId)).GroupBy(p => p.DomainId).Select(g => g.First()).ToList(); foreach (var subDomain in subDomains) { - var mainDomain = allTopLevelDomains.Where(x => subDomain.DomainId != x.DomainId && subDomain.DomainName.ToLowerInvariant().Contains(x.DomainName.ToLowerInvariant())).OrderByDescending(s => s.DomainName.Length).FirstOrDefault(); ; + var mainDomain = checkedDomains.Where(x => subDomain.DomainId != x.DomainId && subDomain.DomainName.ToLowerInvariant().Contains(x.DomainName.ToLowerInvariant())).OrderByDescending(s => s.DomainName.Length).FirstOrDefault(); ; if (mainDomain != null) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs index d0d17ade..c9aec104 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs @@ -2709,6 +2709,7 @@ namespace WebsitePanel.EnterpriseServer domain.CreationDate = ParseDate(creationDateString); domain.ExpirationDate = ParseDate(expirationDateString); domain.RegistrarName = ParseWhoisDomainInfo(whoisResult.Raw, _registrarNamePatterns); + domain.LastUpdateDate = DateTime.Now; DataProvider.UpdateWhoisDomainInfo(domain.DomainId, domain.CreationDate, domain.ExpirationDate, DateTime.Now, domain.RegistrarName); } @@ -2727,6 +2728,7 @@ namespace WebsitePanel.EnterpriseServer domain.CreationDate = creationDate; domain.ExpirationDate = expirationDate; domain.RegistrarName = registrarName; + domain.LastUpdateDate = DateTime.Now; return domain; } From 8f31f63054df3778ec73978a12fbee2f43ccee1c Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Tue, 6 Jan 2015 06:17:11 -0800 Subject: [PATCH 02/23] Domain expiration task subdomains fix --- .../SchedulerTasks/DomainExpirationTask.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs index 5ca21217..be4f50a3 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs @@ -124,7 +124,7 @@ namespace WebsitePanel.EnterpriseServer } } - var subDomains = allDomains.Where(x => !checkedDomains.Any(z => z.DomainId == x.DomainId)).GroupBy(p => p.DomainId).Select(g => g.First()).ToList(); + var subDomains = allDomains.Where(x => !checkedDomains.Any(z => z.DomainId == x.DomainId && z.ExpirationDate != null)).GroupBy(p => p.DomainId).Select(g => g.First()).ToList(); foreach (var subDomain in subDomains) { From 2ec10f698830563da1d566e4711331b79a9a9e5c Mon Sep 17 00:00:00 2001 From: "a.skorina" Date: Fri, 9 Jan 2015 11:48:38 +0300 Subject: [PATCH 03/23] webdav portal web.config file added to ignore --- .../Config/Entities/ElementsRendering.cs | 7 ++++++- .../Controllers/FileSystemController.cs | 3 ++- WebsitePanel/Sources/WebsitePanel.WebDavPortal/Web.config | 2 +- .../WebConfigSections/ElementsRenderingElement.cs | 8 ++++++++ 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Config/Entities/ElementsRendering.cs b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Config/Entities/ElementsRendering.cs index 04a1105d..c5703a8a 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Config/Entities/ElementsRendering.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Config/Entities/ElementsRendering.cs @@ -1,14 +1,19 @@ -namespace WebsitePanel.WebDavPortal.Config.Entities +using System.Collections.Generic; +using System.Linq; + +namespace WebsitePanel.WebDavPortal.Config.Entities { public class ElementsRendering : AbstractConfigCollection { public int DefaultCount { get; private set; } public int AddElementsCount { get; private set; } + public List ElementsToIgnore { get; private set; } public ElementsRendering() { DefaultCount = ConfigSection.ElementsRendering.DefaultCount; AddElementsCount = ConfigSection.ElementsRendering.AddElementsCount; + ElementsToIgnore = ConfigSection.ElementsRendering.ElementsToIgnore.Split(',').ToList(); } } } \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Controllers/FileSystemController.cs b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Controllers/FileSystemController.cs index c8d77ab4..482a1fea 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Controllers/FileSystemController.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Controllers/FileSystemController.cs @@ -41,7 +41,8 @@ namespace WebsitePanel.WebDavPortal.Controllers try { webDavManager.OpenFolder(pathPart); - IEnumerable children = webDavManager.GetChildren(); + IEnumerable 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 }; Session[WebDavAppConfigManager.Instance.SessionKeys.ResourseRenderCount] = WebDavAppConfigManager.Instance.ElementsRendering.DefaultCount; diff --git a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Web.config b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Web.config index 8fdb594d..c45fcad6 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Web.config +++ b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Web.config @@ -24,7 +24,7 @@ - + diff --git a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/WebConfigSections/ElementsRenderingElement.cs b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/WebConfigSections/ElementsRenderingElement.cs index 996d4a30..a5a9a6ce 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/WebConfigSections/ElementsRenderingElement.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/WebConfigSections/ElementsRenderingElement.cs @@ -6,6 +6,7 @@ namespace WebsitePanel.WebDavPortal.WebConfigSections { private const string DefaultCountKey = "defaultCount"; private const string AddElementsCountKey = "addElementsCount"; + private const string ElementsToIgnoreKey = "elementsToIgnoreKey"; [ConfigurationProperty(DefaultCountKey, IsKey = true, IsRequired = true, DefaultValue = 30)] public int DefaultCount @@ -20,5 +21,12 @@ namespace WebsitePanel.WebDavPortal.WebConfigSections get { return (int)this[AddElementsCountKey]; } set { this[AddElementsCountKey] = value; } } + + [ConfigurationProperty(ElementsToIgnoreKey, IsKey = true, IsRequired = true, DefaultValue = "")] + public string ElementsToIgnore + { + get { return (string)this[ElementsToIgnoreKey]; } + set { this[ElementsToIgnoreKey] = value; } + } } } \ No newline at end of file From e4785dabca2533e36630fb23de1bc6d545fafae0 Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Fri, 9 Jan 2015 04:52:51 -0800 Subject: [PATCH 04/23] webdav portal group permission fix added logout button --- .../App_Start/RouteConfig.cs | 13 +++++++++++++ .../WebsitePanel.WebDavPortal/Content/Site.css | 15 ++++++++++++++- .../Controllers/AccountController.cs | 13 ++++++++++++- .../Models/AccountModel.cs | 6 +++++- .../Models/WebDavManager.cs | 16 ++++++++++++---- .../UI/Routes/AccountRouteNames.cs | 13 +++++++++++++ .../Views/Shared/_Layout.cshtml | 6 ++++-- .../WebsitePanel.WebDavPortal.csproj | 2 ++ 8 files changed, 75 insertions(+), 9 deletions(-) create mode 100644 WebsitePanel/Sources/WebsitePanel.WebDavPortal/UI/Routes/AccountRouteNames.cs diff --git a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/App_Start/RouteConfig.cs b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/App_Start/RouteConfig.cs index c7b92062..3316d657 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/App_Start/RouteConfig.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/App_Start/RouteConfig.cs @@ -1,5 +1,6 @@ using System.Web.Mvc; using System.Web.Routing; +using WebsitePanel.WebDavPortal.UI.Routes; namespace WebsitePanel.WebDavPortal { @@ -9,6 +10,18 @@ namespace WebsitePanel.WebDavPortal { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); + routes.MapRoute( + name: AccountRouteNames.Logout, + url: "account/logout", + defaults: new { controller = "Account", action = "Logout" } + ); + + routes.MapRoute( + name: AccountRouteNames.Login, + url: "account/login", + defaults: new { controller = "Account", action = "Login" } + ); + routes.MapRoute( name: "Office365DocumentRoute", url: "office365/{org}/{*pathPart}", diff --git a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Content/Site.css b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Content/Site.css index 20e5c6b1..2389aea4 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Content/Site.css +++ b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Content/Site.css @@ -32,4 +32,17 @@ textarea { color: red; font-weight: bold; padding-top: 5px; - } \ No newline at end of file + } + +#username { + display:inline-block; +} + +#logout { + font-size: 1.2em; + color: #9d9d9d; +} + +#logout :hover { + color: white; +} \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Controllers/AccountController.cs b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Controllers/AccountController.cs index 242cd617..b95f91d6 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Controllers/AccountController.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Controllers/AccountController.cs @@ -22,6 +22,7 @@ using WebsitePanel.WebDavPortal.Models; using System.Collections.Generic; using WebsitePanel.Providers.OS; using WebDAV; +using WebsitePanel.WebDavPortal.UI.Routes; namespace WebsitePanel.WebDavPortal.Controllers { @@ -50,7 +51,9 @@ namespace WebsitePanel.WebDavPortal.Controllers if (isAuthenticated) { Session[WebDavAppConfigManager.Instance.SessionKeys.ItemId] = exchangeAccount.ItemId; - + + model.Groups = ES.Services.Organizations.GetSecurityGroupsByMember(exchangeAccount.ItemId, exchangeAccount.AccountId); + try { Session[WebDavAppConfigManager.Instance.SessionKeys.AccountInfo] = model; @@ -65,6 +68,14 @@ namespace WebsitePanel.WebDavPortal.Controllers return View(new AccountModel { LdapError = "The user name or password is incorrect" }); } + [HttpGet] + public ActionResult Logout() + { + Session[WebDavAppConfigManager.Instance.SessionKeys.AccountInfo] = null; + + return RedirectToRoute(AccountRouteNames.Login); + } + private void AutheticationToServicesUsingWebsitePanelUser() { var crypto = _kernel.Get(); diff --git a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Models/AccountModel.cs b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Models/AccountModel.cs index 72956e73..2ad1e6a8 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Models/AccountModel.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Models/AccountModel.cs @@ -1,4 +1,6 @@ -using System.ComponentModel.DataAnnotations; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using WebsitePanel.Providers.HostedSolution; namespace WebsitePanel.WebDavPortal.Models { @@ -21,6 +23,8 @@ namespace WebsitePanel.WebDavPortal.Models } } + public IEnumerable Groups { get; set; } + public string LdapError { get; set; } } } \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Models/WebDavManager.cs b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Models/WebDavManager.cs index 05f578d8..319a54bb 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Models/WebDavManager.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Models/WebDavManager.cs @@ -40,7 +40,7 @@ namespace WebsitePanel.WebDavPortal.Models _itemId = itemId; IKernel _kernel = new StandardKernel(new NinjectSettings { AllowNullInjection = true }, new WebDavExplorerAppModule()); var accountModel = _kernel.Get(); - _rootFolders = ConnectToWebDavServer(accountModel.UserName); + _rootFolders = ConnectToWebDavServer(accountModel); if (_rootFolders.Any()) { @@ -126,14 +126,22 @@ namespace WebsitePanel.WebDavPortal.Models } } - private IList ConnectToWebDavServer(string userName) + private IList ConnectToWebDavServer(AccountModel user) { var rootFolders = new List(); foreach (var folder in ES.Services.EnterpriseStorage.GetEnterpriseFolders(_itemId)) { var permissions = ES.Services.EnterpriseStorage.GetEnterpriseFolderPermissions(_itemId, folder.Name); - if (permissions.Any(x => x.DisplayName == userName)) - rootFolders.Add(folder); + + foreach (var permission in permissions) + { + if ((!permission.IsGroup && permission.DisplayName == user.UserName) + || (permission.IsGroup && user.Groups.Any(x=> x.DisplayName == permission.DisplayName))) + { + rootFolders.Add(folder); + break; + } + } } return rootFolders; } diff --git a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/UI/Routes/AccountRouteNames.cs b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/UI/Routes/AccountRouteNames.cs new file mode 100644 index 00000000..035fde95 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/UI/Routes/AccountRouteNames.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; + +namespace WebsitePanel.WebDavPortal.UI.Routes +{ + public class AccountRouteNames + { + public const string Logout = "AccountLogout"; + public const string Login = "AccountLogin"; + } +} \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Views/Shared/_Layout.cshtml b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Views/Shared/_Layout.cshtml index 6162ed3a..a03b50f7 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Views/Shared/_Layout.cshtml +++ b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Views/Shared/_Layout.cshtml @@ -2,6 +2,7 @@ @using WebsitePanel.WebDavPortal.Config @using WebsitePanel.WebDavPortal.DependencyInjection @using WebsitePanel.WebDavPortal.Models +@using WebsitePanel.WebDavPortal.UI.Routes; @@ -28,9 +29,10 @@ var account = kernel.Get(); if (account != null) { - + + } - } +} diff --git a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/WebsitePanel.WebDavPortal.csproj b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/WebsitePanel.WebDavPortal.csproj index 5b2ea9ec..f49ff0d3 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/WebsitePanel.WebDavPortal.csproj +++ b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/WebsitePanel.WebDavPortal.csproj @@ -179,6 +179,7 @@ + @@ -289,6 +290,7 @@ GlobalResourceProxyGenerator Resource.errors.designer.cs + Designer From 6e6b2abd8a82b399cf48ea8a1c301143ac32174c Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Fri, 9 Jan 2015 23:29:10 -0800 Subject: [PATCH 05/23] webdav portal home link added to logo --- .../WebsitePanel.WebDavPortal/App_Start/RouteConfig.cs | 8 ++++++-- .../WebsitePanel.WebDavPortal/Views/Shared/_Layout.cshtml | 2 +- .../WebsitePanel.WebDavPortal.csproj | 1 + 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/App_Start/RouteConfig.cs b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/App_Start/RouteConfig.cs index 3316d657..65491262 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/App_Start/RouteConfig.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/App_Start/RouteConfig.cs @@ -10,6 +10,8 @@ namespace WebsitePanel.WebDavPortal { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); + #region Account + routes.MapRoute( name: AccountRouteNames.Logout, url: "account/logout", @@ -20,7 +22,9 @@ namespace WebsitePanel.WebDavPortal name: AccountRouteNames.Login, url: "account/login", defaults: new { controller = "Account", action = "Login" } - ); + ); + + #endregion routes.MapRoute( name: "Office365DocumentRoute", @@ -29,7 +33,7 @@ namespace WebsitePanel.WebDavPortal ); routes.MapRoute( - name: "FilePathRoute", + name: FileSystemRouteNames.FilePath, url: "{org}/{*pathPart}", defaults: new { controller = "FileSystem", action = "ShowContent", pathPart = UrlParameter.Optional }, constraints: new { org = new WebsitePanel.WebDavPortal.Constraints.OrganizationRouteConstraint() } diff --git a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Views/Shared/_Layout.cshtml b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Views/Shared/_Layout.cshtml index a03b50f7..323bb3a5 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Views/Shared/_Layout.cshtml +++ b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Views/Shared/_Layout.cshtml @@ -21,7 +21,7 @@ - @Html.ActionLink(WebDavAppConfigManager.Instance.ApplicationName, "Login", "Account", new { area = "" }, new { @class = "navbar-brand" }) + @Html.RouteLink(WebDavAppConfigManager.Instance.ApplicationName, FileSystemRouteNames.FilePath, new { pathPart = string.Empty }, new { @class = "navbar-brand" })