From fd60b40c535c8001b950eb4c162175b59c8e1737 Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Tue, 1 Dec 2020 19:36:02 -0500 Subject: [PATCH] Fixes to make site alias, page path, and module action Url resolutions case insensitive. Optimized logic for Settings component which fixed localization rendering issue. --- .../Modules/Admin/Modules/Export.razor | 2 +- .../Modules/Admin/Modules/Import.razor | 2 +- .../Modules/Admin/Modules/Settings.razor | 2 +- .../Themes/Controls/ModuleTitle.razor | 14 +++-------- Oqtane.Client/UI/ModuleInstance.razor | 17 ++++--------- Oqtane.Client/UI/Pane.razor | 11 ++------ Oqtane.Client/UI/SiteRouter.razor | 25 ++++++++++--------- Oqtane.Server/Controllers/AliasController.cs | 4 +-- 8 files changed, 29 insertions(+), 48 deletions(-) diff --git a/Oqtane.Client/Modules/Admin/Modules/Export.razor b/Oqtane.Client/Modules/Admin/Modules/Export.razor index 80010036..fd1aa71c 100644 --- a/Oqtane.Client/Modules/Admin/Modules/Export.razor +++ b/Oqtane.Client/Modules/Admin/Modules/Export.razor @@ -24,7 +24,7 @@ private string _content = string.Empty; public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; - public override string Title => "Export Module"; + public override string Title => "Export Content"; private async Task ExportModule() diff --git a/Oqtane.Client/Modules/Admin/Modules/Import.razor b/Oqtane.Client/Modules/Admin/Modules/Import.razor index b3ace332..585aeeda 100644 --- a/Oqtane.Client/Modules/Admin/Modules/Import.razor +++ b/Oqtane.Client/Modules/Admin/Modules/Import.razor @@ -24,7 +24,7 @@ private string _content = string.Empty; public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; - public override string Title => "Import Module"; + public override string Title => "Import Content"; private async Task ImportModule() { diff --git a/Oqtane.Client/Modules/Admin/Modules/Settings.razor b/Oqtane.Client/Modules/Admin/Modules/Settings.razor index 95bb5cec..a4bd4188 100644 --- a/Oqtane.Client/Modules/Admin/Modules/Settings.razor +++ b/Oqtane.Client/Modules/Admin/Modules/Settings.razor @@ -121,7 +121,7 @@ _permissionNames = ModuleState.ModuleDefinition.PermissionNames; _pageId = ModuleState.PageId.ToString(); - _settingsModuleType = Type.GetType(ModuleState.ModuleType); + _settingsModuleType = Type.GetType(ModuleState.ModuleDefinition.ControlTypeTemplate.Replace(Constants.ActionToken, PageState.Action), false, true); if (_settingsModuleType != null) { var moduleobject = Activator.CreateInstance(_settingsModuleType) as IModuleControl; diff --git a/Oqtane.Client/Themes/Controls/ModuleTitle.razor b/Oqtane.Client/Themes/Controls/ModuleTitle.razor index 0dd706ee..24a5da86 100644 --- a/Oqtane.Client/Themes/Controls/ModuleTitle.razor +++ b/Oqtane.Client/Themes/Controls/ModuleTitle.razor @@ -9,21 +9,15 @@ @code { private string title = ""; - protected override Task OnParametersSetAsync() + protected override void OnParametersSet() { - title = ModuleState.Title; - // check for core module actions component - if (Constants.DefaultModuleActions.Contains(PageState.Action)) + if (!string.IsNullOrEmpty(ModuleState.ControlTitle)) { - title = PageState.Action; + title = ModuleState.ControlTitle; } else { - if (!string.IsNullOrEmpty(ModuleState.ControlTitle)) - { - title = ModuleState.ControlTitle; - } + title = ModuleState.Title; } - return Task.CompletedTask; } } diff --git a/Oqtane.Client/UI/ModuleInstance.razor b/Oqtane.Client/UI/ModuleInstance.razor index 80af124d..c619f268 100644 --- a/Oqtane.Client/UI/ModuleInstance.razor +++ b/Oqtane.Client/UI/ModuleInstance.razor @@ -1,4 +1,4 @@ -@namespace Oqtane.UI +@namespace Oqtane.UI @@ -28,17 +28,10 @@ { DynamicComponent = builder => { - string typename = ModuleState.ModuleType; - // check for core module actions component - if (Constants.DefaultModuleActions.Contains(PageState.Action)) - { - typename = Constants.DefaultModuleActionsTemplate.Replace(Constants.ActionToken, PageState.Action); - } - Type moduleType = null; - if (typename != null) + if (!string.IsNullOrEmpty(ModuleState.ModuleType)) { - moduleType = Type.GetType(typename); + moduleType = Type.GetType(ModuleState.ModuleType); if (moduleType != null) { @@ -48,13 +41,13 @@ else { // module does not exist with typename specified - _message = "Module Does Not Have A Component Named " + Utilities.GetTypeNameLastSegment(typename, 0) + ".razor"; + _message = "Module Does Not Have A Component Named " + Utilities.GetTypeNameLastSegment(ModuleState.ModuleType, 0) + ".razor"; _messagetype = MessageType.Error; } } else { - _message = "Something is wrong with moduletype"; + _message = "Module Type Is Invalid For " + ModuleState.ModuleDefinitionName; _messagetype = MessageType.Error; } diff --git a/Oqtane.Client/UI/Pane.razor b/Oqtane.Client/UI/Pane.razor index 028fca3f..0c04ff94 100644 --- a/Oqtane.Client/UI/Pane.razor +++ b/Oqtane.Client/UI/Pane.razor @@ -52,14 +52,7 @@ else Module module = PageState.Modules.FirstOrDefault(item => item.ModuleId == PageState.ModuleId); if (module != null && !module.IsDeleted) { - var typename = module.ModuleType; - // check for core module actions component - if (Constants.DefaultModuleActions.Contains(PageState.Action)) - { - typename = Constants.DefaultModuleActionsTemplate.Replace(Constants.ActionToken, PageState.Action); - } - - var moduleType = Type.GetType(typename); + var moduleType = Type.GetType(module.ModuleType); if (moduleType != null) { bool authorized = false; @@ -96,7 +89,7 @@ else } else { - // module control does not exist with name specified + // module type does not exist } } } diff --git a/Oqtane.Client/UI/SiteRouter.razor b/Oqtane.Client/UI/SiteRouter.razor index f8406a13..082e04ee 100644 --- a/Oqtane.Client/UI/SiteRouter.razor +++ b/Oqtane.Client/UI/SiteRouter.razor @@ -230,7 +230,7 @@ if (PageState == null || reload == Reload.Site) { - page = pages.Where(item => item.Path == path).FirstOrDefault(); + page = pages.FirstOrDefault(item => item.Path.Equals(path, StringComparison.OrdinalIgnoreCase)); } else { @@ -465,22 +465,23 @@ } } - module.ModuleType = typename.Replace(Constants.ActionToken, action); - - // get additional metadata from IModuleControl interface - typename = module.ModuleType; - if (Constants.DefaultModuleActions.Contains(action)) + // ensure component exists and implements IModuleControl + module.ModuleType = ""; + if (Constants.DefaultModuleActions.Contains(action, StringComparer.OrdinalIgnoreCase)) { - // core framework module action components typename = Constants.DefaultModuleActionsTemplate.Replace(Constants.ActionToken, action); } - Type moduletype = Type.GetType(typename); - - // ensure component implements IModuleControl - if (moduletype != null && !moduletype.GetInterfaces().Contains(typeof(IModuleControl))) + else { - module.ModuleType = ""; + typename = typename.Replace(Constants.ActionToken, action); } + Type moduletype = Type.GetType(typename, false, true); // case insensitive + if (moduletype != null && moduletype.GetInterfaces().Contains(typeof(IModuleControl))) + { + module.ModuleType = Utilities.GetFullTypeName(moduletype.AssemblyQualifiedName); // get actual type name + } + + // get additional metadata from IModuleControl interface if (moduletype != null && module.ModuleType != "") { var moduleobject = Activator.CreateInstance(moduletype) as IModuleControl; diff --git a/Oqtane.Server/Controllers/AliasController.cs b/Oqtane.Server/Controllers/AliasController.cs index 188160a0..8956bac7 100644 --- a/Oqtane.Server/Controllers/AliasController.cs +++ b/Oqtane.Server/Controllers/AliasController.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Authorization; using Oqtane.Models; @@ -62,7 +62,7 @@ namespace Oqtane.Controllers for (int i = segments.Length; i > 0; i--) { name = string.Join("/", segments, 0, i); - alias = aliases.Find(item => item.Name == name); + alias = aliases.Find(item => item.Name.Equals(name, StringComparison.OrdinalIgnoreCase)); if (alias != null) { break; // found a matching alias