From 4c579639b95d10a04411add20d9685d91ea35d69 Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Fri, 10 Mar 2023 13:57:13 -0500 Subject: [PATCH 1/5] avoid null reference error if list is null --- Oqtane.Client/Services/SettingService.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Oqtane.Client/Services/SettingService.cs b/Oqtane.Client/Services/SettingService.cs index 4b4cbc12..a138bbb9 100644 --- a/Oqtane.Client/Services/SettingService.cs +++ b/Oqtane.Client/Services/SettingService.cs @@ -135,10 +135,12 @@ namespace Oqtane.Services { var dictionary = new Dictionary(); var settings = await GetJsonAsync>($"{Apiurl}?entityname={entityName}&entityid={entityId}"); - - foreach(Setting setting in settings.OrderBy(item => item.SettingName).ToList()) + if (settings != null) { - dictionary.Add(setting.SettingName, setting.SettingValue); + foreach (Setting setting in settings.OrderBy(item => item.SettingName).ToList()) + { + dictionary.Add(setting.SettingName, setting.SettingValue); + } } return dictionary; } From 9305c99577fe8f69d9fbe9408aca71fab41ce30d Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Fri, 10 Mar 2023 17:22:18 -0500 Subject: [PATCH 2/5] exclude hidden pages by default --- Oqtane.Server/Pages/Sitemap.cshtml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Oqtane.Server/Pages/Sitemap.cshtml.cs b/Oqtane.Server/Pages/Sitemap.cshtml.cs index 6af21034..109d1e5d 100644 --- a/Oqtane.Server/Pages/Sitemap.cshtml.cs +++ b/Oqtane.Server/Pages/Sitemap.cshtml.cs @@ -48,7 +48,7 @@ namespace Oqtane.Pages var pageModules = _pageModules.GetPageModules(_alias.SiteId); foreach (var page in _pages.GetPages(_alias.SiteId)) { - if (_userPermissions.IsAuthorized(null, PermissionNames.View, page.PermissionList)) + if (_userPermissions.IsAuthorized(null, PermissionNames.View, page.PermissionList) && page.IsNavigation) { sitemap.Add(new Sitemap { Url = _alias.Protocol + _alias.Name + Utilities.NavigateUrl(_alias.Path, page.Path, ""), ModifiedOn = page.ModifiedOn }); From 3065ed50942e32e6d6ebebda083cec9e22b92f27 Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Sat, 11 Mar 2023 11:50:02 -0500 Subject: [PATCH 3/5] fix issue with capturing user profile information during external login --- .../Extensions/OqtaneSiteAuthenticationBuilderExtensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Oqtane.Server/Extensions/OqtaneSiteAuthenticationBuilderExtensions.cs b/Oqtane.Server/Extensions/OqtaneSiteAuthenticationBuilderExtensions.cs index 68284a01..95faf3ef 100644 --- a/Oqtane.Server/Extensions/OqtaneSiteAuthenticationBuilderExtensions.cs +++ b/Oqtane.Server/Extensions/OqtaneSiteAuthenticationBuilderExtensions.cs @@ -433,7 +433,7 @@ namespace Oqtane.Extensions { var _settings = httpContext.RequestServices.GetRequiredService(); var _profiles = httpContext.RequestServices.GetRequiredService(); - var profiles = _profiles.GetProfiles(user.SiteId); + var profiles = _profiles.GetProfiles(alias.SiteId).ToList(); foreach (var mapping in httpContext.GetSiteSettings().GetValue("ExternalLogin:ProfileClaimTypes", "").Split(',', StringSplitOptions.RemoveEmptyEntries)) { if (mapping.Contains(":")) From 5e4c91440e1b4e47ead75a1dc5366e7e003c7240 Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Sat, 11 Mar 2023 11:56:43 -0500 Subject: [PATCH 4/5] modify editmode parameter value in url to be more intuitive --- Oqtane.Client/Themes/Controls/Theme/ControlPanel.razor | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Oqtane.Client/Themes/Controls/Theme/ControlPanel.razor b/Oqtane.Client/Themes/Controls/Theme/ControlPanel.razor index c7601682..58a7144d 100644 --- a/Oqtane.Client/Themes/Controls/Theme/ControlPanel.razor +++ b/Oqtane.Client/Themes/Controls/Theme/ControlPanel.razor @@ -478,7 +478,7 @@ PageState.EditMode = true; } - NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "edit=" + ((PageState.EditMode) ? "1" : "0"))); + NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "edit=" + ((PageState.EditMode) ? "true" : "false"))); } else { @@ -486,7 +486,7 @@ { await PageService.AddPageAsync(PageState.Page.PageId, PageState.User.UserId); PageState.EditMode = true; - NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "edit=" + ((PageState.EditMode) ? "1" : "0"))); + NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "edit=" + ((PageState.EditMode) ? "true" : "false"))); } } } From 81030f468b93d76b624d4c4560a812eba75c3e01 Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Sat, 11 Mar 2023 14:03:24 -0500 Subject: [PATCH 5/5] improve user profile error logging for external login --- ...taneSiteAuthenticationBuilderExtensions.cs | 35 +++++++++++++------ 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/Oqtane.Server/Extensions/OqtaneSiteAuthenticationBuilderExtensions.cs b/Oqtane.Server/Extensions/OqtaneSiteAuthenticationBuilderExtensions.cs index 95faf3ef..529bf16e 100644 --- a/Oqtane.Server/Extensions/OqtaneSiteAuthenticationBuilderExtensions.cs +++ b/Oqtane.Server/Extensions/OqtaneSiteAuthenticationBuilderExtensions.cs @@ -439,24 +439,39 @@ namespace Oqtane.Extensions if (mapping.Contains(":")) { var claim = claimsPrincipal.Claims.FirstOrDefault(item => item.Type == mapping.Split(":")[0]); - if (claim != null && !string.IsNullOrEmpty(claim.Value)) + if (claim != null) { var profile = profiles.FirstOrDefault(item => item.Name == mapping.Split(":")[1]); if (profile != null) { - var setting = _settings.GetSetting(EntityNames.User, user.UserId, profile.Name); - if (setting != null) + if (!string.IsNullOrEmpty(claim.Value)) { - setting.SettingValue = claim.Value; - _settings.UpdateSetting(setting); - } - else - { - setting = new Setting { EntityName = EntityNames.User, EntityId = user.UserId, SettingName = profile.Name, SettingValue = claim.Value, IsPrivate = profile.IsPrivate }; - _settings.AddSetting(setting); + var setting = _settings.GetSetting(EntityNames.User, user.UserId, profile.Name); + if (setting != null) + { + setting.SettingValue = claim.Value; + _settings.UpdateSetting(setting); + } + else + { + setting = new Setting { EntityName = EntityNames.User, EntityId = user.UserId, SettingName = profile.Name, SettingValue = claim.Value, IsPrivate = profile.IsPrivate }; + _settings.AddSetting(setting); + } } } + else + { + _logger.Log(LogLevel.Error, "ExternalLogin", Enums.LogFunction.Security, "The User Profile {ProfileName} Does Not Exist For The Site. Please Verify Your User Profile Definitions.", mapping.Split(":")[1]); + } } + else + { + _logger.Log(LogLevel.Error, "ExternalLogin", Enums.LogFunction.Security, "The User Profile Claim {ClaimType} Does Not Exist. The Valid Claims Are {Claims}.", mapping.Split(":")[0], claims); + } + } + else + { + _logger.Log(LogLevel.Error, "ExternalLogin", Enums.LogFunction.Security, "The User Profile Claim Mapping {Mapping} Is Not Specified Correctly. It Should Be In The Format 'ClaimType:ProfileName'.", mapping); } } }