From b9c007998e40e25b11f20a50c1f01b5239f762cc Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Fri, 2 Aug 2019 15:51:47 -0400 Subject: [PATCH] Improved page reload efficiency, refactored NavigateUrl and EditUrl helpers, added antiforgery token and returnurl to Logout scenario, fixed PageModule service call api url, modified rendering engine to allow for component differentiation --- Oqtane.Client/Modules/Admin/Login/Index.razor | 5 +- .../Modules/Admin/ModuleSettings/Index.razor | 3 +- Oqtane.Client/Modules/Admin/Pages/Add.razor | 3 +- .../Modules/Admin/Pages/Delete.razor | 3 +- .../Modules/Admin/Register/Index.razor | 35 ++++---- Oqtane.Client/Modules/HtmlText/Edit.razor | 3 +- Oqtane.Client/Modules/ModuleBase.cs | 33 ++++---- Oqtane.Client/Services/PageModuleService.cs | 2 +- Oqtane.Client/Shared/Constants.cs | 4 + Oqtane.Client/Shared/Container.razor | 30 ++++--- Oqtane.Client/Shared/ModuleInstance.razor | 2 +- Oqtane.Client/Shared/PageState.cs | 1 + Oqtane.Client/Shared/SiteRouter.razor | 80 ++++++++++--------- Oqtane.Client/Shared/Utilities.cs | 61 ++++++-------- Oqtane.Client/Themes/ContainerBase.cs | 34 ++++---- .../Themes/Controls/ControlPanel.razor | 10 ++- Oqtane.Client/Themes/Controls/Login.razor | 14 +++- .../Themes/Controls/ModuleActions.razor | 9 ++- Oqtane.Client/Themes/ThemeBase.cs | 14 +--- Oqtane.Client/Themes/ThemeObjectBase.cs | 23 +++--- Oqtane.Server/Pages/Login.cshtml.cs | 7 +- Oqtane.Server/Pages/Logout.cshtml.cs | 10 ++- Oqtane.Server/Scripts/Tenant.sql | 18 +++++ 23 files changed, 231 insertions(+), 173 deletions(-) diff --git a/Oqtane.Client/Modules/Admin/Login/Index.razor b/Oqtane.Client/Modules/Admin/Login/Index.razor index c381e244..b419ab98 100644 --- a/Oqtane.Client/Modules/Admin/Login/Index.razor +++ b/Oqtane.Client/Modules/Admin/Login/Index.razor @@ -73,7 +73,8 @@ private async Task Login() { // client-side Blazor authstateprovider.NotifyAuthenticationChanged(); - UriHelper.NavigateTo(NavigateUrl(ReturnUrl, true)); + PageState.Reload = Constants.ReloadPage; + UriHelper.NavigateTo(NavigateUrl(ReturnUrl)); } } else @@ -85,6 +86,6 @@ private async Task Login() private void Cancel() { string ReturnUrl = PageState.QueryString["returnurl"]; - UriHelper.NavigateTo(NavigateUrl(ReturnUrl)); + UriHelper.NavigateTo(ReturnUrl); } } diff --git a/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor b/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor index 6c0f1b0f..a6e472d4 100644 --- a/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor +++ b/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor @@ -104,6 +104,7 @@ pagemodule.ContainerType = containertype; await PageModuleService.UpdatePageModuleAsync(pagemodule); - UriHelper.NavigateTo(NavigateUrl(true)); + PageState.Reload = Constants.ReloadPage; + UriHelper.NavigateTo(NavigateUrl()); } } diff --git a/Oqtane.Client/Modules/Admin/Pages/Add.razor b/Oqtane.Client/Modules/Admin/Pages/Add.razor index 0a719364..2337a59e 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Add.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Add.razor @@ -170,6 +170,7 @@ p.ViewPermissions = viewpermissions; p.EditPermissions = editpermissions; await PageService.AddPageAsync(p); - UriHelper.NavigateTo(NavigateUrl(path, true)); + PageState.Reload = Constants.ReloadSite; + UriHelper.NavigateTo(NavigateUrl(path)); } } diff --git a/Oqtane.Client/Modules/Admin/Pages/Delete.razor b/Oqtane.Client/Modules/Admin/Pages/Delete.razor index 05f8360f..964b1f32 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Delete.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Delete.razor @@ -157,6 +157,7 @@ private async Task DeletePage() { await PageService.DeletePageAsync(Int32.Parse(PageState.QueryString["id"])); - UriHelper.NavigateTo(NavigateUrl("", true)); + PageState.Reload = Constants.ReloadSite; + UriHelper.NavigateTo(NavigateUrl()); } } diff --git a/Oqtane.Client/Modules/Admin/Register/Index.razor b/Oqtane.Client/Modules/Admin/Register/Index.razor index d2380ba2..4a5a680f 100644 --- a/Oqtane.Client/Modules/Admin/Register/Index.razor +++ b/Oqtane.Client/Modules/Admin/Register/Index.razor @@ -16,24 +16,29 @@ - Cancel + @code { -public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Anonymous; } } + public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Anonymous; } } -public string Username { get; set; } = ""; -public string Password { get; set; } = ""; + public string Username { get; set; } = ""; + public string Password { get; set; } = ""; -private async Task RegisterUser() -{ - User user = new User(); - user.Username = Username; - user.DisplayName = Username; - user.Roles = "Administrators;"; - user.IsSuperUser = false; - user.Password = Password; - await UserService.AddUserAsync(user); - UriHelper.NavigateTo(""); -} + private async Task RegisterUser() + { + User user = new User(); + user.Username = Username; + user.DisplayName = Username; + user.Roles = "Administrators;"; + user.IsSuperUser = false; + user.Password = Password; + await UserService.AddUserAsync(user); + UriHelper.NavigateTo(""); + } + + private void Cancel() + { + UriHelper.NavigateTo(NavigateUrl("")); // navigate to home + } } diff --git a/Oqtane.Client/Modules/HtmlText/Edit.razor b/Oqtane.Client/Modules/HtmlText/Edit.razor index 0214db4c..2668df87 100644 --- a/Oqtane.Client/Modules/HtmlText/Edit.razor +++ b/Oqtane.Client/Modules/HtmlText/Edit.razor @@ -57,6 +57,7 @@ htmltext.Content = content; await htmltextservice.AddHtmlTextAsync(htmltext); } - UriHelper.NavigateTo(NavigateUrl(true)); + PageState.Reload = Constants.ReloadPage; + UriHelper.NavigateTo(NavigateUrl()); } } diff --git a/Oqtane.Client/Modules/ModuleBase.cs b/Oqtane.Client/Modules/ModuleBase.cs index 80fc318b..d654eabd 100644 --- a/Oqtane.Client/Modules/ModuleBase.cs +++ b/Oqtane.Client/Modules/ModuleBase.cs @@ -20,32 +20,37 @@ namespace Oqtane.Modules public string NavigateUrl() { - return Utilities.NavigateUrl(PageState); - } - - public string NavigateUrl(bool reload) - { - return Utilities.NavigateUrl(PageState, reload); + return NavigateUrl(PageState.Page.Path); } public string NavigateUrl(string path) { - return Utilities.NavigateUrl(PageState, path); - } - - public string NavigateUrl(string path, bool reload) - { - return Utilities.NavigateUrl(PageState, path, reload); + return Utilities.NavigateUrl(PageState.Alias.Path, path); } public string EditUrl(string action) { - return Utilities.EditUrl(PageState, ModuleState, action, ""); + return EditUrl(ModuleState.ModuleId, action); } public string EditUrl(string action, string parameters) { - return Utilities.EditUrl(PageState, ModuleState, action, parameters); + return EditUrl(ModuleState.ModuleId, action, parameters); + } + + public string EditUrl(int moduleid, string action) + { + return EditUrl(moduleid, action, ""); + } + + public string EditUrl(int moduleid, string action, string parameters) + { + return EditUrl(PageState.Page.Path, moduleid, action, parameters); + } + + public string EditUrl(string path, int moduleid, string action, string parameters) + { + return Utilities.EditUrl(PageState.Alias.Path, path, moduleid, action, parameters); } } } diff --git a/Oqtane.Client/Services/PageModuleService.cs b/Oqtane.Client/Services/PageModuleService.cs index 8a65de2d..65ea4b9f 100644 --- a/Oqtane.Client/Services/PageModuleService.cs +++ b/Oqtane.Client/Services/PageModuleService.cs @@ -23,7 +23,7 @@ namespace Oqtane.Services private string apiurl { - get { return CreateApiUrl(sitestate.Alias, "PageModule", urihelper.GetAbsoluteUri()); } + get { return CreateApiUrl(sitestate.Alias, urihelper.GetAbsoluteUri(), "PageModule"); } } public async Task> GetPageModulesAsync() diff --git a/Oqtane.Client/Shared/Constants.cs b/Oqtane.Client/Shared/Constants.cs index 54d2d35f..80d3070a 100644 --- a/Oqtane.Client/Shared/Constants.cs +++ b/Oqtane.Client/Shared/Constants.cs @@ -13,5 +13,9 @@ public const string AllUsersRole = "All Users"; public const string AdminRole = "Administrators"; + + public const int ReloadApplication = 3; + public const int ReloadSite = 2; + public const int ReloadPage = 1; } } diff --git a/Oqtane.Client/Shared/Container.razor b/Oqtane.Client/Shared/Container.razor index 9d309925..0efcdcc3 100644 --- a/Oqtane.Client/Shared/Container.razor +++ b/Oqtane.Client/Shared/Container.razor @@ -21,26 +21,32 @@ { DynamicComponent = builder => { - Type containerType = Type.GetType(container); - if (containerType != null) + if (ModuleState != null) { - builder.OpenComponent(0, containerType); - builder.CloseComponent(); - } - else - { - // container does not exist with type specified + Type containerType = Type.GetType(container); + if (containerType != null) + { + builder.OpenComponent(ModuleState.ModuleId, containerType); // set sequence to moduleid so that component tree is able to differentiate + builder.CloseComponent(); + } + else + { + // container does not exist with type specified + } } }; } protected override Task OnParametersSetAsync() { - ModuleState = Module; // passed in from Pane component - container = ModuleState.ContainerType; - if (PageState.ModuleId != -1 && PageState.Control != "") + if (PageState.Page.PageId == Module.PageId) { - container = Constants.DefaultAdminContainer; + ModuleState = Module; // passed in from Pane component + container = ModuleState.ContainerType; + if (PageState.ModuleId != -1 && PageState.Control != "") + { + container = Constants.DefaultAdminContainer; + } } return Task.CompletedTask; } diff --git a/Oqtane.Client/Shared/ModuleInstance.razor b/Oqtane.Client/Shared/ModuleInstance.razor index 8a2513a1..a1fb24ab 100644 --- a/Oqtane.Client/Shared/ModuleInstance.razor +++ b/Oqtane.Client/Shared/ModuleInstance.razor @@ -24,7 +24,7 @@ Type moduleType = Type.GetType(typename); if (moduleType != null) { - builder.OpenComponent(0, moduleType); + builder.OpenComponent(ModuleState.ModuleId, moduleType); // set sequence to moduleid so that component tree is able to differentiate builder.CloseComponent(); } else diff --git a/Oqtane.Client/Shared/PageState.cs b/Oqtane.Client/Shared/PageState.cs index 419b92ad..1de78738 100644 --- a/Oqtane.Client/Shared/PageState.cs +++ b/Oqtane.Client/Shared/PageState.cs @@ -19,5 +19,6 @@ namespace Oqtane.Shared public Dictionary QueryString { get; set; } public int ModuleId { get; set; } public string Control { get; set; } + public int Reload { get; set; } } } diff --git a/Oqtane.Client/Shared/SiteRouter.razor b/Oqtane.Client/Shared/SiteRouter.razor index 31259eae..edd0ff7e 100644 --- a/Oqtane.Client/Shared/SiteRouter.razor +++ b/Oqtane.Client/Shared/SiteRouter.razor @@ -41,7 +41,7 @@ DynamicComponent = builder => { - if (pagestate != null) + if (PageState != null) { builder.OpenComponent(0, Type.GetType(Constants.DefaultPage)); builder.CloseComponent(); @@ -75,38 +75,54 @@ List modules; int moduleid = -1; string control = ""; + int reload = 0; - bool reload = false; - if (PageState == null) + if (PageState != null) { + reload = PageState.Reload; + } + + if (PageState == null || reload == Constants.ReloadApplication) + { + moduledefinitions = await ModuleDefinitionService.GetModuleDefinitionsAsync(); + themes = await ThemeService.GetThemesAsync(); aliases = await AliasService.GetAliasesAsync(); alias = null; } else { + moduledefinitions = PageState.ModuleDefinitions; + themes = PageState.Themes; aliases = PageState.Aliases; alias = PageState.Alias; } + + // check if site has changed if (alias == null || GetAlias(_absoluteUri, aliases).Name != alias.Name) { alias = GetAlias(_absoluteUri, aliases); SiteState.Alias = alias; // set state for services - reload = true; + reload = Constants.ReloadSite; } - if (PageState == null || reload == true) + if (PageState == null || reload <= Constants.ReloadSite) { - moduledefinitions = await ModuleDefinitionService.GetModuleDefinitionsAsync(); - themes = await ThemeService.GetThemesAsync(); site = await SiteService.GetSiteAsync(alias.SiteId); } else { - moduledefinitions = PageState.ModuleDefinitions; - themes = PageState.Themes; site = PageState.Site; } - if (site != null || reload == true) + if (site != null) { + if (PageState == null || reload >= Constants.ReloadSite) + { + pages = await PageService.GetPagesAsync(site.SiteId); + } + else + { + pages = PageState.Pages; + } + // get Url path and querystring string path = new Uri(_absoluteUri).PathAndQuery.Substring(1); @@ -148,13 +164,23 @@ // remove trailing slash so it can be used as a key for Pages if (path.EndsWith("/")) path = path.Substring(0, path.Length - 1); - if (querystring.ContainsKey("reload")) + if (PageState == null || reload >= Constants.ReloadPage) { - reload = true; + page = pages.Where(item => item.Path == path).FirstOrDefault(); + } + else + { + page = PageState.Page; + } + // check if page has changed + if (page.Path != path) + { + page = pages.Where(item => item.Path == path).FirstOrDefault(); + reload = Constants.ReloadPage; } user = null; - if (PageState == null || reload == true) + if (PageState == null || reload >= Constants.ReloadPage) { var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync(); if (authState.User.Identity.IsAuthenticated) @@ -167,29 +193,6 @@ user = PageState.User; } - if (PageState == null || reload == true) - { - pages = await PageService.GetPagesAsync(site.SiteId); - } - else - { - pages = PageState.Pages; - } - - if (PageState == null || reload == true) - { - page = pages.Where(item => item.Path == path).FirstOrDefault(); - } - else - { - page = PageState.Page; - } - if (page.Path != path) - { - page = pages.Where(item => item.Path == path).FirstOrDefault(); - reload = true; - } - if (page != null) { // check if user is authorized to view page @@ -211,10 +214,10 @@ if (PageState != null && (PageState.ModuleId != pagestate.ModuleId || PageState.Control != pagestate.Control)) { - reload = true; + reload = Constants.ReloadPage; } - if (PageState == null || reload == true) + if (PageState == null || reload >= Constants.ReloadPage) { modules = await ModuleService.GetModulesAsync(page.PageId); modules = ProcessModules(modules, moduledefinitions, pagestate.Control, page.Panes); @@ -224,6 +227,7 @@ modules = PageState.Modules; } pagestate.Modules = modules; + pagestate.Reload = 0; OnStateChange?.Invoke(pagestate); } diff --git a/Oqtane.Client/Shared/Utilities.cs b/Oqtane.Client/Shared/Utilities.cs index b038c322..f9282acc 100644 --- a/Oqtane.Client/Shared/Utilities.cs +++ b/Oqtane.Client/Shared/Utilities.cs @@ -5,52 +5,37 @@ namespace Oqtane.Shared { public class Utilities { - public static string NavigateUrl(PageState pagestate) - { - return NavigateUrl(pagestate, pagestate.Page.Path, false); - } - public static string NavigateUrl(PageState pagestate, bool reload) + public static string NavigateUrl(string alias, string path) { - return NavigateUrl(pagestate, pagestate.Page.Path, reload); - } - - public static string NavigateUrl(PageState pagestate, string path) - { - return NavigateUrl(pagestate, path, false); - } - - public static string NavigateUrl(PageState pagestate, string path, bool reload) - { - string url = pagestate.Alias.Path + "/" + path; - if (reload) + string url = ""; + if (alias != "") { - if (url.Contains("?")) - { - url += "&reload=true"; - } - else - { - url += "?reload=true"; - } + url += alias + "/"; + } + if (path != "") + { + url += path + "/"; + } + if (!url.StartsWith("/")) + { + url = "/" + url; } return url; } - public static string EditUrl(PageState pagestate, Module modulestate, string action) + public static string EditUrl(string alias, string path, int moduleid, string action, string parameters) { - return EditUrl(pagestate, modulestate, action, ""); - } - - public static string EditUrl(PageState pagestate, Module modulestate, string action, string parameters) - { - string url = pagestate.Alias.Path; - if (pagestate.Page.Path != "") + string url = NavigateUrl(alias, path); + if ( url == "/" ) { - url += "/" + pagestate.Page.Path; + url = ""; } - url += "/" + modulestate.ModuleId.ToString(); - if (action != "") + if (moduleid != -1) + { + url += "/" + moduleid.ToString(); + } + if (moduleid != -1 && action != "") { url += "/" + action; } @@ -58,6 +43,10 @@ namespace Oqtane.Shared { url += "?" + parameters; } + if (!url.StartsWith("/")) + { + url = "/" + url; + } return url; } diff --git a/Oqtane.Client/Themes/ContainerBase.cs b/Oqtane.Client/Themes/ContainerBase.cs index d476b7b7..7eb915da 100644 --- a/Oqtane.Client/Themes/ContainerBase.cs +++ b/Oqtane.Client/Themes/ContainerBase.cs @@ -16,32 +16,38 @@ namespace Oqtane.Themes public string NavigateUrl() { - return Utilities.NavigateUrl(PageState); - } - - public string NavigateUrl(bool reload) - { - return Utilities.NavigateUrl(PageState, reload); + return NavigateUrl(PageState.Page.Path); } public string NavigateUrl(string path) { - return Utilities.NavigateUrl(PageState, path); - } - - public string NavigateUrl(string path, bool reload) - { - return Utilities.NavigateUrl(PageState, path, reload); + return Utilities.NavigateUrl(PageState.Alias.Path, path); } public string EditUrl(string action) { - return Utilities.EditUrl(PageState, ModuleState, action, ""); + return EditUrl(ModuleState.ModuleId, action); } public string EditUrl(string action, string parameters) { - return Utilities.EditUrl(PageState, ModuleState, action, parameters); + return EditUrl(ModuleState.ModuleId, action, parameters); } + + public string EditUrl(int moduleid, string action) + { + return EditUrl(moduleid, action, ""); + } + + public string EditUrl(int moduleid, string action, string parameters) + { + return EditUrl(PageState.Page.Path, moduleid, action, parameters); + } + + public string EditUrl(string path, int moduleid, string action, string parameters) + { + return Utilities.EditUrl(PageState.Alias.Path, path, moduleid, action, parameters); + } + } } diff --git a/Oqtane.Client/Themes/Controls/ControlPanel.razor b/Oqtane.Client/Themes/Controls/ControlPanel.razor index 45dc4d4a..b0e675f8 100644 --- a/Oqtane.Client/Themes/Controls/ControlPanel.razor +++ b/Oqtane.Client/Themes/Controls/ControlPanel.razor @@ -119,7 +119,9 @@ pagemodule.Order = 0; pagemodule.ContainerType = containertype; await PageModuleService.AddPageModuleAsync(pagemodule); - UriHelper.NavigateTo(NavigateUrl(true)); + + PageState.Reload = Constants.ReloadPage; + UriHelper.NavigateTo(NavigateUrl()); } private string PageUrl(string action) @@ -130,13 +132,13 @@ switch (action) { case "Add": - url = "admin/pages?mid=" + pagemanagementmoduleid.ToString() + "&ctl=" + action; + url = EditUrl("admin/pages", pagemanagementmoduleid, action, ""); break; case "Edit": - url = "admin/pages?mid=" + pagemanagementmoduleid.ToString() + "&ctl=" + action + "&id=" + PageState.Page.PageId.ToString(); + url = EditUrl("admin/pages", pagemanagementmoduleid, action, "id=" + PageState.Page.PageId.ToString()); break; case "Delete": - url = "admin/pages?mid=" + pagemanagementmoduleid.ToString() + "&ctl=" + action + "&id=" + PageState.Page.PageId.ToString(); + url = EditUrl("admin/pages", pagemanagementmoduleid, action, "id=" + PageState.Page.PageId.ToString()); break; } } diff --git a/Oqtane.Client/Themes/Controls/Login.razor b/Oqtane.Client/Themes/Controls/Login.razor index cae8a035..34492a17 100644 --- a/Oqtane.Client/Themes/Controls/Login.razor +++ b/Oqtane.Client/Themes/Controls/Login.razor @@ -26,7 +26,12 @@ @code { private void LoginUser() { - UriHelper.NavigateTo(NavigateUrl("login?returnurl=" + PageState.Page.Path)); + string returnurl = PageState.Alias.Path; + if (PageState.Page.Path != "/") + { + returnurl += "/" + PageState.Page.Path; + } + UriHelper.NavigateTo("login?returnurl=" + returnurl); } private async Task LogoutUser() @@ -38,13 +43,16 @@ { // server-side Blazor var interop = new Interop(jsRuntime); - await interop.SubmitForm("/logout/", ""); + string antiforgerytoken = await interop.GetElementByName("__RequestVerificationToken"); + var fields = new { __RequestVerificationToken = antiforgerytoken, returnurl = (PageState.Alias.Path + "/" + PageState.Page.Path) }; + await interop.SubmitForm("/logout/", fields); } else { // client-side Blazor authstateprovider.NotifyAuthenticationChanged(); - UriHelper.NavigateTo(NavigateUrl("login", true)); + PageState.Reload = Constants.ReloadPage; + UriHelper.NavigateTo(NavigateUrl()); } } } diff --git a/Oqtane.Client/Themes/Controls/ModuleActions.razor b/Oqtane.Client/Themes/Controls/ModuleActions.razor index bb60fe73..4d3e5ef3 100644 --- a/Oqtane.Client/Themes/Controls/ModuleActions.razor +++ b/Oqtane.Client/Themes/Controls/ModuleActions.razor @@ -1,6 +1,7 @@ @using Oqtane.Themes @using Oqtane.Services @using Oqtane.Models +@using Oqtane.Shared @inherits ContainerBase @inject IUriHelper UriHelper @inject IUserService UserService @@ -58,7 +59,7 @@ pagemodule.Order = ModuleState.Order; pagemodule.ContainerType = ModuleState.ContainerType; - string path = PageState.Page.Path + "?reload=true"; + string url = NavigateUrl(); switch (action) { case "up": @@ -70,8 +71,7 @@ await PageModuleService.UpdatePageModuleAsync(pagemodule); break; case "settings": - if (path == "") { path += "/"; } - path = PageState.Page.Path + "?mid=" + pagemodule.ModuleId.ToString() + "&ctl=Settings"; + url = EditUrl(pagemodule.ModuleId, "Settings"); break; case "delete": await PageModuleService.DeletePageModuleAsync(pagemodule.PageModuleId); @@ -81,7 +81,8 @@ await PageModuleService.UpdatePageModuleAsync(pagemodule); break; } - UriHelper.NavigateTo(NavigateUrl(path)); + PageState.Reload = Constants.ReloadPage; + UriHelper.NavigateTo(url); } public class ActionViewModel diff --git a/Oqtane.Client/Themes/ThemeBase.cs b/Oqtane.Client/Themes/ThemeBase.cs index d9190f0e..e922247e 100644 --- a/Oqtane.Client/Themes/ThemeBase.cs +++ b/Oqtane.Client/Themes/ThemeBase.cs @@ -12,22 +12,12 @@ namespace Oqtane.Themes public string NavigateUrl() { - return Utilities.NavigateUrl(PageState); - } - - public string NavigateUrl(bool reload) - { - return Utilities.NavigateUrl(PageState, reload); + return NavigateUrl(PageState.Page.Path); } public string NavigateUrl(string path) { - return Utilities.NavigateUrl(PageState, path); - } - - public string NavigateUrl(string path, bool reload) - { - return Utilities.NavigateUrl(PageState, path, reload); + return Utilities.NavigateUrl(PageState.Alias.Path, path); } } diff --git a/Oqtane.Client/Themes/ThemeObjectBase.cs b/Oqtane.Client/Themes/ThemeObjectBase.cs index 61402bc6..332f1889 100644 --- a/Oqtane.Client/Themes/ThemeObjectBase.cs +++ b/Oqtane.Client/Themes/ThemeObjectBase.cs @@ -10,22 +10,27 @@ namespace Oqtane.Themes public string NavigateUrl() { - return Utilities.NavigateUrl(PageState); - } - - public string NavigateUrl(bool reload) - { - return Utilities.NavigateUrl(PageState, reload); + return NavigateUrl(PageState.Page.Path); } public string NavigateUrl(string path) { - return Utilities.NavigateUrl(PageState, path); + return Utilities.NavigateUrl(PageState.Alias.Path, path); } - public string NavigateUrl(string path, bool reload) + public string EditUrl(int moduleid, string action) { - return Utilities.NavigateUrl(PageState, path, reload); + return EditUrl(moduleid, action, ""); + } + + public string EditUrl(int moduleid, string action, string parameters) + { + return EditUrl(PageState.Page.Path, moduleid, action, parameters); + } + + public string EditUrl(string path, int moduleid, string action, string parameters) + { + return Utilities.EditUrl(PageState.Alias.Path, path, moduleid, action, parameters); } } } diff --git a/Oqtane.Server/Pages/Login.cshtml.cs b/Oqtane.Server/Pages/Login.cshtml.cs index ed88df50..eb8399e5 100644 --- a/Oqtane.Server/Pages/Login.cshtml.cs +++ b/Oqtane.Server/Pages/Login.cshtml.cs @@ -46,7 +46,12 @@ namespace Oqtane.Pages await HttpContext.SignInAsync(IdentityConstants.ApplicationScheme, new ClaimsPrincipal(claimsIdentity), authProperties); } - return LocalRedirect(Url.Content("~/" + returnurl)); + string url = "~/"; + if (returnurl != "/") + { + url = Url.Content("~/" + returnurl); + } + return LocalRedirect(url); } } } \ No newline at end of file diff --git a/Oqtane.Server/Pages/Logout.cshtml.cs b/Oqtane.Server/Pages/Logout.cshtml.cs index f66575c4..95ec1a71 100644 --- a/Oqtane.Server/Pages/Logout.cshtml.cs +++ b/Oqtane.Server/Pages/Logout.cshtml.cs @@ -12,15 +12,19 @@ using Oqtane.Models; namespace Oqtane.Pages { - [IgnoreAntiforgeryToken(Order = 1001)] [AllowAnonymous] public class LogoutModel : PageModel { - public async Task OnPostAsync() + public async Task OnPostAsync(string returnurl) { await HttpContext.SignOutAsync(IdentityConstants.ApplicationScheme); - return LocalRedirect(Url.Content("~/")); + string url = "~/"; + if (returnurl != "/") + { + url = Url.Content("~/" + returnurl); + } + return LocalRedirect(url); } } } \ No newline at end of file diff --git a/Oqtane.Server/Scripts/Tenant.sql b/Oqtane.Server/Scripts/Tenant.sql index 38c866de..9b3a1a7d 100644 --- a/Oqtane.Server/Scripts/Tenant.sql +++ b/Oqtane.Server/Scripts/Tenant.sql @@ -183,6 +183,12 @@ GO INSERT [dbo].[Page] ([PageId], [SiteId], [Name], [Path], [ThemeType], [Icon], [Panes], [ViewPermissions], [EditPermissions], [ParentId], [Order], [IsNavigation], [LayoutType]) VALUES (13, 2, N'Page2', N'page2', N'Oqtane.Client.Themes.Theme2.Theme2, Oqtane.Client', N'oi-home', N'Top;Bottom', N'All Users', N'Administrators', NULL, 1, 1, N'') GO +INSERT [dbo].[Page] ([PageId], [SiteId], [Name], [Path], [ThemeType], [Icon], [Panes], [ViewPermissions], [EditPermissions], [ParentId], [Order], [IsNavigation], [LayoutType]) +VALUES (14, 2, N'Login', N'login', N'Oqtane.Client.Themes.Theme2.Theme2, Oqtane.Client', N'', N'Top;Bottom', N'All Users', N'Administrators', NULL, 1, 0, N'') +GO +INSERT [dbo].[Page] ([PageId], [SiteId], [Name], [Path], [ThemeType], [Icon], [Panes], [ViewPermissions], [EditPermissions], [ParentId], [Order], [IsNavigation], [LayoutType]) +VALUES (15, 2, N'Register', N'register', N'Oqtane.Client.Themes.Theme2.Theme2, Oqtane.Client', N'', N'Top;Bottom', N'All Users', N'Administrators', NULL, 1, 0, N'') +GO SET IDENTITY_INSERT [dbo].[Page] OFF GO @@ -239,6 +245,12 @@ GO INSERT [dbo].[Module] ([ModuleId], [SiteId], [ModuleDefinitionName], [ViewPermissions], [EditPermissions]) VALUES (17, 2, N'Oqtane.Client.Modules.HtmlText, Oqtane.Client', N'All Users', N'Administrators') GO +INSERT [dbo].[Module] ([ModuleId], [SiteId], [ModuleDefinitionName], [ViewPermissions], [EditPermissions]) +VALUES (18, 2, N'Oqtane.Client.Modules.Admin.Login, Oqtane.Client', N'All Users', N'Administrators') +GO +INSERT [dbo].[Module] ([ModuleId], [SiteId], [ModuleDefinitionName], [ViewPermissions], [EditPermissions]) +VALUES (19, 2, N'Oqtane.Client.Modules.Admin.Register, Oqtane.Client', N'All Users', N'Administrators') +GO SET IDENTITY_INSERT [dbo].[Module] OFF GO @@ -295,6 +307,12 @@ GO INSERT [dbo].[PageModule] ([PageModuleId], [PageId], [ModuleId], [Title], [Pane], [Order], [ContainerType]) VALUES (17, 13, 17, N'Text', N'Top', 1, N'Oqtane.Client.Themes.Theme2.Container2, Oqtane.Client') GO +INSERT [dbo].[PageModule] ([PageModuleId], [PageId], [ModuleId], [Title], [Pane], [Order], [ContainerType]) +VALUES (18, 14, 18, N'Login', N'Top', 0, N'Oqtane.Client.Themes.Theme2.Container2, Oqtane.Client') +GO +INSERT [dbo].[PageModule] ([PageModuleId], [PageId], [ModuleId], [Title], [Pane], [Order], [ContainerType]) +VALUES (19, 15, 19, N'Register', N'Top', 0, N'Oqtane.Client.Themes.Theme2.Container2, Oqtane.Client') +GO SET IDENTITY_INSERT [dbo].[PageModule] OFF GO