From 8337f1697da512376071baf3c62b897e8c5103da Mon Sep 17 00:00:00 2001 From: Jeremy Marc Date: Wed, 25 Apr 2018 20:43:42 +0200 Subject: [PATCH 1/2] add query parameter blacklist option --- src/apicache.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/apicache.js b/src/apicache.js index 7936287..df48b13 100644 --- a/src/apicache.js +++ b/src/apicache.js @@ -1,4 +1,5 @@ var url = require('url') +var querystring = require('querystring') var MemoryCache = require('./memory-cache') var pkg = require('../package.json') @@ -37,6 +38,7 @@ function ApiCache() { appendKey: [], jsonp: false, redisClient: false, + queryParamsBlacklist:[], headerBlacklist: [], statusCodes: { include: [], @@ -418,6 +420,20 @@ function ApiCache() { key = url.parse(key).pathname } + // Remove blacklisted query params + if (opt.queryParamsBlacklist.length > 0) { + var queryParams = querystring.parse(url.parse(key).query) + var validQueryParams = Object.keys(queryParams) + .filter(function (key) { + return globalOptions.queryParamsBlacklist.indexOf(key) === -1 + }) + .reduce(function (acc, header) { + acc[header] = queryParams[header] + return acc + }, {}) + key = url.parse(key).pathname + '?' + querystring.stringify(validQueryParams) + } + // add appendKey (either custom function or response path) if (typeof opt.appendKey === 'function') { key += '$$appendKey=' + opt.appendKey(req, res) From 6ae593ce856b2ee9aeb60b1f13254fa18d32e50c Mon Sep 17 00:00:00 2001 From: Jeremy Marc Date: Sat, 28 Apr 2018 01:18:25 +0200 Subject: [PATCH 2/2] verify query param length before adding them to the cache key --- src/apicache.js | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/apicache.js b/src/apicache.js index df48b13..f6ce3a2 100644 --- a/src/apicache.js +++ b/src/apicache.js @@ -420,18 +420,24 @@ function ApiCache() { key = url.parse(key).pathname } - // Remove blacklisted query params + // Remove blacklisted query params if (opt.queryParamsBlacklist.length > 0) { var queryParams = querystring.parse(url.parse(key).query) - var validQueryParams = Object.keys(queryParams) - .filter(function (key) { - return globalOptions.queryParamsBlacklist.indexOf(key) === -1 - }) - .reduce(function (acc, header) { - acc[header] = queryParams[header] - return acc - }, {}) - key = url.parse(key).pathname + '?' + querystring.stringify(validQueryParams) + if (Object.keys(queryParams).length > 0) { + var validQueryParams = Object.keys(queryParams) + .filter(function(key) { + return globalOptions.queryParamsBlacklist.indexOf(key) === -1 + }) + .reduce(function(acc, header) { + acc[header] = queryParams[header] + return acc + }, {}) + + key = url.parse(key).pathname + if (Object.keys(validQueryParams).length > 0) { + key += '?' + querystring.stringify(validQueryParams) + } + } } // add appendKey (either custom function or response path)