finishing integration of lzma middleware

This commit is contained in:
Simon 2017-09-22 16:46:39 +02:00
parent 9d81321d78
commit c09899913f
4 changed files with 14 additions and 61 deletions

View File

@ -1,8 +1,8 @@
'use strict'; 'use strict';
var LZMA = require('lzma').LZMA; const LZMA = require('lzma').LZMA;
var lzmaWorker = new LZMA(); const lzmaWorker = new LZMA();
module.exports = function lzmaMiddleware(req, res, next) { module.exports = function lzmaMiddleware(req, res, next) {
if (!req.query.hasOwnProperty('lzma')) { if (!req.query.hasOwnProperty('lzma')) {

View File

@ -2,9 +2,6 @@ var assert = require('assert');
var _ = require('underscore'); var _ = require('underscore');
var step = require('step'); var step = require('step');
var LZMA = require('lzma').LZMA;
var lzmaWorker = new LZMA();
// Whitelist query parameters and attach format // Whitelist query parameters and attach format
var REQUEST_QUERY_PARAMS_WHITELIST = [ var REQUEST_QUERY_PARAMS_WHITELIST = [
@ -20,7 +17,7 @@ var REQUEST_QUERY_PARAMS_WHITELIST = [
'filters' // json 'filters' // json
]; ];
// jshint maxcomplexity:10 // jshint maxcomplexity:8
/** /**
* Whitelist input and get database name & default geometry type from * Whitelist input and get database name & default geometry type from
* subdomain/user metadata held in CartoDB Redis * subdomain/user metadata held in CartoDB Redis
@ -29,35 +26,6 @@ var REQUEST_QUERY_PARAMS_WHITELIST = [
*/ */
module.exports = function req2paramsMiddleware (authApi, pgConnection) { module.exports = function req2paramsMiddleware (authApi, pgConnection) {
return function req2params (req, res, next) { return function req2params (req, res, next) {
if ( req.query.lzma ) {
// Decode (from base64)
var lzma = new Buffer(req.query.lzma, 'base64')
.toString('binary')
.split('')
.map(function(c) {
return c.charCodeAt(0) - 128;
});
// Decompress
lzmaWorker.decompress(
lzma,
function(result) {
req.profiler.done('lzma');
try {
delete req.query.lzma;
_.extend(req.query, JSON.parse(result));
req2params(req, res, next);
} catch (err) {
req.profiler.done('req2params');
next(new Error('Error parsing lzma as JSON: ' + err));
}
}
);
return;
}
var allowedQueryParams = REQUEST_QUERY_PARAMS_WHITELIST; var allowedQueryParams = REQUEST_QUERY_PARAMS_WHITELIST;
if (Array.isArray(req.context.allowedQueryParams)) { if (Array.isArray(req.context.allowedQueryParams)) {
allowedQueryParams = allowedQueryParams.concat(req.context.allowedQueryParams); allowedQueryParams = allowedQueryParams.concat(req.context.allowedQueryParams);

View File

@ -4,8 +4,6 @@ var RedisPool = require('redis-mpool');
var cartodbRedis = require('cartodb-redis'); var cartodbRedis = require('cartodb-redis');
var _ = require('underscore'); var _ = require('underscore');
var lzmaMiddleware = require('./middleware/lzma');
var controller = require('./controllers'); var controller = require('./controllers');
var SurrogateKeysCache = require('./cache/surrogate_keys_cache'); var SurrogateKeysCache = require('./cache/surrogate_keys_cache');
@ -46,6 +44,7 @@ var MapConfigAdapter = require('./models/mapconfig/adapter');
var StatsBackend = require('./backends/stats'); var StatsBackend = require('./backends/stats');
const lzmaMiddleware = require('./middleware/lzma');
const errorMiddleware = require('./middleware/error-middleware'); const errorMiddleware = require('./middleware/error-middleware');
module.exports = function(serverOptions) { module.exports = function(serverOptions) {

View File

@ -1,6 +1,5 @@
var assert = require('assert'); var assert = require('assert');
var _ = require('underscore'); var _ = require('underscore');
require('../../support/test_helper');
var RedisPool = require('redis-mpool'); var RedisPool = require('redis-mpool');
var cartodbRedis = require('cartodb-redis'); var cartodbRedis = require('cartodb-redis');
@ -116,30 +115,17 @@ describe('req2params', function() {
config: config config: config
} }
}; };
test_helper.lzma_compress_to_base64(JSON.stringify(qo), 1, function(err, data) { var res = {};
var req = {
headers: {
host:'localhost'
},
query: {
non_included: 'toberemoved',
api_key: 'test',
style: 'override',
lzma: data
}
};
var res = {};
req2params(prepareRequest(req), res, function(err, req) {
if ( err ) {
return done(err);
}
var query = req.params;
assert.deepEqual(qo.config, query.config);
assert.equal('test', query.api_key);
assert.equal(undefined, query.non_included);
done();
});
req2params(prepareRequest(req), res, function(err, req) {
if ( err ) {
return done(err);
}
var query = req.params;
assert.deepEqual(config, query.config);
assert.equal('test', query.api_key);
assert.equal(undefined, query.non_included);
done();
}); });
}); });