caching_middleware: ignore query string when generating cacheKey

no-duplicated-packages
webzwo0i 2020-11-21 03:13:55 +01:00
parent 0dbec84794
commit b9c82f78b1
2 changed files with 27 additions and 2 deletions

View File

@ -21,6 +21,7 @@ var path = require('path');
var zlib = require('zlib');
var settings = require('./Settings');
var existsSync = require('./path_exists');
const url = require('url');
/*
* The crypto module can be absent on reduced node installations.
@ -91,8 +92,14 @@ CachingMiddleware.prototype = new function () {
var supportsGzip =
(req.get('Accept-Encoding') || '').indexOf('gzip') != -1;
var path = require('url').parse(req.url).path;
var cacheKey = generateCacheKey(path);
/**
* `req.url` is either /file?callback=require.define&v=versionString
* or /file.
*
* invalid.invalid is just a placeholder
*/
let path = new url.URL(req.url, 'http://invalid.invalid').pathname;
let cacheKey = generateCacheKey(path);
fs.stat(CACHE_DIR + 'minified_' + cacheKey, function (error, stats) {
var modifiedSince = (req.headers['if-modified-since']

View File

@ -9,6 +9,8 @@ const settings = require('../../../src/node/utils/Settings');
const assert = require('assert').strict;
const url = require('url');
const queryString = require('querystring');
const fs = require('fs');
const path = require('path');
let agent;
@ -165,4 +167,20 @@ describe(__filename, function() {
})
});
context("different callback or version parameter", function(){
it('should never create new files', async function(){
const pathToVar = path.join(__filename, '../../../../var');
// the number of files in ./var should not change during this test
const minifiedFilesBefore = (await fs.promises.readdir(pathToVar)).length;
const resource1 = "/javascripts/lib/ep_etherpad-lite/static/js/ace2_common.js?callback=require.define";
const resource2 = "/javascripts/lib/ep_etherpad-lite/static/js/ace2_common.js?callback=require";
const resource3 = "/javascripts/lib/ep_etherpad-lite/static/js/ace2_common.js?callback=require.define&v=1234";
await agent.get(resource1);
await agent.get(resource2);
await agent.get(resource3);
const minifiedFilesAfter = (await fs.promises.readdir(pathToVar)).length;
assert.equal(minifiedFilesBefore, minifiedFilesAfter);
})
})
});