Invalidating SSL settings cache

This commit is contained in:
Sebastien Ros 2013-10-09 12:13:49 -07:00
parent 7abd20f9ec
commit 03f6d06f36
3 changed files with 19 additions and 4 deletions

View File

@ -1,4 +1,5 @@
using Orchard.ContentManagement; using Orchard.Caching;
using Orchard.ContentManagement;
using Orchard.ContentManagement.Drivers; using Orchard.ContentManagement.Drivers;
using Orchard.ContentManagement.Handlers; using Orchard.ContentManagement.Handlers;
using Orchard.Localization; using Orchard.Localization;
@ -6,9 +7,11 @@ using Orchard.SecureSocketsLayer.Models;
namespace Orchard.SecureSocketsLayer.Drivers { namespace Orchard.SecureSocketsLayer.Drivers {
public class SslSettingsPartDriver : ContentPartDriver<SslSettingsPart> { public class SslSettingsPartDriver : ContentPartDriver<SslSettingsPart> {
private readonly ISignals _signals;
private const string TemplateName = "Parts/SecureSocketsLayer.Settings"; private const string TemplateName = "Parts/SecureSocketsLayer.Settings";
public SslSettingsPartDriver() { public SslSettingsPartDriver(ISignals signals) {
_signals = signals;
T = NullLocalizer.Instance; T = NullLocalizer.Instance;
} }
@ -25,7 +28,9 @@ namespace Orchard.SecureSocketsLayer.Drivers {
} }
protected override DriverResult Editor(SslSettingsPart part, IUpdateModel updater, dynamic shapeHelper) { 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); return Editor(part, shapeHelper);
} }
@ -37,6 +42,8 @@ namespace Orchard.SecureSocketsLayer.Drivers {
part.Urls = context.Attribute(elementName, "Urls") ?? ""; part.Urls = context.Attribute(elementName, "Urls") ?? "";
part.InsecureHostName = context.Attribute(elementName, "InsecureHostName") ?? ""; part.InsecureHostName = context.Attribute(elementName, "InsecureHostName") ?? "";
part.SecureHostName = context.Attribute(elementName, "SecureHostName") ?? ""; part.SecureHostName = context.Attribute(elementName, "SecureHostName") ?? "";
_signals.Trigger(SslSettingsPart.CacheKey);
} }
protected override void Exporting(SslSettingsPart part, ExportContentContext context) { protected override void Exporting(SslSettingsPart part, ExportContentContext context) {

View File

@ -12,6 +12,8 @@ namespace Orchard.SecureSocketsLayer.Models {
} }
public class SslSettingsPart : ContentPart { public class SslSettingsPart : ContentPart {
public const string CacheKey = "SslSettingsPart";
public string Urls public string Urls
{ {
get { return this.As<InfosetPart>().Get<SslSettingsPart>("Urls"); } get { return this.As<InfosetPart>().Get<SslSettingsPart>("Urls"); }

View File

@ -13,10 +13,15 @@ namespace Orchard.SecureSocketsLayer.Services {
public class SecureSocketsLayerService : ISecureSocketsLayerService { public class SecureSocketsLayerService : ISecureSocketsLayerService {
private readonly IWorkContextAccessor _workContextAccessor; private readonly IWorkContextAccessor _workContextAccessor;
private readonly ICacheManager _cacheManager; private readonly ICacheManager _cacheManager;
private readonly ISignals _signals;
public SecureSocketsLayerService(IWorkContextAccessor workContextAccessor, ICacheManager cacheManager) { public SecureSocketsLayerService(
IWorkContextAccessor workContextAccessor,
ICacheManager cacheManager,
ISignals signals) {
_workContextAccessor = workContextAccessor; _workContextAccessor = workContextAccessor;
_cacheManager = cacheManager; _cacheManager = cacheManager;
_signals = signals;
} }
public bool ShouldBeSecure(string actionName, string controllerName, RouteValueDictionary routeValues) { public bool ShouldBeSecure(string actionName, string controllerName, RouteValueDictionary routeValues) {
@ -186,6 +191,7 @@ namespace Orchard.SecureSocketsLayer.Services {
private SslSettings GetSettings() { private SslSettings GetSettings() {
return _cacheManager.Get("SslSettings", return _cacheManager.Get("SslSettings",
ctx => { ctx => {
ctx.Monitor(_signals.When(SslSettingsPart.CacheKey));
var settingsPart = _workContextAccessor.GetContext().CurrentSite.As<SslSettingsPart>(); var settingsPart = _workContextAccessor.GetContext().CurrentSite.As<SslSettingsPart>();
return new SslSettings { return new SslSettings {
Urls = settingsPart.Urls, Urls = settingsPart.Urls,