diff --git a/Oqtane.Client/Modules/Admin/UrlMappings/Add.razor b/Oqtane.Client/Modules/Admin/UrlMappings/Add.razor index efde8b66..a6f82e06 100644 --- a/Oqtane.Client/Modules/Admin/UrlMappings/Add.razor +++ b/Oqtane.Client/Modules/Admin/UrlMappings/Add.razor @@ -40,28 +40,47 @@ var interop = new Interop(JSRuntime); if (await interop.FormValid(form)) { - var route = new Route(_url, PageState.Alias.Path); - var url = route.SiteUrl + "/" + route.PagePath; + if (_url != _mappedurl) + { + Uri uri = new Uri(NavigationManager.Uri); + var url = uri.Scheme + "://" + uri.Authority + "/"; + url = url + (!string.IsNullOrEmpty(PageState.Alias.Path) ? PageState.Alias.Path + "/" : ""); - var urlmapping = new UrlMapping(); - urlmapping.SiteId = PageState.Site.SiteId; - urlmapping.Url = url; - urlmapping.MappedUrl = _mappedurl; - urlmapping.Requests = 0; - urlmapping.CreatedOn = DateTime.UtcNow; - urlmapping.RequestedOn = DateTime.UtcNow; + _url = (_url.StartsWith("/")) ? _url.Substring(1) : _url; + _url = (!_url.StartsWith("http")) ? url + _url : _url; - try - { - urlmapping = await UrlMappingService.AddUrlMappingAsync(urlmapping); - await logger.LogInformation("UrlMapping Saved {UrlMapping}", urlmapping); - NavigationManager.NavigateTo(NavigateUrl()); - } - catch (Exception ex) - { - await logger.LogError(ex, "Error Saving UrlMapping {UrlMapping} {Error}", urlmapping, ex.Message); - AddModuleMessage(Localizer["Error.SaveUrlMapping"], MessageType.Error); - } + if (_url.StartsWith(url)) + { + var urlmapping = new UrlMapping(); + urlmapping.SiteId = PageState.Site.SiteId; + var route = new Route(_url, PageState.Alias.Path); + urlmapping.Url = route.PagePath; + urlmapping.MappedUrl = _mappedurl.Replace(url, ""); + urlmapping.Requests = 0; + urlmapping.CreatedOn = DateTime.UtcNow; + urlmapping.RequestedOn = DateTime.UtcNow; + + try + { + urlmapping = await UrlMappingService.AddUrlMappingAsync(urlmapping); + await logger.LogInformation("UrlMapping Saved {UrlMapping}", urlmapping); + NavigationManager.NavigateTo(NavigateUrl()); + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Saving UrlMapping {UrlMapping} {Error}", urlmapping, ex.Message); + AddModuleMessage(Localizer["Error.SaveUrlMapping"], MessageType.Error); + } + } + else + { + AddModuleMessage(Localizer["Message.SaveUrlMapping"], MessageType.Warning); + } + } + else + { + AddModuleMessage(Localizer["Message.DuplicateUrlMapping"], MessageType.Warning); + } } else { diff --git a/Oqtane.Client/Modules/Admin/UrlMappings/Edit.razor b/Oqtane.Client/Modules/Admin/UrlMappings/Edit.razor index 1ef1b79a..71f08e63 100644 --- a/Oqtane.Client/Modules/Admin/UrlMappings/Edit.razor +++ b/Oqtane.Client/Modules/Admin/UrlMappings/Edit.razor @@ -26,55 +26,65 @@ @code { - private ElementReference form; - private bool validated = false; + private ElementReference form; + private bool validated = false; - private int _urlmappingid; - private string _url = string.Empty; - private string _mappedurl = string.Empty; + private int _urlmappingid; + private string _url = string.Empty; + private string _mappedurl = string.Empty; - public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; + public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; - protected override async Task OnInitializedAsync() - { - try - { - _urlmappingid = Int32.Parse(PageState.QueryString["id"]); - var urlmapping = await UrlMappingService.GetUrlMappingAsync(_urlmappingid); - if (urlmapping != null) - { - _url = urlmapping.Url; - _mappedurl = urlmapping.MappedUrl; - } - } - catch (Exception ex) - { - await logger.LogError(ex, "Error Loading UrlMapping {UrlMappingId} {Error}", _urlmappingid, ex.Message); - AddModuleMessage(Localizer["Error.LoadUrlMapping"], MessageType.Error); - } - } + protected override async Task OnInitializedAsync() + { + try + { + _urlmappingid = Int32.Parse(PageState.QueryString["id"]); + var urlmapping = await UrlMappingService.GetUrlMappingAsync(_urlmappingid); + if (urlmapping != null) + { + _url = urlmapping.Url; + _mappedurl = urlmapping.MappedUrl; + } + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Loading UrlMapping {UrlMappingId} {Error}", _urlmappingid, ex.Message); + AddModuleMessage(Localizer["Error.LoadUrlMapping"], MessageType.Error); + } + } - private async Task SaveUrlMapping() - { - validated = true; - var interop = new Interop(JSRuntime); - if (await interop.FormValid(form)) - { - var urlmapping = await UrlMappingService.GetUrlMappingAsync(_urlmappingid); - urlmapping.MappedUrl = _mappedurl; + private async Task SaveUrlMapping() + { + validated = true; + var interop = new Interop(JSRuntime); + if (await interop.FormValid(form)) + { + if (_url != _mappedurl) + { + try + { + Uri uri = new Uri(NavigationManager.Uri); + var url = uri.Scheme + "://" + uri.Authority + "/"; + url = url + (!string.IsNullOrEmpty(PageState.Alias.Path) ? PageState.Alias.Path + "/" : ""); - try - { - urlmapping = await UrlMappingService.UpdateUrlMappingAsync(urlmapping); - await logger.LogInformation("UrlMapping Saved {UrlMapping}", urlmapping); - NavigationManager.NavigateTo(NavigateUrl()); - } - catch (Exception ex) - { - await logger.LogError(ex, "Error Saving UrlMapping {UrlMapping} {Error}", urlmapping, ex.Message); - AddModuleMessage(Localizer["Error.SaveUrlMapping"], MessageType.Error); - } - } + var urlmapping = await UrlMappingService.GetUrlMappingAsync(_urlmappingid); + urlmapping.MappedUrl = _mappedurl.Replace(url, ""); + urlmapping = await UrlMappingService.UpdateUrlMappingAsync(urlmapping); + await logger.LogInformation("UrlMapping Saved {UrlMapping}", urlmapping); + NavigationManager.NavigateTo(NavigateUrl()); + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Saving UrlMapping {UrlMappingId} {Error}", _urlmappingid, ex.Message); + AddModuleMessage(Localizer["Error.SaveUrlMapping"], MessageType.Error); + } + } + else + { + AddModuleMessage(Localizer["Message.DuplicateUrlMapping"], MessageType.Warning); + } + } else { AddModuleMessage(SharedLocalizer["Message.InfoRequired"], MessageType.Warning); diff --git a/Oqtane.Client/Modules/Admin/UrlMappings/Index.razor b/Oqtane.Client/Modules/Admin/UrlMappings/Index.razor index 02f41be9..28478589 100644 --- a/Oqtane.Client/Modules/Admin/UrlMappings/Index.razor +++ b/Oqtane.Client/Modules/Admin/UrlMappings/Index.razor @@ -40,10 +40,10 @@ else