Merge pull request #267 from sbwalker/master

completed client state invalidation in multi-user environment
This commit is contained in:
Shaun Walker 2020-03-10 10:41:29 -04:00 committed by GitHub
commit 44c9c050d7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
47 changed files with 104 additions and 143 deletions

View File

@ -152,7 +152,7 @@
}
await FolderService.UpdateFolderOrderAsync(folder.SiteId, folder.FolderId, folder.ParentId);
await logger.LogInformation("Folder Saved {Folder}", folder);
NavigationManager.NavigateTo(NavigateUrl(Reload.Site));
NavigationManager.NavigateTo(NavigateUrl());
}
else
{

View File

@ -117,7 +117,7 @@
{
await logger.LogInformation("Login Successful For Username {Username}", Username);
authstateprovider.NotifyAuthenticationChanged();
NavigationManager.NavigateTo(NavigateUrl(ReturnUrl, Reload.Site));
NavigationManager.NavigateTo(NavigateUrl(ReturnUrl));
}
else
{

View File

@ -72,7 +72,7 @@
try
{
await ModuleDefinitionService.InstallModuleDefinitionsAsync();
NavigationManager.NavigateTo(NavigateUrl(Reload.Application));
NavigationManager.NavigateTo(NavigateUrl());
}
catch (Exception ex)
{

View File

@ -71,7 +71,7 @@
moduledefinition.Permissions = permissiongrid.GetPermissions();
await ModuleDefinitionService.UpdateModuleDefinitionAsync(moduledefinition);
await logger.LogInformation("ModuleDefinition Saved {ModuleDefinition}", moduledefinition);
NavigationManager.NavigateTo(NavigateUrl(Reload.Site));
NavigationManager.NavigateTo(NavigateUrl());
}
catch (Exception ex)
{

View File

@ -78,7 +78,7 @@ else
await PackageService.DownloadPackageAsync(moduledefinitionname, version, "Modules");
await ModuleDefinitionService.InstallModuleDefinitionsAsync();
await logger.LogInformation("Module Downloaded {ModuleDefinitionName} {Version}", moduledefinitionname, version);
NavigationManager.NavigateTo(NavigateUrl(Reload.Application));
NavigationManager.NavigateTo(NavigateUrl());
}
catch (Exception ex)
{
@ -93,7 +93,7 @@ else
{
await ModuleDefinitionService.DeleteModuleDefinitionAsync(ModuleDefinition.ModuleDefinitionId, ModuleDefinition.SiteId);
await logger.LogInformation("Module Deleted {ModuleDefinition}", ModuleDefinition);
NavigationManager.NavigateTo(NavigateUrl(Reload.Application));
NavigationManager.NavigateTo(NavigateUrl());
}
catch (Exception ex)
{

View File

@ -33,7 +33,8 @@
try
{
await ModuleService.ImportModuleAsync(ModuleState.ModuleId, content);
NavigationManager.NavigateTo(NavigateUrl(Reload.Page));
StateHasChanged();
NavigationManager.NavigateTo(NavigateUrl());
}
catch (Exception ex)
{

View File

@ -115,7 +115,7 @@
moduleType.GetMethod("UpdateSettings").Invoke(settings, null); // method must be public in settings component
}
NavigationManager.NavigateTo(NavigateUrl(Reload.Page));
NavigationManager.NavigateTo(NavigateUrl());
}
}

View File

@ -315,7 +315,7 @@
await PageService.UpdatePageOrderAsync(page.SiteId, page.PageId, page.ParentId);
await logger.LogInformation("Page Added {Page}", page);
NavigationManager.NavigateTo(NavigateUrl(page.Path, Reload.Site));
NavigationManager.NavigateTo(NavigateUrl(page.Path));
}
else
{

View File

@ -400,7 +400,7 @@
}
await logger.LogInformation("Page Saved {Page}", page);
NavigationManager.NavigateTo(NavigateUrl(page.Path, Reload.Site));
NavigationManager.NavigateTo(NavigateUrl(page.Path));
}
else
{

View File

@ -31,7 +31,7 @@
Page.IsDeleted = true;
await PageService.UpdatePageAsync(Page);
await logger.LogInformation("Page Deleted {Page}", Page);
NavigationManager.NavigateTo(NavigateUrl("admin/pages", Reload.Site));
NavigationManager.NavigateTo(NavigateUrl("admin/pages"));
}
catch (Exception ex)
{

View File

@ -117,7 +117,7 @@
await logger.LogInformation("Page Restored {Page}", Page);
await Load();
StateHasChanged();
NavigationManager.NavigateTo(NavigateUrl(Reload.Site));
NavigationManager.NavigateTo(NavigateUrl());
}
catch (Exception ex)
{
@ -134,7 +134,7 @@
await logger.LogInformation("Page Permanently Deleted {Page}", Page);
await Load();
StateHasChanged();
NavigationManager.NavigateTo(NavigateUrl(Reload.Site));
NavigationManager.NavigateTo(NavigateUrl());
}
catch (Exception ex)
{

View File

@ -329,7 +329,7 @@
await logger.LogInformation("Site Saved {Site}", site);
NavigationManager.NavigateTo(NavigateUrl(Reload.Site));
NavigationManager.NavigateTo(NavigateUrl());
}
}
else

View File

@ -243,7 +243,7 @@
await Log(Alias, LogLevel.Information, "Edit", null, "Site Saved {Site}", site);
NavigationManager.NavigateTo(NavigateUrl(Reload.Site));
NavigationManager.NavigateTo(NavigateUrl());
}
}
else

View File

@ -61,7 +61,7 @@ else
{
await AliasService.DeleteAliasAsync(alias.AliasId);
}
NavigationManager.NavigateTo(NavigateUrl(Reload.Site));
NavigationManager.NavigateTo(NavigateUrl());
}
else
{

View File

@ -61,7 +61,7 @@
private async Task InstallThemes()
{
await ThemeService.InstallThemesAsync();
NavigationManager.NavigateTo(NavigateUrl(Reload.Application));
NavigationManager.NavigateTo(NavigateUrl());
}
private async Task DownloadTheme(string packageid, string version)

View File

@ -66,13 +66,13 @@ else
await PackageService.DownloadPackageAsync(themename, version, "Themes");
await logger.LogInformation("Theme Downloaded {ThemeName} {Version}", themename, version);
await ThemeService.InstallThemesAsync();
NavigationManager.NavigateTo(NavigateUrl(Reload.Application));
NavigationManager.NavigateTo(NavigateUrl());
}
private async Task DeleteTheme(Theme Theme)
{
await ThemeService.DeleteThemeAsync(Theme.ThemeName);
await logger.LogInformation("Theme Deleted {Theme}", Theme);
NavigationManager.NavigateTo(NavigateUrl(Reload.Application));
NavigationManager.NavigateTo(NavigateUrl());
}
}

View File

@ -47,13 +47,13 @@
private async Task Upgrade()
{
await InstallationService.Upgrade();
NavigationManager.NavigateTo(NavigateUrl(Reload.Application));
NavigationManager.NavigateTo(NavigateUrl());
}
private async Task Download(string packageid, string version)
{
await PackageService.DownloadPackageAsync(packageid, version, "Framework");
await InstallationService.Upgrade();
NavigationManager.NavigateTo(NavigateUrl(Reload.Application));
NavigationManager.NavigateTo(NavigateUrl());
}
}

View File

@ -189,7 +189,7 @@
await htmltextservice.AddHtmlTextAsync(htmltext);
}
await logger.LogInformation("Html/Text Content Saved {HtmlText}", htmltext);
NavigationManager.NavigateTo(NavigateUrl(Reload.Page));
NavigationManager.NavigateTo(NavigateUrl());
}
catch (Exception ex)
{

View File

@ -1,4 +1,4 @@
namespace Oqtane.Shared
namespace Oqtane.Modules
{
public enum MessageType
{

View File

@ -2,9 +2,9 @@
using Oqtane.Shared;
using Oqtane.Models;
using System.Threading.Tasks;
using System.Linq;
using Oqtane.Services;
using System;
using Oqtane.UI;
namespace Oqtane.Modules
{
@ -49,29 +49,14 @@ namespace Oqtane.Modules
return NavigateUrl(PageState.Page.Path);
}
public string NavigateUrl(Reload reload)
{
return NavigateUrl(PageState.Page.Path, reload);
}
public string NavigateUrl(string path)
{
return NavigateUrl(path, "", Reload.None);
}
public string NavigateUrl(string path, Reload reload)
{
return NavigateUrl(path, "", reload);
return NavigateUrl(path, "");
}
public string NavigateUrl(string path, string parameters)
{
return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters, Reload.None);
}
public string NavigateUrl(string path, string parameters, Reload reload)
{
return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters, reload);
return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters);
}
public string EditUrl(string action)

View File

@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
using Oqtane.Models;
using Oqtane.Shared;
using Oqtane.UI;
namespace Oqtane.Services
{

View File

@ -2,8 +2,7 @@
using Microsoft.JSInterop;
using Oqtane.Shared;
using Oqtane.Models;
using System.Threading.Tasks;
using System.Linq;
using Oqtane.UI;
namespace Oqtane.Themes
{
@ -30,29 +29,14 @@ namespace Oqtane.Themes
return NavigateUrl(PageState.Page.Path);
}
public string NavigateUrl(Reload reload)
{
return NavigateUrl(PageState.Page.Path, reload);
}
public string NavigateUrl(string path)
{
return NavigateUrl(path, "", Reload.None);
}
public string NavigateUrl(string path, Reload reload)
{
return NavigateUrl(path, "", reload);
return NavigateUrl(path, "");
}
public string NavigateUrl(string path, string parameters)
{
return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters, Reload.None);
}
public string NavigateUrl(string path, string parameters, Reload reload)
{
return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters, reload);
return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters);
}
public string EditUrl(string action, string parameters)

View File

@ -29,9 +29,12 @@
<button type="button" class="btn btn-primary btn-block mx-auto" @onclick=@(async () => Navigate("Admin"))>Admin Dashboard</button>
</div>
</div>
<hr class="app-rule" />
<div class="row">
<div class="col">
<label class="control-label">Page: </label>
<div class="col text-center">
<label class="control-label">Page Management: </label>
</div>
</div>
<div class="row">
@ -69,10 +72,10 @@
</div>
</div>
}
<hr class="app-rule"/>
<hr class="app-rule" />
<div class="row">
<div class="col">
<div class="col text-center">
<label for="Module" class="control-label">Module: </label>
<select class="form-control" @bind="@_moduleType">
<option value="new">Add New Module</option>
@ -121,17 +124,17 @@
</div>
</div>
<div class="row">
<div class="col">
<div class="col text-center">
<label for="Title" class="control-label">Title: </label>
<input type="text" name="Title" class="form-control" @bind="@_title"/>
<input type="text" name="Title" class="form-control" @bind="@_title" />
</div>
</div>
<div class="row">
<div class="col">
<div class="col text-center">
<label for="Pane" class="control-label">Pane: </label>
<select class="form-control" @bind="@_pane">
<option value="">&lt;Select Pane&gt;</option>
@foreach (string pane in PageState.Page.Panes.Split(new[] {';'}, StringSplitOptions.RemoveEmptyEntries))
@foreach (string pane in PageState.Page.Panes.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries))
{
<option value="@pane">@pane Pane</option>
}
@ -139,7 +142,7 @@
</div>
</div>
<div class="row">
<div class="col">
<div class="col text-center">
<label for="Container" class="control-label">Container: </label>
<select class="form-control" @bind="@_containerType">
@foreach (KeyValuePair<string, string> container in _containers)
@ -150,6 +153,8 @@
</div>
</div>
<br />
<button type="button" class="btn btn-primary btn-block mx-auto" @onclick="@AddModule">Add Module To Page</button>
@((MarkupString) _message)
</div>
@ -325,7 +330,7 @@
var pageModule = new PageModule
{
PageId = (_pageId == "-") ? PageState.Page.PageId : int.Parse(_pageId),
PageId = PageState.Page.PageId,
ModuleId = int.Parse(_moduleId),
Title = _title
};
@ -361,7 +366,7 @@
_pageId = "-";
_moduleId = "-";
NavigationManager.NavigateTo(NavigateUrl(Reload.Page));
NavigationManager.NavigateTo(NavigateUrl());
}
else
{
@ -386,7 +391,7 @@
{
PageState.EditMode = true;
}
NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "edit=" + ((PageState.EditMode) ? "1" : "0"), Reload.Page));
NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "edit=" + ((PageState.EditMode) ? "1" : "0")));
}
else
{
@ -394,7 +399,7 @@
{
await PageService.AddPageAsync(PageState.Page.PageId, PageState.User.UserId);
PageState.EditMode = true;
NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "edit=" + ((PageState.EditMode) ? "1" : "0"), Reload.Page));
NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "edit=" + ((PageState.EditMode) ? "1" : "0")));
}
}
}
@ -469,13 +474,13 @@
page.IsDeleted = true;
await PageService.UpdatePageAsync(page);
await logger.Log(page.PageId, null, PageState.User.UserId, GetType().AssemblyQualifiedName, "ControlPanel", LogFunction.Delete, LogLevel.Information, null, "Page Deleted {Page}", page);
NavigationManager.NavigateTo(NavigateUrl("", Reload.Site));
NavigationManager.NavigateTo(NavigateUrl(""));
}
else // personalized page
{
await PageService.DeletePageAsync(page.PageId);
await logger.Log(page.PageId, null, PageState.User.UserId, GetType().AssemblyQualifiedName, "ControlPanel", LogFunction.Delete, LogLevel.Information, null, "Page Deleted {Page}", page);
NavigationManager.NavigateTo(NavigateUrl(Reload.Page));
NavigationManager.NavigateTo(NavigateUrl());
}
}
catch (Exception ex)

View File

@ -46,7 +46,7 @@
{
// client-side Blazor
authstateprovider.NotifyAuthenticationChanged();
NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "logout", Reload.Site));
NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "logout"));
}
}
}

View File

@ -70,7 +70,7 @@
{
PageModule pagemodule = await PageModuleService.GetPageModuleAsync(ModuleState.PageModuleId);
string url = NavigateUrl(Reload.Page);
string url = NavigateUrl();
switch (action)
{
case "<<":

View File

@ -1,5 +1,6 @@
using Microsoft.AspNetCore.Components;
using Oqtane.Shared;
using Oqtane.UI;
namespace Oqtane.Themes
{

View File

@ -1,6 +1,7 @@
using Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
using Oqtane.Shared;
using Oqtane.UI;
using System.Threading.Tasks;
namespace Oqtane.Themes
@ -34,29 +35,14 @@ namespace Oqtane.Themes
return NavigateUrl(PageState.Page.Path);
}
public string NavigateUrl(Reload reload)
{
return NavigateUrl(PageState.Page.Path, reload);
}
public string NavigateUrl(string path)
{
return NavigateUrl(path, "", Reload.None);
}
public string NavigateUrl(string path, Reload reload)
{
return NavigateUrl(path, "", reload);
return NavigateUrl(path, "");
}
public string NavigateUrl(string path, string parameters)
{
return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters, Reload.None);
}
public string NavigateUrl(string path, string parameters, Reload reload)
{
return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters, reload);
return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters);
}
public string EditUrl(int moduleid, string action)

View File

@ -1,5 +1,6 @@
using Microsoft.AspNetCore.Components;
using Oqtane.Shared;
using Oqtane.UI;
namespace Oqtane.Themes
{
@ -13,29 +14,14 @@ namespace Oqtane.Themes
return NavigateUrl(PageState.Page.Path);
}
public string NavigateUrl(Reload reload)
{
return NavigateUrl(PageState.Page.Path, reload);
}
public string NavigateUrl(string path)
{
return NavigateUrl(path, "", Reload.None);
}
public string NavigateUrl(string path, Reload reload)
{
return NavigateUrl(path, "", reload);
return NavigateUrl(path, "");
}
public string NavigateUrl(string path, string parameters)
{
return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters, Reload.None);
}
public string NavigateUrl(string path, string parameters, Reload reload)
{
return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters, reload);
return Utilities.NavigateUrl(PageState.Alias.Path, path, parameters);
}
public string EditUrl(int moduleid, string action)

View File

@ -1,4 +1,4 @@
@namespace Oqtane.Shared
@namespace Oqtane.UI
<CascadingValue Value="@ModuleState">
@DynamicComponent

View File

@ -1,4 +1,4 @@
@namespace Oqtane.Shared
@namespace Oqtane.UI
@inject NavigationManager NavigationManager
@inject IInstallationService InstallationService
@inject ISiteService SiteService

View File

@ -3,7 +3,7 @@ using Microsoft.JSInterop;
using System;
using System.Threading.Tasks;
namespace Oqtane.Shared
namespace Oqtane.UI
{
public class Interop
{

View File

@ -1,4 +1,4 @@
@namespace Oqtane.Shared
@namespace Oqtane.UI
<ModuleMessage Message="@message" Type="MessageType.Error" />
<CascadingValue Value="this">

View File

@ -2,7 +2,7 @@
using System.Collections.Generic;
using Oqtane.Models;
namespace Oqtane.Shared
namespace Oqtane.UI
{
public class PageState
{

View File

@ -1,4 +1,4 @@
@namespace Oqtane.Shared
@namespace Oqtane.UI
@inject IUserService UserService
@inject IModuleService ModuleService
@inject IModuleDefinitionService ModuleDefinitionService

View File

@ -1,4 +1,4 @@
@namespace Oqtane.Shared
@namespace Oqtane.UI
@DynamicComponent

View File

@ -1,4 +1,4 @@
namespace Oqtane.Shared
namespace Oqtane.UI
{
public enum Reload
{

View File

@ -2,7 +2,7 @@
using Microsoft.JSInterop;
using System.Threading.Tasks;
namespace Oqtane.Modules.Controls
namespace Oqtane.UI
{
public static class RichTextEditorInterop
{

View File

@ -1,4 +1,4 @@
@namespace Oqtane.Shared
@namespace Oqtane.UI
@inject AuthenticationStateProvider AuthenticationStateProvider
@inject SiteState SiteState
@inject NavigationManager NavigationManager
@ -92,10 +92,6 @@
querystring = ParseQueryString(path);
path = path.Substring(0, path.IndexOf("?"));
}
if (querystring.ContainsKey("reload"))
{
reload = (Reload)int.Parse(querystring["reload"]);
}
if (PageState != null)
{

View File

@ -1,4 +1,4 @@
@namespace Oqtane.Shared
@namespace Oqtane.UI
@inject IJSRuntime jsRuntime
@DynamicComponent

View File

@ -16,4 +16,5 @@
@using Oqtane.Services
@using Oqtane.Shared
@using Oqtane.Themes
@using Oqtane.Themes.Controls
@using Oqtane.Themes.Controls
@using Oqtane.UI

View File

@ -130,6 +130,7 @@ namespace Oqtane.Controllers
page.IsPersonalizable = false;
page.UserId = int.Parse(userid);
page = _pages.AddPage(page);
_syncManager.AddSyncEvent("Site", page.SiteId);
// copy modules
List<PageModule> pagemodules = _pageModules.GetPageModules(page.SiteId).ToList();
@ -173,6 +174,7 @@ namespace Oqtane.Controllers
if (ModelState.IsValid && _userPermissions.IsAuthorized(User, "Page", Page.PageId, "Edit"))
{
Page = _pages.UpdatePage(Page);
_syncManager.AddSyncEvent("Site", Page.SiteId);
_logger.Log(LogLevel.Information, this, LogFunction.Update, "Page Updated {Page}", Page);
}
else
@ -202,6 +204,7 @@ namespace Oqtane.Controllers
}
order += 2;
}
_syncManager.AddSyncEvent("Site", siteid);
_logger.Log(LogLevel.Information, this, LogFunction.Update, "Page Order Updated {SiteId} {PageId} {ParentId}", siteid, pageid, parentid);
}
else
@ -216,14 +219,16 @@ namespace Oqtane.Controllers
[Authorize(Roles = Constants.RegisteredRole)]
public void Delete(int id)
{
if (_userPermissions.IsAuthorized(User, "Page", id, "Edit"))
Page page = _pages.GetPage(id);
if (_userPermissions.IsAuthorized(User, "Page", page.PageId, "Edit"))
{
_pages.DeletePage(id);
_logger.Log(LogLevel.Information, this, LogFunction.Delete, "Page Deleted {PageId}", id);
_pages.DeletePage(page.PageId);
_syncManager.AddSyncEvent("Site", page.SiteId);
_logger.Log(LogLevel.Information, this, LogFunction.Delete, "Page Deleted {PageId}", page.PageId);
}
else
{
_logger.Log(LogLevel.Error, this, LogFunction.Delete, "User Not Authorized To Delete Page {PageId}", id);
_logger.Log(LogLevel.Error, this, LogFunction.Delete, "User Not Authorized To Delete Page {PageId}", page.PageId);
HttpContext.Response.StatusCode = 401;
}
}

View File

@ -16,13 +16,15 @@ namespace Oqtane.Controllers
private readonly IPageModuleRepository _pageModules;
private readonly IModuleRepository _modules;
private readonly IUserPermissions _userPermissions;
private readonly ISyncManager _syncManager;
private readonly ILogManager _logger;
public PageModuleController(IPageModuleRepository pageModules, IModuleRepository modules, IUserPermissions userPermissions, ILogManager logger)
public PageModuleController(IPageModuleRepository pageModules, IModuleRepository modules, IUserPermissions userPermissions, ISyncManager syncManager, ILogManager logger)
{
_pageModules = pageModules;
_modules = modules;
_userPermissions = userPermissions;
_syncManager = syncManager;
_logger = logger;
}
@ -68,6 +70,7 @@ namespace Oqtane.Controllers
if (ModelState.IsValid && _userPermissions.IsAuthorized(User, "Page", PageModule.PageId, "Edit"))
{
PageModule = _pageModules.AddPageModule(PageModule);
_syncManager.AddSyncEvent("Page", PageModule.PageId);
_logger.Log(LogLevel.Information, this, LogFunction.Create, "Page Module Added {PageModule}", PageModule);
}
else
@ -87,6 +90,7 @@ namespace Oqtane.Controllers
if (ModelState.IsValid && _userPermissions.IsAuthorized(User, "Module", PageModule.ModuleId, "Edit"))
{
PageModule = _pageModules.UpdatePageModule(PageModule);
_syncManager.AddSyncEvent("Page", PageModule.PageId);
_logger.Log(LogLevel.Information, this, LogFunction.Update, "Page Module Updated {PageModule}", PageModule);
}
else
@ -116,6 +120,7 @@ namespace Oqtane.Controllers
}
order += 2;
}
_syncManager.AddSyncEvent("Page", pageid);
_logger.Log(LogLevel.Information, this, LogFunction.Update, "Page Module Order Updated {PageId} {Pane}", pageid, pane);
}
else
@ -134,6 +139,7 @@ namespace Oqtane.Controllers
if (_userPermissions.IsAuthorized(User, "Page", pagemodule.PageId, "Edit"))
{
_pageModules.DeletePageModule(id);
_syncManager.AddSyncEvent("Page", pagemodule.PageId);
_logger.Log(LogLevel.Information, this, LogFunction.Delete, "Page Module Deleted {PageModuleId}", id);
}
else

View File

@ -17,13 +17,15 @@ namespace Oqtane.Controllers
private readonly ISiteRepository _sites;
private readonly ITenantResolver _tenants;
private readonly IWebHostEnvironment _environment;
private readonly ISyncManager _syncManager;
private readonly ILogManager _logger;
public SiteController(ISiteRepository sites, ITenantResolver tenants, IWebHostEnvironment environment, ILogManager logger)
public SiteController(ISiteRepository sites, ITenantResolver tenants, IWebHostEnvironment environment, ISyncManager syncManager, ILogManager logger)
{
_sites = sites;
_tenants = tenants;
_environment = environment;
_syncManager = syncManager;
_logger = logger;
}
@ -77,6 +79,7 @@ namespace Oqtane.Controllers
if (ModelState.IsValid)
{
Site = _sites.UpdateSite(Site);
_syncManager.AddSyncEvent("Site", Site.SiteId);
_logger.Log(Site.SiteId, LogLevel.Information, this, LogFunction.Update, "Site Updated {Site}", Site);
}
return Site;

View File

@ -27,9 +27,10 @@ namespace Oqtane.Controllers
private readonly ITenantResolver _tenants;
private readonly INotificationRepository _notifications;
private readonly IFolderRepository _folders;
private readonly ISyncManager _syncManager;
private readonly ILogManager _logger;
public UserController(IUserRepository users, IRoleRepository roles, IUserRoleRepository userRoles, UserManager<IdentityUser> identityUserManager, SignInManager<IdentityUser> identitySignInManager, ITenantResolver tenants, INotificationRepository notifications, IFolderRepository folders, ILogManager logger)
public UserController(IUserRepository users, IRoleRepository roles, IUserRoleRepository userRoles, UserManager<IdentityUser> identityUserManager, SignInManager<IdentityUser> identitySignInManager, ITenantResolver tenants, INotificationRepository notifications, IFolderRepository folders, ISyncManager syncManager, ILogManager logger)
{
_users = users;
_roles = roles;
@ -39,6 +40,7 @@ namespace Oqtane.Controllers
_tenants = tenants;
_folders = folders;
_notifications = notifications;
_syncManager = syncManager;
_logger = logger;
}
@ -185,6 +187,7 @@ namespace Oqtane.Controllers
}
}
User = _users.UpdateUser(User);
_syncManager.AddSyncEvent("User", User.UserId);
User.Password = ""; // remove sensitive information
_logger.Log(LogLevel.Information, this, LogFunction.Update, "User Updated {User}", User);
}
@ -240,6 +243,7 @@ namespace Oqtane.Controllers
user.LastLoginOn = DateTime.Now;
user.LastIPAddress = HttpContext.Connection.RemoteIpAddress.ToString();
_users.UpdateUser(user);
_syncManager.AddSyncEvent("User", User.UserId);
_logger.Log(LogLevel.Information, this, LogFunction.Security, "User Login Successful {Username}", User.Username);
if (SetCookie)
{
@ -268,6 +272,7 @@ namespace Oqtane.Controllers
public async Task Logout([FromBody] User User)
{
await HttpContext.SignOutAsync(IdentityConstants.ApplicationScheme);
_syncManager.AddSyncEvent("User", User.UserId);
_logger.Log(LogLevel.Information, this, LogFunction.Security, "User Logout {Username}", User.Username);
}

View File

@ -5,8 +5,8 @@
public const string PackageId = "Oqtane.Framework";
public const string Version = "0.0.1";
public const string PageComponent = "Oqtane.Shared.ThemeBuilder, Oqtane.Client";
public const string ContainerComponent = "Oqtane.Shared.ContainerBuilder, Oqtane.Client";
public const string PageComponent = "Oqtane.UI.ThemeBuilder, Oqtane.Client";
public const string ContainerComponent = "Oqtane.UI.ContainerBuilder, Oqtane.Client";
public const string DefaultTheme = "Oqtane.Themes.BlazorTheme.Default, Oqtane.Client";
public const string DefaultLayout = "";

View File

@ -2,7 +2,7 @@
namespace Oqtane.Shared
{
// this class is used for passing state between Blazor components and Services
// this class is used for passing state between components and services, or controllers and repositories
public class SiteState
{
public Alias Alias { get; set; }

View File

@ -5,7 +5,7 @@ namespace Oqtane.Shared
{
public class Utilities
{
public static string NavigateUrl(string alias, string path, string parameters, Reload reload)
public static string NavigateUrl(string alias, string path, string parameters)
{
string url = "";
if (alias != "")
@ -24,10 +24,6 @@ namespace Oqtane.Shared
{
url += "?" + parameters;
}
if (reload != Reload.None)
{
url += ((string.IsNullOrEmpty(parameters)) ? "?" : "&") + "reload=" + ((int)reload).ToString();
}
if (!url.StartsWith("/"))
{
url = "/" + url;
@ -37,7 +33,7 @@ namespace Oqtane.Shared
public static string EditUrl(string alias, string path, int moduleid, string action, string parameters)
{
string url = NavigateUrl(alias, path, "", Reload.None);
string url = NavigateUrl(alias, path, "");
if (url == "/") url = "";
if (moduleid != -1)
{