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.Handlers;
using Orchard.Localization;
@ -6,9 +7,11 @@ using Orchard.SecureSocketsLayer.Models;
namespace Orchard.SecureSocketsLayer.Drivers {
public class SslSettingsPartDriver : ContentPartDriver<SslSettingsPart> {
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) {

View File

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

View File

@ -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<SslSettingsPart>();
return new SslSettings {
Urls = settingsPart.Urls,