diff --git a/lib/cartodb/controllers/layergroup.js b/lib/cartodb/controllers/layergroup.js index 845f7eaf..1925225e 100644 --- a/lib/cartodb/controllers/layergroup.js +++ b/lib/cartodb/controllers/layergroup.js @@ -55,8 +55,6 @@ LayergroupController.prototype.attributes = function(req, res) { self.app.req2params(req, this); }, function retrieveFeatureAttributes(err) { - req.profiler.done('req2params'); - assert.ifError(err); var mapConfigProvider = new MapStoreMapConfigProvider( @@ -103,10 +101,7 @@ LayergroupController.prototype.tileOrLayer = function (req, res) { self.app.req2params(req, this); }, function mapController$getTileOrGrid(err) { - req.profiler.done('req2params'); - if ( err ) { - throw err; - } + assert.ifError(err); self.tileBackend.getTile( new MapStoreMapConfigProvider(self.mapStore, req.context.user, self.userLimitsApi, req.params), req.params, this @@ -192,7 +187,6 @@ LayergroupController.prototype.staticMap = function(req, res, width, height, zoo self.app.req2params(req, this); }, function(err) { - req.profiler.done('req2params'); assert.ifError(err); if (center) { self.previewBackend.getImage( diff --git a/lib/cartodb/server.js b/lib/cartodb/server.js index ad4ce2f9..6cad6466 100644 --- a/lib/cartodb/server.js +++ b/lib/cartodb/server.js @@ -348,6 +348,7 @@ module.exports = function(serverOptions) { _.extend(req.query, JSON.parse(result)); app.req2params(req, callback); } catch (err) { + req.profiler.done('req2params'); callback(new Error('Error parsing lzma as JSON: ' + err)); } } @@ -380,6 +381,7 @@ module.exports = function(serverOptions) { 'Cannot use map signature of user "' + req.params.signer + '" on db of user "' + user + '"' ); err.http_status = 403; + req.profiler.done('req2params'); callback(err); return; } @@ -420,6 +422,7 @@ module.exports = function(serverOptions) { }, function finishSetup(err) { if ( err ) { + req.profiler.done('req2params'); return callback(err, req); } @@ -432,6 +435,7 @@ module.exports = function(serverOptions) { dbport: global.environment.postgres.port }); + req.profiler.done('req2params'); callback(null, req); } ); diff --git a/test/unit/cartodb/req2params.test.js b/test/unit/cartodb/req2params.test.js index d0c83416..a46941a7 100644 --- a/test/unit/cartodb/req2params.test.js +++ b/test/unit/cartodb/req2params.test.js @@ -18,14 +18,17 @@ suite('req2params', function() { assert.ok(_.isFunction(server.req2params)); }); - function addContext(req) { + function prepareRequest(req) { + req.profiler = { + done: function() {} + }; req.context = { user: 'localhost' }; return req; } test('cleans up request', function(done){ var req = {headers: { host:'localhost' }, query: {dbuser:'hacker',dbname:'secret'}}; - server.req2params(addContext(req), function(err, req) { + server.req2params(prepareRequest(req), function(err, req) { if ( err ) { done(err); return; } assert.ok(_.isObject(req.query), 'request has query'); assert.ok(!req.query.hasOwnProperty('dbuser'), 'dbuser was removed from query'); @@ -39,7 +42,7 @@ suite('req2params', function() { test('sets dbname from redis metadata', function(done){ var req = {headers: { host:'localhost' }, query: {} }; - server.req2params(addContext(req), function(err, req) { + server.req2params(prepareRequest(req), function(err, req) { if ( err ) { done(err); return; } //console.dir(req); assert.ok(_.isObject(req.query), 'request has query'); @@ -54,7 +57,7 @@ suite('req2params', function() { test('sets also dbuser for authenticated requests', function(done){ var req = {headers: { host:'localhost' }, query: {map_key: '1234'} }; - server.req2params(addContext(req), function(err, req) { + server.req2params(prepareRequest(req), function(err, req) { if ( err ) { done(err); return; } //console.dir(req); assert.ok(_.isObject(req.query), 'request has query'); @@ -63,8 +66,16 @@ suite('req2params', function() { assert.ok(!req.params.hasOwnProperty('interactivity'), 'request params do not have interactivity'); assert.equal(req.params.dbname, test_database); assert.equal(req.params.dbuser, test_user); - - server.req2params(addContext({headers: { host:'localhost' }, query: {map_key: '1235'} }), function(err, req) { + + req = { + headers: { + host:'localhost' + }, + query: { + map_key: '1235' + } + }; + server.req2params(prepareRequest(req), function(err, req) { // wrong key resets params to no user assert.ok(req.params.dbuser === test_pubuser, 'could inject dbuser ('+req.params.dbuser+')'); done(); @@ -90,7 +101,7 @@ suite('req2params', function() { lzma: data } }; - server.req2params(addContext(req), function(err, req) { + server.req2params(prepareRequest(req), function(err, req) { if ( err ) { return done(err); }