remove SiteSettings from Alias for better separation of concerns
This commit is contained in:
@ -30,18 +30,18 @@ namespace Oqtane.Infrastructure
|
||||
|
||||
if (alias != null)
|
||||
{
|
||||
// add site settings to alias
|
||||
// save alias in HttpContext
|
||||
context.Items.Add(Constants.HttpContextAliasKey, alias);
|
||||
|
||||
// save site settings in HttpContext
|
||||
var cache = context.RequestServices.GetService(typeof(IMemoryCache)) as IMemoryCache;
|
||||
alias.SiteSettings = cache.GetOrCreate("sitesettings:" + alias.SiteKey, entry =>
|
||||
var sitesettings = cache.GetOrCreate(Constants.HttpContextSiteSettingsKey + alias.SiteKey, entry =>
|
||||
{
|
||||
var settingRepository = context.RequestServices.GetService(typeof(ISettingRepository)) as ISettingRepository;
|
||||
return settingRepository.GetSettings(EntityNames.Site, alias.SiteId)
|
||||
.ToDictionary(setting => setting.SettingName, setting => setting.SettingValue);
|
||||
});
|
||||
// save alias in HttpContext for server-side usage
|
||||
context.Items.Add(Constants.HttpContextAliasKey, alias);
|
||||
// remove site settings so they are not available client-side
|
||||
alias.SiteSettings = null;
|
||||
context.Items.Add(Constants.HttpContextSiteSettingsKey, sitesettings);
|
||||
|
||||
// rewrite path by removing alias path prefix from api and pages requests (for consistent routing)
|
||||
if (!string.IsNullOrEmpty(alias.Path))
|
||||
|
@ -1,3 +1,4 @@
|
||||
using System.Collections.Generic;
|
||||
using Oqtane.Models;
|
||||
|
||||
namespace Oqtane.Infrastructure
|
||||
@ -5,6 +6,6 @@ namespace Oqtane.Infrastructure
|
||||
public interface ISiteOptions<TOptions>
|
||||
where TOptions : class, new()
|
||||
{
|
||||
void Configure(TOptions options, Alias alias);
|
||||
void Configure(TOptions options, Alias alias, Dictionary<string, string> sitesettings);
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Oqtane.Models;
|
||||
|
||||
namespace Oqtane.Infrastructure
|
||||
@ -6,16 +7,16 @@ namespace Oqtane.Infrastructure
|
||||
public class SiteOptions<TOptions> : ISiteOptions<TOptions>
|
||||
where TOptions : class, new()
|
||||
{
|
||||
private readonly Action<TOptions, Alias> configureOptions;
|
||||
private readonly Action<TOptions, Alias, Dictionary<string, string>> configureOptions;
|
||||
|
||||
public SiteOptions(Action<TOptions, Alias> configureOptions)
|
||||
public SiteOptions(Action<TOptions, Alias, Dictionary<string, string>> configureOptions)
|
||||
{
|
||||
this.configureOptions = configureOptions;
|
||||
}
|
||||
|
||||
public void Configure(TOptions options, Alias alias)
|
||||
public void Configure(TOptions options, Alias alias, Dictionary<string, string> sitesettings)
|
||||
{
|
||||
configureOptions(options, alias);
|
||||
configureOptions(options, alias, sitesettings);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Oqtane.Extensions;
|
||||
|
||||
namespace Oqtane.Infrastructure
|
||||
{
|
||||
@ -9,14 +11,14 @@ namespace Oqtane.Infrastructure
|
||||
private readonly IConfigureOptions<TOptions>[] _configureOptions;
|
||||
private readonly IPostConfigureOptions<TOptions>[] _postConfigureOptions;
|
||||
private readonly ISiteOptions<TOptions>[] _siteOptions;
|
||||
private readonly IAliasAccessor _aliasAccessor;
|
||||
private readonly IHttpContextAccessor _accessor;
|
||||
|
||||
public SiteOptionsFactory(IEnumerable<IConfigureOptions<TOptions>> configureOptions, IEnumerable<IPostConfigureOptions<TOptions>> postConfigureOptions, IEnumerable<ISiteOptions<TOptions>> siteOptions, IAliasAccessor aliasAccessor)
|
||||
public SiteOptionsFactory(IEnumerable<IConfigureOptions<TOptions>> configureOptions, IEnumerable<IPostConfigureOptions<TOptions>> postConfigureOptions, IEnumerable<ISiteOptions<TOptions>> siteOptions, IHttpContextAccessor accessor)
|
||||
{
|
||||
_configureOptions = configureOptions as IConfigureOptions<TOptions>[] ?? new List<IConfigureOptions<TOptions>>(configureOptions).ToArray();
|
||||
_postConfigureOptions = postConfigureOptions as IPostConfigureOptions<TOptions>[] ?? new List<IPostConfigureOptions<TOptions>>(postConfigureOptions).ToArray();
|
||||
_siteOptions = siteOptions as ISiteOptions<TOptions>[] ?? new List<ISiteOptions<TOptions>>(siteOptions).ToArray();
|
||||
_aliasAccessor = aliasAccessor;
|
||||
_accessor = accessor;
|
||||
}
|
||||
|
||||
public TOptions Create(string name)
|
||||
@ -36,11 +38,11 @@ namespace Oqtane.Infrastructure
|
||||
}
|
||||
|
||||
// override with site specific options
|
||||
if (_aliasAccessor?.Alias != null)
|
||||
if (_accessor.HttpContext?.GetAlias() != null && _accessor.HttpContext?.GetSiteSettings() != null)
|
||||
{
|
||||
foreach (var siteOption in _siteOptions)
|
||||
{
|
||||
siteOption.Configure(options, _aliasAccessor.Alias);
|
||||
siteOption.Configure(options, _accessor.HttpContext.GetAlias(), _accessor.HttpContext.GetSiteSettings());
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user