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