From d1f50f12afdae0ae8d4f14d57ea9c447c2ab2bb6 Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Tue, 6 Sep 2022 10:50:53 -0400 Subject: [PATCH] Fix #2399 - page paths not being validated for deleted pages --- Oqtane.Client/Modules/Admin/Login/Index.razor | 3 ++- Oqtane.Client/Modules/Admin/Pages/Add.razor | 27 +++++-------------- Oqtane.Client/Modules/Admin/Pages/Edit.razor | 16 +++++------ .../Modules/Admin/RecycleBin/Index.razor | 2 +- .../Resources/Modules/Admin/Pages/Add.resx | 7 ++--- .../Resources/Modules/Admin/Pages/Edit.resx | 2 +- Oqtane.Maui/MauiProgram.cs | 4 ++- .../AutoValidateAntiforgeryTokenFilter.cs | 8 +++++- 8 files changed, 30 insertions(+), 39 deletions(-) diff --git a/Oqtane.Client/Modules/Admin/Login/Index.razor b/Oqtane.Client/Modules/Admin/Login/Index.razor index 4e879108..d237190b 100644 --- a/Oqtane.Client/Modules/Admin/Login/Index.razor +++ b/Oqtane.Client/Modules/Admin/Login/Index.razor @@ -202,7 +202,8 @@ if (hybrid) { // hybrid apps utilize an interactive login - var authstateprovider = (IdentityAuthenticationStateProvider)ServiceProvider.GetService(typeof(IdentityAuthenticationStateProvider)); + var authstateprovider = (IdentityAuthenticationStateProvider)ServiceProvider + .GetService(typeof(IdentityAuthenticationStateProvider)); authstateprovider.NotifyAuthenticationChanged(); NavigationManager.NavigateTo(NavigateUrl(_returnUrl, true)); } diff --git a/Oqtane.Client/Modules/Admin/Pages/Add.razor b/Oqtane.Client/Modules/Admin/Pages/Add.razor index f3802045..de004f44 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Add.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Add.razor @@ -24,7 +24,7 @@
- @foreach (Page page in _pageList) + @foreach (Page page in PageState.Pages) { if (page.PageId != _pageId) { @@ -201,7 +201,6 @@ private List _themeList; private List _themes = new List(); private List _containers = new List(); - private List _pageList; private List _pageModules; private int _pageId; private string _name; @@ -238,7 +237,6 @@ { try { - _pageList = PageState.Pages; _children = PageState.Pages.Where(item => item.ParentId == null).ToList(); _themeList = await ThemeService.GetThemesAsync(); _themes = ThemeService.GetThemeControls(_themeList); @@ -435,6 +433,10 @@ } if (_path.Contains("/")) { + if (_path.EndsWith("/") && _path != "/") + { + _path = _path.Substring(0, _path.Length - 1); + } _path = _path.Substring(_path.LastIndexOf("/") + 1); } @@ -457,7 +459,8 @@ } } - if (!PagePathIsUnique(page.Path, page.SiteId, page.PageId, _pageList)) + var _pages = await PageService.GetPagesAsync(PageState.Site.SiteId); + if (_pages.Any(item => item.Path == page.Path && item.PageId != page.PageId)) { AddModuleMessage(string.Format(Localizer["Mesage.Page.PathExists"], _path), MessageType.Warning); return; @@ -573,9 +576,4 @@ NavigationManager.NavigateTo(NavigateUrl()); } } - - private static bool PagePathIsUnique(string pagePath, int siteId, int pageId, List existingPages) - { - return !existingPages.Any(page => page.SiteId == siteId && page.Path == pagePath && page.PageId != pageId); - } } diff --git a/Oqtane.Client/Modules/Admin/RecycleBin/Index.razor b/Oqtane.Client/Modules/Admin/RecycleBin/Index.razor index b4588da3..34a46b6c 100644 --- a/Oqtane.Client/Modules/Admin/RecycleBin/Index.razor +++ b/Oqtane.Client/Modules/Admin/RecycleBin/Index.razor @@ -58,7 +58,7 @@ - @PageState.Pages.Find(item => item.PageId == context.PageId).Name + @_pages.Find(item => item.PageId == context.PageId).Name @context.Title @context.DeletedBy @context.DeletedOn diff --git a/Oqtane.Client/Resources/Modules/Admin/Pages/Add.resx b/Oqtane.Client/Resources/Modules/Admin/Pages/Add.resx index 25b893b7..3b2128c2 100644 --- a/Oqtane.Client/Resources/Modules/Admin/Pages/Add.resx +++ b/Oqtane.Client/Resources/Modules/Admin/Pages/Add.resx @@ -1,4 +1,4 @@ - +