Skip to content

Commit

Permalink
Add a way to queue releasing shell context from setting display drive…
Browse files Browse the repository at this point in the history
…rs (#15875)

Co-authored-by: Zoltán Lehóczky <zoltan.lehoczky@lombiq.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
  • Loading branch information
3 people committed May 2, 2024
1 parent 211ae34 commit 45f393b
Show file tree
Hide file tree
Showing 35 changed files with 361 additions and 276 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,29 +24,26 @@ namespace OrchardCore.Azure.Email.Drivers;

public class AzureEmailSettingsDisplayDriver : SectionDisplayDriver<ISite, AzureEmailSettings>
{
private readonly IShellReleaseManager _shellReleaseManager;
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly IAuthorizationService _authorizationService;
private readonly IDataProtectionProvider _dataProtectionProvider;
private readonly IShellHost _shellHost;
private readonly ShellSettings _shellSettings;
private readonly IEmailAddressValidator _emailValidator;

protected IStringLocalizer S;

public AzureEmailSettingsDisplayDriver(
IShellReleaseManager shellReleaseManager,
IHttpContextAccessor httpContextAccessor,
IAuthorizationService authorizationService,
IDataProtectionProvider dataProtectionProvider,
IShellHost shellHost,
ShellSettings shellSettings,
IEmailAddressValidator emailValidator,
IStringLocalizer<AzureEmailSettingsDisplayDriver> stringLocalizer)
{
_shellReleaseManager = shellReleaseManager;
_httpContextAccessor = httpContextAccessor;
_authorizationService = authorizationService;
_dataProtectionProvider = dataProtectionProvider;
_shellHost = shellHost;
_shellSettings = shellSettings;
_emailValidator = emailValidator;
S = stringLocalizer;
}
Expand Down Expand Up @@ -150,8 +147,7 @@ public override async Task<IDisplayResult> UpdateAsync(ISite site, AzureEmailSet

if (hasChanges)
{
// Release the tenant to apply the settings when something changed.
await _shellHost.ReleaseShellContextAsync(_shellSettings);
_shellReleaseManager.RequestRelease();
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,8 @@ public class SmtpSettingsDisplayDriver : SectionDisplayDriver<ISite, SmtpSetting
[Obsolete("This property should no longer be used. Instead use EmailSettings.GroupId")]
public const string GroupId = EmailSettings.GroupId;

private readonly IShellReleaseManager _shellReleaseManager;
private readonly IDataProtectionProvider _dataProtectionProvider;
private readonly IShellHost _shellHost;
private readonly ShellSettings _shellSettings;
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly SmtpOptions _smtpOptions;
private readonly IAuthorizationService _authorizationService;
Expand All @@ -36,18 +35,16 @@ public class SmtpSettingsDisplayDriver : SectionDisplayDriver<ISite, SmtpSetting
protected readonly IStringLocalizer S;

public SmtpSettingsDisplayDriver(
IShellReleaseManager shellReleaseManager,
IDataProtectionProvider dataProtectionProvider,
IShellHost shellHost,
ShellSettings shellSettings,
IHttpContextAccessor httpContextAccessor,
IOptions<SmtpOptions> options,
IAuthorizationService authorizationService,
IEmailAddressValidator emailAddressValidator,
IStringLocalizer<SmtpSettingsDisplayDriver> stringLocalizer)
{
_shellReleaseManager = shellReleaseManager;
_dataProtectionProvider = dataProtectionProvider;
_shellHost = shellHost;
_shellSettings = shellSettings;
_httpContextAccessor = httpContextAccessor;
_smtpOptions = options.Value;
_authorizationService = authorizationService;
Expand Down Expand Up @@ -200,8 +197,7 @@ public override async Task<IDisplayResult> UpdateAsync(ISite site, SmtpSettings

if (hasChanges)
{
// Release the tenant to apply the settings when something changed.
await _shellHost.ReleaseShellContextAsync(_shellSettings);
_shellReleaseManager.RequestRelease();
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,31 +22,28 @@ public class EmailSettingsDisplayDriver : SectionDisplayDriver<ISite, EmailSetti
{
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly IAuthorizationService _authorizationService;
private readonly IShellHost _shellHost;
private readonly EmailOptions _emailOptions;
private readonly IEmailProviderResolver _emailProviderResolver;
private readonly ShellSettings _shellSettings;
private readonly IShellReleaseManager _shellReleaseManager;
private readonly EmailProviderOptions _emailProviders;

protected readonly IStringLocalizer S;

public EmailSettingsDisplayDriver(
IHttpContextAccessor httpContextAccessor,
IAuthorizationService authorizationService,
IShellHost shellHost,
IOptions<EmailProviderOptions> emailProviders,
IOptions<EmailOptions> emailOptions,
IEmailProviderResolver emailProviderResolver,
ShellSettings shellSettings,
IShellReleaseManager shellReleaseManager,
IStringLocalizer<EmailSettingsDisplayDriver> stringLocalizer)
{
_httpContextAccessor = httpContextAccessor;
_authorizationService = authorizationService;
_shellHost = shellHost;
_emailOptions = emailOptions.Value;
_emailProviderResolver = emailProviderResolver;
_emailProviders = emailProviders.Value;
_shellSettings = shellSettings;
_shellReleaseManager = shellReleaseManager;
S = stringLocalizer;
}
public override async Task<IDisplayResult> EditAsync(EmailSettings settings, BuildEditorContext context)
Expand Down Expand Up @@ -91,7 +88,7 @@ public override async Task<IDisplayResult> UpdateAsync(EmailSettings settings, U
{
settings.DefaultProviderName = model.DefaultProvider;

await _shellHost.ReleaseShellContextAsync(_shellSettings);
_shellReleaseManager.RequestRelease();
}

return await EditAsync(settings, context);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,27 +16,24 @@ namespace OrchardCore.Facebook.Drivers
{
public class FacebookSettingsDisplayDriver : SectionDisplayDriver<ISite, FacebookSettings>
{
private readonly IShellReleaseManager _shellReleaseManager;
private readonly IAuthorizationService _authorizationService;
private readonly IDataProtectionProvider _dataProtectionProvider;
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly IShellHost _shellHost;
private readonly ShellSettings _shellSettings;
private readonly ILogger _logger;

public FacebookSettingsDisplayDriver(
IShellReleaseManager shellReleaseManager,
IAuthorizationService authorizationService,
IDataProtectionProvider dataProtectionProvider,
IHttpContextAccessor httpContextAccessor,
IShellHost shellHost,
ShellSettings shellSettings,
ILogger<FacebookSettingsDisplayDriver> logger
)
{
_shellReleaseManager = shellReleaseManager;
_authorizationService = authorizationService;
_dataProtectionProvider = dataProtectionProvider;
_httpContextAccessor = httpContextAccessor;
_shellHost = shellHost;
_shellSettings = shellSettings;
_logger = logger;
}

Expand Down Expand Up @@ -87,19 +84,23 @@ public override async Task<IDisplayResult> UpdateAsync(FacebookSettings settings
var model = new FacebookSettingsViewModel();
await context.Updater.TryUpdateModelAsync(model, Prefix);

settings.AppId = model.AppId;
settings.FBInit = model.FBInit;
settings.SdkJs = model.SdkJs;
settings.Version = model.Version;

if (!string.IsNullOrWhiteSpace(model.FBInitParams))
{
settings.FBInitParams = model.FBInitParams;
}

if (context.Updater.ModelState.IsValid)
{
var protector = _dataProtectionProvider.CreateProtector(FacebookConstants.Features.Core);
settings.AppId = model.AppId;
settings.AppSecret = protector.Protect(model.AppSecret);
settings.FBInit = model.FBInit;
settings.SdkJs = model.SdkJs;
if (!string.IsNullOrWhiteSpace(model.FBInitParams))
settings.FBInitParams = model.FBInitParams;
settings.Version = model.Version;

await _shellHost.ReleaseShellContextAsync(_shellSettings);
}

_shellReleaseManager.RequestRelease();
}

return await EditAsync(settings, context);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,18 @@ namespace OrchardCore.Facebook.Login.Drivers
{
public class FacebookLoginSettingsDisplayDriver : SectionDisplayDriver<ISite, FacebookLoginSettings>
{
private readonly IShellReleaseManager _shellReleaseManager;
private readonly IAuthorizationService _authorizationService;
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly IShellHost _shellHost;
private readonly ShellSettings _shellSettings;

public FacebookLoginSettingsDisplayDriver(
IShellReleaseManager shellReleaseManager,
IAuthorizationService authorizationService,
IHttpContextAccessor httpContextAccessor,
IShellHost shellHost,
ShellSettings shellSettings)
IHttpContextAccessor httpContextAccessor)
{
_shellReleaseManager = shellReleaseManager;
_authorizationService = authorizationService;
_httpContextAccessor = httpContextAccessor;
_shellHost = shellHost;
_shellSettings = shellSettings;
}

public override async Task<IDisplayResult> EditAsync(FacebookLoginSettings settings, BuildEditorContext context)
Expand Down Expand Up @@ -56,15 +53,15 @@ public override async Task<IDisplayResult> UpdateAsync(FacebookLoginSettings set
}

var model = new FacebookLoginSettingsViewModel();

await context.Updater.TryUpdateModelAsync(model, Prefix);

if (context.Updater.ModelState.IsValid)
{
settings.CallbackPath = model.CallbackPath;
settings.SaveTokens = model.SaveTokens;
await _shellHost.ReleaseShellContextAsync(_shellSettings);
}
settings.CallbackPath = model.CallbackPath;
settings.SaveTokens = model.SaveTokens;

_shellReleaseManager.RequestRelease();
}

return await EditAsync(settings, context);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,26 +16,23 @@ namespace OrchardCore.GitHub.Drivers
{
public class GitHubAuthenticationSettingsDisplayDriver : SectionDisplayDriver<ISite, GitHubAuthenticationSettings>
{
private readonly IShellReleaseManager _shellReleaseManager;
private readonly IAuthorizationService _authorizationService;
private readonly IDataProtectionProvider _dataProtectionProvider;
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly IShellHost _shellHost;
private readonly ShellSettings _shellSettings;
private readonly ILogger _logger;

public GitHubAuthenticationSettingsDisplayDriver(
IShellReleaseManager shellReleaseManager,
IAuthorizationService authorizationService,
IDataProtectionProvider dataProtectionProvider,
IHttpContextAccessor httpContextAccessor,
IShellHost shellHost,
ShellSettings shellSettings,
ILogger<GitHubAuthenticationSettingsDisplayDriver> logger)
{
_shellReleaseManager = shellReleaseManager;
_authorizationService = authorizationService;
_dataProtectionProvider = dataProtectionProvider;
_httpContextAccessor = httpContextAccessor;
_shellHost = shellHost;
_shellSettings = shellSettings;
_logger = logger;
}

Expand Down Expand Up @@ -97,9 +94,11 @@ public override async Task<IDisplayResult> UpdateAsync(GitHubAuthenticationSetti
settings.ClientSecret = protector.Protect(model.ClientSecret);
settings.CallbackPath = model.CallbackUrl;
settings.SaveTokens = model.SaveTokens;
await _shellHost.ReleaseShellContextAsync(_shellSettings);

_shellReleaseManager.RequestRelease();
}
}

return await EditAsync(settings, context);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,26 +16,23 @@ namespace OrchardCore.Google.Authentication.Drivers
{
public class GoogleAuthenticationSettingsDisplayDriver : SectionDisplayDriver<ISite, GoogleAuthenticationSettings>
{
private readonly IShellReleaseManager _shellReleaseManager;
private readonly IAuthorizationService _authorizationService;
private readonly IDataProtectionProvider _dataProtectionProvider;
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly IShellHost _shellHost;
private readonly ShellSettings _shellSettings;
private readonly ILogger _logger;

public GoogleAuthenticationSettingsDisplayDriver(
IShellReleaseManager shellReleaseManager,
IAuthorizationService authorizationService,
IDataProtectionProvider dataProtectionProvider,
IHttpContextAccessor httpContextAccessor,
IShellHost shellHost,
ShellSettings shellSettings,
ILogger<GoogleAuthenticationSettingsDisplayDriver> logger)
{
_shellReleaseManager = shellReleaseManager;
_authorizationService = authorizationService;
_dataProtectionProvider = dataProtectionProvider;
_httpContextAccessor = httpContextAccessor;
_shellHost = shellHost;
_shellSettings = shellSettings;
_logger = logger;
}

Expand Down Expand Up @@ -89,17 +86,20 @@ public override async Task<IDisplayResult> UpdateAsync(GoogleAuthenticationSetti
var model = new GoogleAuthenticationSettingsViewModel();
await context.Updater.TryUpdateModelAsync(model, Prefix);

settings.ClientID = model.ClientID;
settings.CallbackPath = model.CallbackPath;
settings.SaveTokens = model.SaveTokens;

if (context.Updater.ModelState.IsValid)
{
var protector = _dataProtectionProvider.CreateProtector(GoogleConstants.Features.GoogleAuthentication);

settings.ClientID = model.ClientID;
settings.ClientSecret = protector.Protect(model.ClientSecret);
settings.CallbackPath = model.CallbackPath;
settings.SaveTokens = model.SaveTokens;
await _shellHost.ReleaseShellContextAsync(_shellSettings);
}

_shellReleaseManager.RequestRelease();
}

return await EditAsync(settings, context);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,25 +19,24 @@ public class HttpsSettingsDisplayDriver : SectionDisplayDriver<ISite, HttpsSetti
{
public const string GroupId = "Https";

private readonly IShellReleaseManager _shellReleaseManager;
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly IAuthorizationService _authorizationService;
private readonly INotifier _notifier;
private readonly IShellHost _shellHost;
private readonly ShellSettings _shellSettings;

protected readonly IHtmlLocalizer H;

public HttpsSettingsDisplayDriver(IHttpContextAccessor httpContextAccessor,
public HttpsSettingsDisplayDriver(
IShellReleaseManager shellReleaseManager,
IHttpContextAccessor httpContextAccessor,
IAuthorizationService authorizationService,
INotifier notifier,
IShellHost shellHost,
ShellSettings shellSettings,
IHtmlLocalizer<HttpsSettingsDisplayDriver> htmlLocalizer)
{
_shellReleaseManager = shellReleaseManager;
_httpContextAccessor = httpContextAccessor;
_authorizationService = authorizationService;
_notifier = notifier;
_shellHost = shellHost;
_shellSettings = shellSettings;
H = htmlLocalizer;
}

Expand Down Expand Up @@ -94,11 +93,7 @@ public override async Task<IDisplayResult> UpdateAsync(HttpsSettings settings, U
settings.RequireHttpsPermanent = model.RequireHttpsPermanent;
settings.SslPort = model.SslPort;

// If the settings are valid, release the current tenant.
if (context.Updater.ModelState.IsValid)
{
await _shellHost.ReleaseShellContextAsync(_shellSettings);
}
_shellReleaseManager.RequestRelease();
}

return await EditAsync(settings, context);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,10 @@ namespace OrchardCore.Layers.Drivers
public class LayerSiteSettingsDisplayDriver : SectionDisplayDriver<ISite, LayerSettings>
{
public const string GroupId = "zones";
private static readonly char[] _separator = [' ', ','];

private readonly IHttpContextAccessor _httpContextAccessor;
private readonly IAuthorizationService _authorizationService;
private static readonly char[] _separator = [' ', ','];

public LayerSiteSettingsDisplayDriver(
IHttpContextAccessor httpContextAccessor,
Expand Down

0 comments on commit 45f393b

Please sign in to comment.