added support for default alias specification, alias auto registration, alias redirect, alias line break delimiters

This commit is contained in:
Shaun Walker
2021-12-22 15:43:59 -05:00
parent 22c2d56da0
commit c21a097fd2
11 changed files with 329 additions and 227 deletions

View File

@ -18,6 +18,7 @@ using Microsoft.AspNetCore.Mvc;
using Microsoft.Net.Http.Headers;
using Microsoft.AspNetCore.Http;
using System.Security.Claims;
using System.Net;
namespace Oqtane.Pages
{
@ -32,8 +33,9 @@ namespace Oqtane.Pages
private readonly IPageRepository _pages;
private readonly IUrlMappingRepository _urlMappings;
private readonly IVisitorRepository _visitors;
private readonly IAliasRepository _aliases;
public HostModel(IConfiguration configuration, ITenantManager tenantManager, ILocalizationManager localizationManager, ILanguageRepository languages, IAntiforgery antiforgery, ISiteRepository sites, IPageRepository pages, IUrlMappingRepository urlMappings, IVisitorRepository visitors)
public HostModel(IConfiguration configuration, ITenantManager tenantManager, ILocalizationManager localizationManager, ILanguageRepository languages, IAntiforgery antiforgery, ISiteRepository sites, IPageRepository pages, IUrlMappingRepository urlMappings, IVisitorRepository visitors, IAliasRepository aliases)
{
_configuration = configuration;
_tenantManager = tenantManager;
@ -44,6 +46,7 @@ namespace Oqtane.Pages
_pages = pages;
_urlMappings = urlMappings;
_visitors = visitors;
_aliases = aliases;
}
public string AntiForgeryToken = "";
@ -77,11 +80,25 @@ namespace Oqtane.Pages
var alias = _tenantManager.GetAlias();
if (alias != null)
{
Route route = new Route(HttpContext.Request.GetEncodedUrl(), alias.Path);
var url = WebUtility.UrlDecode(HttpContext.Request.GetEncodedUrl());
// redirect non-default alias
if (!alias.IsDefault)
{
var redirect = _aliases.GetAliases()
.Where(item => item.TenantId == alias.TenantId && item.SiteId == alias.SiteId && item.IsDefault)
.FirstOrDefault();
if (redirect != null)
{
return RedirectPermanent(url.Replace(alias.Name, redirect.Name));
}
}
var site = _sites.GetSite(alias.SiteId);
if (site != null)
{
Route route = new Route(url, alias.Path);
if (!string.IsNullOrEmpty(site.Runtime))
{
Runtime = site.Runtime;
@ -128,7 +145,7 @@ namespace Oqtane.Pages
else
{
// page does not exist
var url = route.SiteUrl + "/" + route.PagePath;
url = route.SiteUrl + "/" + route.PagePath;
var urlMapping = _urlMappings.GetUrlMapping(site.SiteId, url);
if (urlMapping != null && !string.IsNullOrEmpty(urlMapping.MappedUrl))
{