diff --git a/Oqtane.Server/Extensions/OqtaneSiteAuthenticationBuilderExtensions.cs b/Oqtane.Server/Extensions/OqtaneSiteAuthenticationBuilderExtensions.cs index f89d8bde..cad695a4 100644 --- a/Oqtane.Server/Extensions/OqtaneSiteAuthenticationBuilderExtensions.cs +++ b/Oqtane.Server/Extensions/OqtaneSiteAuthenticationBuilderExtensions.cs @@ -28,7 +28,7 @@ namespace Oqtane.Extensions public static OqtaneSiteOptionsBuilder WithSiteAuthentication(this OqtaneSiteOptionsBuilder builder) { // site cookie authentication options - builder.AddSiteOptions((options, alias, sitesettings) => + builder.AddSiteNamedOptions(Constants.AuthenticationScheme, (options, alias, sitesettings) => { options.Cookie.Name = sitesettings.GetValue("LoginOptions:CookieName", ".AspNetCore.Identity.Application"); }); diff --git a/Oqtane.Server/Extensions/OqtaneSiteOptionsBuilder.cs b/Oqtane.Server/Extensions/OqtaneSiteOptionsBuilder.cs index 8f281883..d34cd319 100644 --- a/Oqtane.Server/Extensions/OqtaneSiteOptionsBuilder.cs +++ b/Oqtane.Server/Extensions/OqtaneSiteOptionsBuilder.cs @@ -17,10 +17,22 @@ namespace Microsoft.Extensions.DependencyInjection } public OqtaneSiteOptionsBuilder AddSiteOptions( - Action> action) where TOptions : class, new() + Action> configureOptions) where TOptions : class, new() { Services.TryAddSingleton, SiteOptionsCache>(); - Services.AddSingleton, SiteOptions> (sp => new SiteOptions(action)); + Services.AddSingleton, SiteOptions> (_ => new SiteOptions(configureOptions)); + Services.TryAddTransient, SiteOptionsFactory>(); + Services.TryAddScoped>(sp => BuildOptionsManager(sp)); + Services.TryAddSingleton>(sp => BuildOptionsManager(sp)); + + return this; + } + + public OqtaneSiteOptionsBuilder AddSiteNamedOptions(string name, + Action> configureOptions) where TOptions : class, new() + { + Services.TryAddSingleton, SiteOptionsCache>(); + Services.AddSingleton, SiteNamedOptions>(_ => new SiteNamedOptions(name, configureOptions)); Services.TryAddTransient, SiteOptionsFactory>(); Services.TryAddScoped>(sp => BuildOptionsManager(sp)); Services.TryAddSingleton>(sp => BuildOptionsManager(sp)); diff --git a/Oqtane.Server/Infrastructure/Options/ISiteNamedOptions.cs b/Oqtane.Server/Infrastructure/Options/ISiteNamedOptions.cs new file mode 100644 index 00000000..41ed97c4 --- /dev/null +++ b/Oqtane.Server/Infrastructure/Options/ISiteNamedOptions.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; +using Oqtane.Models; + +namespace Oqtane.Infrastructure +{ + public interface ISiteNamedOptions + where TOptions : class, new() + { + void Configure(string name, TOptions options, Alias alias, Dictionary sitesettings); + } +} diff --git a/Oqtane.Server/Infrastructure/Options/SiteNamedOptions.cs b/Oqtane.Server/Infrastructure/Options/SiteNamedOptions.cs new file mode 100644 index 00000000..1027cc54 --- /dev/null +++ b/Oqtane.Server/Infrastructure/Options/SiteNamedOptions.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using Oqtane.Models; + +namespace Oqtane.Infrastructure +{ + public class SiteNamedOptions : ISiteNamedOptions + where TOptions : class, new() + { + public string Name { get; } + + private readonly Action> configureOptions; + + public SiteNamedOptions(string name, Action> configureOptions) + { + Name = name; + this.configureOptions = configureOptions; + } + + public void Configure(string name, TOptions options, Alias alias, Dictionary sitesettings) + { + if (name == Name) + { + configureOptions(options, alias, sitesettings); + } + } + } +} diff --git a/Oqtane.Server/Startup.cs b/Oqtane.Server/Startup.cs index 8277c378..8d8026d6 100644 --- a/Oqtane.Server/Startup.cs +++ b/Oqtane.Server/Startup.cs @@ -114,12 +114,12 @@ namespace Oqtane services.ConfigureOqtaneIdentityOptions(Configuration); services.AddAuthentication(options => - { - options.DefaultScheme = Constants.AuthenticationScheme; - }) - .AddCookie(Constants.AuthenticationScheme) - .AddOpenIdConnect(AuthenticationProviderTypes.OpenIDConnect, options => { }) - .AddOAuth(AuthenticationProviderTypes.OAuth2, options => { }); + { + options.DefaultScheme = Constants.AuthenticationScheme; + }) + .AddCookie(Constants.AuthenticationScheme) + .AddOpenIdConnect(AuthenticationProviderTypes.OpenIDConnect, options => { }) + .AddOAuth(AuthenticationProviderTypes.OAuth2, options => { }); services.ConfigureOqtaneCookieOptions(); services.ConfigureOqtaneAuthenticationOptions(Configuration);