From 026a0750e398f14732a1121350d666cd14e99865 Mon Sep 17 00:00:00 2001 From: Raul Ochoa Date: Tue, 21 Apr 2015 18:59:52 +0200 Subject: [PATCH] Call callback on invalid map store token for named maps fixes #267 --- lib/cartodb/server_options.js | 8 +++-- test/acceptance/templates.js | 62 +++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 2 deletions(-) diff --git a/lib/cartodb/server_options.js b/lib/cartodb/server_options.js index 188ba578..a3f9d029 100644 --- a/lib/cartodb/server_options.js +++ b/lib/cartodb/server_options.js @@ -400,7 +400,9 @@ module.exports = function(redisPool) { } mapStore.load(layergroup_id, function(err, mapConfig) { - assert.ifError(err); + if (err) { + return callback(err); + } var authorized = me.templateMaps.isAuthorized(mapConfig.obj().template, auth_token); @@ -475,7 +477,9 @@ module.exports = function(redisPool) { }); }, function checkSignAuthorized(err, signed_by){ - assert.ifError(err); + if (err) { + return callback(err); + } if ( ! signed_by ) { // request not authorized by signer. diff --git a/test/acceptance/templates.js b/test/acceptance/templates.js index de87158f..aaf3e6b0 100644 --- a/test/acceptance/templates.js +++ b/test/acceptance/templates.js @@ -2045,6 +2045,68 @@ describe('template_api', function() { ); }); + describe('named map nonexistent tokens', function() { + var username = 'localhost'; + var templateHash = 'deadbeef'; + var nonexistentToken = 'wadus'; + + function request(token) { + return { + url: '/api/v1/map/' + token + '/all/0/0/0.png', + method: 'GET', + headers: { + host: username + }, + encoding: 'binary' + }; + } + + var expectedResponse = { + headers: { + 'Content-Type': 'application/json; charset=utf-8' + }, + status: 400 + }; + + function checkTileFn(done) { + return function checkTile(res, err) { + if (err) { + return done(err); + } + assert.deepEqual(JSON.parse(res.body), { + error: "Invalid or nonexistent map configuration token '" + nonexistentToken + "'" + }); + + done(); + }; + } + + it("returns an error for named map nonexistent tokens", function(done) { + + var nonexistentNamedMapToken = username + '@' + templateHash + '@' + nonexistentToken; + + assert.response( + server, + request(nonexistentNamedMapToken), + expectedResponse, + checkTileFn(done) + ); + }); + + it("returns an error for named map nonexistent tokens without template hash", function(done) { + + var nonexistentNamedMapToken = username + '@' + nonexistentToken; + + assert.response( + server, + request(nonexistentNamedMapToken), + expectedResponse, + checkTileFn(done) + ); + }); + + }); + after(function(done) { // This test will add map_style records, like