From 03f6d06f36e74228521ccdc68888a59480fbd085 Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Wed, 9 Oct 2013 12:13:49 -0700 Subject: [PATCH] Invalidating SSL settings cache --- .../Drivers/SslSettingsPartDriver.cs | 13 ++++++++++--- .../Models/SslSettingsPart.cs | 2 ++ .../Services/SecureSocketsLayerService.cs | 8 +++++++- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.SecureSocketsLayer/Drivers/SslSettingsPartDriver.cs b/src/Orchard.Web/Modules/Orchard.SecureSocketsLayer/Drivers/SslSettingsPartDriver.cs index 27ce4d17b..323650d77 100644 --- a/src/Orchard.Web/Modules/Orchard.SecureSocketsLayer/Drivers/SslSettingsPartDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.SecureSocketsLayer/Drivers/SslSettingsPartDriver.cs @@ -1,4 +1,5 @@ -using Orchard.ContentManagement; +using Orchard.Caching; +using Orchard.ContentManagement; using Orchard.ContentManagement.Drivers; using Orchard.ContentManagement.Handlers; using Orchard.Localization; @@ -6,9 +7,11 @@ using Orchard.SecureSocketsLayer.Models; namespace Orchard.SecureSocketsLayer.Drivers { public class SslSettingsPartDriver : ContentPartDriver { + private readonly ISignals _signals; private const string TemplateName = "Parts/SecureSocketsLayer.Settings"; - public SslSettingsPartDriver() { + public SslSettingsPartDriver(ISignals signals) { + _signals = signals; T = NullLocalizer.Instance; } @@ -25,7 +28,9 @@ namespace Orchard.SecureSocketsLayer.Drivers { } protected override DriverResult Editor(SslSettingsPart part, IUpdateModel updater, dynamic shapeHelper) { - updater.TryUpdateModel(part, Prefix, null, null); + if (updater.TryUpdateModel(part, Prefix, null, null)) { + _signals.Trigger(SslSettingsPart.CacheKey); + } return Editor(part, shapeHelper); } @@ -37,6 +42,8 @@ namespace Orchard.SecureSocketsLayer.Drivers { part.Urls = context.Attribute(elementName, "Urls") ?? ""; part.InsecureHostName = context.Attribute(elementName, "InsecureHostName") ?? ""; part.SecureHostName = context.Attribute(elementName, "SecureHostName") ?? ""; + + _signals.Trigger(SslSettingsPart.CacheKey); } protected override void Exporting(SslSettingsPart part, ExportContentContext context) { diff --git a/src/Orchard.Web/Modules/Orchard.SecureSocketsLayer/Models/SslSettingsPart.cs b/src/Orchard.Web/Modules/Orchard.SecureSocketsLayer/Models/SslSettingsPart.cs index 3a817326a..842610534 100644 --- a/src/Orchard.Web/Modules/Orchard.SecureSocketsLayer/Models/SslSettingsPart.cs +++ b/src/Orchard.Web/Modules/Orchard.SecureSocketsLayer/Models/SslSettingsPart.cs @@ -12,6 +12,8 @@ namespace Orchard.SecureSocketsLayer.Models { } public class SslSettingsPart : ContentPart { + public const string CacheKey = "SslSettingsPart"; + public string Urls { get { return this.As().Get("Urls"); } diff --git a/src/Orchard.Web/Modules/Orchard.SecureSocketsLayer/Services/SecureSocketsLayerService.cs b/src/Orchard.Web/Modules/Orchard.SecureSocketsLayer/Services/SecureSocketsLayerService.cs index 53c00cb2d..0993e6b37 100644 --- a/src/Orchard.Web/Modules/Orchard.SecureSocketsLayer/Services/SecureSocketsLayerService.cs +++ b/src/Orchard.Web/Modules/Orchard.SecureSocketsLayer/Services/SecureSocketsLayerService.cs @@ -13,10 +13,15 @@ namespace Orchard.SecureSocketsLayer.Services { public class SecureSocketsLayerService : ISecureSocketsLayerService { private readonly IWorkContextAccessor _workContextAccessor; private readonly ICacheManager _cacheManager; + private readonly ISignals _signals; - public SecureSocketsLayerService(IWorkContextAccessor workContextAccessor, ICacheManager cacheManager) { + public SecureSocketsLayerService( + IWorkContextAccessor workContextAccessor, + ICacheManager cacheManager, + ISignals signals) { _workContextAccessor = workContextAccessor; _cacheManager = cacheManager; + _signals = signals; } public bool ShouldBeSecure(string actionName, string controllerName, RouteValueDictionary routeValues) { @@ -186,6 +191,7 @@ namespace Orchard.SecureSocketsLayer.Services { private SslSettings GetSettings() { return _cacheManager.Get("SslSettings", ctx => { + ctx.Monitor(_signals.When(SslSettingsPart.CacheKey)); var settingsPart = _workContextAccessor.GetContext().CurrentSite.As(); return new SslSettings { Urls = settingsPart.Urls,