public override IResourceDataResult Filter(IResourceDataRequest request, ISynchronousFilterChain chain, ILogger logger) { bool cacheEnabled = this.cacheResolver.IsSynchronousSupported; if (!cacheEnabled) { return(chain.Filter(request, logger)); } bool isDelete = request.Action == ResourceAction.Delete; bool isCustomDataPropertyRequest = request.Uri.ResourcePath.ToString().Contains("/customData/"); if (isCustomDataPropertyRequest && isDelete) { logger.Trace($"Request {request.Action} {request.Uri} is a custom data property delete, deleting cached property name if exists", "WriteCacheFilter.FilterAsync"); this.UncacheCustomDataProperty(request.Uri.ResourcePath, logger); } else if (isDelete) { logger.Trace($"Request {request.Action} {request.Uri} is a resource deletion, purging from cache if exists", "WriteCacheFilter.Filter"); var cacheKey = this.GetCacheKey(request); this.Uncache(request.Type, cacheKey); } var result = chain.Filter(request, logger); bool isEmailVerificationResponse = result.Type == typeof(IEmailVerificationToken); if (isEmailVerificationResponse) { logger.Trace($"Request {request.Action} {request.Uri} is an email verification request, purging account from cache if exists", "WriteCacheFilter.Filter"); this.UncacheAccountOnEmailVerification(result); } bool possibleCustomDataUpdate = (request.Action == ResourceAction.Create || request.Action == ResourceAction.Update) && AbstractExtendableInstanceResource.IsExtendable(request.Type); if (possibleCustomDataUpdate) { this.CacheNestedCustomDataUpdates(request, result, logger); } if (IsCacheable(request, result)) { logger.Trace($"Caching request {request.Action} {request.Uri}", "WriteCacheFilter.Filter"); this.Cache(result.Type, result.Body, logger); } return(result); }
public override IResourceDataResult Filter(IResourceDataRequest request, ISynchronousFilterChain chain, ILogger logger) { bool cacheEnabled = this.cacheResolver.IsSynchronousSupported; if (!cacheEnabled) { return chain.Filter(request, logger); } bool isDelete = request.Action == ResourceAction.Delete; bool isCustomDataPropertyRequest = request.Uri.ResourcePath.ToString().Contains("/customData/"); if (isCustomDataPropertyRequest && isDelete) { logger.Trace($"Request {request.Action} {request.Uri} is a custom data property delete, deleting cached property name if exists", "WriteCacheFilter.FilterAsync"); this.UncacheCustomDataProperty(request.Uri.ResourcePath, logger); } else if (isDelete) { logger.Trace($"Request {request.Action} {request.Uri} is a resource deletion, purging from cache if exists", "WriteCacheFilter.Filter"); var cacheKey = this.GetCacheKey(request); this.Uncache(request.Type, cacheKey); } var result = chain.Filter(request, logger); bool isEmailVerificationResponse = result.Type == typeof(IEmailVerificationToken); if (isEmailVerificationResponse) { logger.Trace($"Request {request.Action} {request.Uri} is an email verification request, purging account from cache if exists", "WriteCacheFilter.Filter"); this.UncacheAccountOnEmailVerification(result); } bool possibleCustomDataUpdate = (request.Action == ResourceAction.Create || request.Action == ResourceAction.Update) && AbstractExtendableInstanceResource.IsExtendable(request.Type); if (possibleCustomDataUpdate) { this.CacheNestedCustomDataUpdates(request, result, logger); } if (IsCacheable(request, result)) { logger.Trace($"Caching request {request.Action} {request.Uri}", "WriteCacheFilter.Filter"); this.Cache(result.Type, result.Body, logger); } return result; }
IResourceDataResult ISynchronousFilter.Filter(IResourceDataRequest request, ISynchronousFilterChain chain, ILogger logger) { if (request.Action == ResourceAction.Delete) { return(new DefaultResourceDataResult(ResourceAction.Delete, null, null, 204, null)); } else { return(chain.Filter(request, logger)); } }
IResourceDataResult ISynchronousFilter.Filter(IResourceDataRequest request, ISynchronousFilterChain chain, ILogger logger) { if (request.Action == ResourceAction.Delete) { return new DefaultResourceDataResult(ResourceAction.Delete, null, null, 204, null); } else { return chain.Filter(request, logger); } }
IResourceDataResult ISynchronousFilter.Filter(IResourceDataRequest request, ISynchronousFilterChain chain, ILogger logger) { if (request.Action == ResourceAction.Create) { return new DefaultResourceDataResult( ResourceAction.Create, typeof(IDictionary<string, object>), request.Uri, httpStatus: 200, body: new Dictionary<string, object>() { { "Foo", "bar" } }); } else { return chain.Filter(request, logger); } }
IResourceDataResult ISynchronousFilter.Filter(IResourceDataRequest request, ISynchronousFilterChain chain, ILogger logger) { if (request.Action == ResourceAction.Create) { return(new DefaultResourceDataResult( ResourceAction.Create, typeof(IDictionary <string, object>), request.Uri, httpStatus: 200, body: new Dictionary <string, object>() { { "Foo", "bar" } })); } else { return(chain.Filter(request, logger)); } }
IResourceDataResult ISynchronousFilter.Filter(IResourceDataRequest request, ISynchronousFilterChain chain, ILogger logger) { var result = chain.Filter(request, logger); if (!IsCreateOrUpdate(request)) { return(result); // short-circuit } if (!IsAccountStoreMapping(result)) { return(result); // short-circuit } var applicationHref = GetContainerHref("application", result); if (!string.IsNullOrEmpty(applicationHref)) { var application = chain.DataStore.GetResourceSkipCache <IApplication>(applicationHref); var allMappings = application.GetAccountStoreMappings().Synchronously().ToList(); logger.Trace($"AccountStoreMapping update detected; refreshing all {allMappings.Count} AccountStoreMappings in cache for Application '{applicationHref}'", "AccountStoreMappingCacheInvalidationFilter.Filter"); return(result); // done } var organizationHref = GetContainerHref("organization", result); if (!string.IsNullOrEmpty(organizationHref)) { var organization = chain.DataStore.GetResourceSkipCache <IOrganization>(organizationHref); var allMappings = organization.GetAccountStoreMappings().Synchronously().ToList(); logger.Trace($"AccountStoreMapping update detected; refreshing all {allMappings.Count} AccountStoreMappings in cache for Organization '{organizationHref}'", "AccountStoreMappingCacheInvalidationFilter.Filter"); return(result); // done } throw new NotSupportedException($"Unsupported AccountStore container type: {request.Type.Name}"); }
public override IResourceDataResult Filter(IResourceDataRequest request, ISynchronousFilterChain chain, ILogger logger) { bool cacheEnabled = this.cacheResolver.IsAsynchronousSupported && this.IsCacheRetrievalEnabled(request) && !request.SkipCache; if (cacheEnabled) { logger.Trace($"Checking cache for resource {request.Uri}", "ReadCacheFilter.Filter"); var result = this.GetCachedResourceData(request, logger); if (result != null) { logger.Trace($"Cache hit for {request.Uri}; returning cached data", "ReadCacheFilter.Filter"); return result; // short-circuit the remainder of the filter chain } logger.Trace($"Cache miss for {request.Uri}", "ReadCacheFilter.Filter"); } return chain.Filter(request, logger); }
IResourceDataResult ISynchronousFilter.Filter(IResourceDataRequest request, ISynchronousFilterChain chain, ILogger logger) { var result = chain.Filter(request, logger); if (!IsCreateOrUpdate(request)) { return result; // short-circuit } if (!IsAccountStoreMapping(result)) { return result; // short-circuit } var applicationHref = GetContainerHref("application", result); if (!string.IsNullOrEmpty(applicationHref)) { var application = chain.DataStore.GetResourceSkipCache<IApplication>(applicationHref); var allMappings = application.GetAccountStoreMappings().Synchronously().ToList(); logger.Trace($"AccountStoreMapping update detected; refreshing all {allMappings.Count} AccountStoreMappings in cache for Application '{applicationHref}'", "AccountStoreMappingCacheInvalidationFilter.Filter"); return result; // done } var organizationHref = GetContainerHref("organization", result); if (!string.IsNullOrEmpty(organizationHref)) { var organization = chain.DataStore.GetResourceSkipCache<IOrganization>(organizationHref); var allMappings = organization.GetAccountStoreMappings().Synchronously().ToList(); logger.Trace($"AccountStoreMapping update detected; refreshing all {allMappings.Count} AccountStoreMappings in cache for Organization '{organizationHref}'", "AccountStoreMappingCacheInvalidationFilter.Filter"); return result; // done } throw new NotSupportedException($"Unsupported AccountStore container type: {request.Type.Name}"); }
public override IResourceDataResult Filter(IResourceDataRequest request, ISynchronousFilterChain chain, ILogger logger) { bool cacheEnabled = this.cacheResolver.IsAsynchronousSupported && this.IsCacheRetrievalEnabled(request) && !request.SkipCache; if (cacheEnabled) { logger.Trace($"Checking cache for resource {request.Uri}", "ReadCacheFilter.Filter"); var result = this.GetCachedResourceData(request, logger); if (result != null) { logger.Trace($"Cache hit for {request.Uri}; returning cached data", "ReadCacheFilter.Filter"); return(result); // short-circuit the remainder of the filter chain } logger.Trace($"Cache miss for {request.Uri}", "ReadCacheFilter.Filter"); } return(chain.Filter(request, logger)); }
IResourceDataResult ISynchronousFilter.Filter(IResourceDataRequest request, ISynchronousFilterChain chain, ILogger logger) { var result = chain.Filter(request, logger); return(FilterCore(result)); }
IResourceDataResult ISynchronousFilter.Filter(IResourceDataRequest request, ISynchronousFilterChain chain, ILogger logger) { var result = chain.Filter(request, logger); return FilterCore(result); }