Require interactivity param in single-layer grid fetching request

Closes #69
This commit is contained in:
Sandro Santilli 2013-03-29 18:24:08 +01:00
parent aea107f1af
commit 3383c44eb7
4 changed files with 45 additions and 15 deletions

View File

@ -1,9 +1,9 @@
1.2.0 1.2.0
----- -----
WARNING: starting from this commit the grid fetching route changed WARNING: starting from this commit the multilayer grid fetching
to NOT include layer name nor interactivity (which is now route changed to NOT include layer name nor interactivity
specified solely as part of layergroup configuration) (now specified solely as part of layergroup configuration)
* Handle SQL API errors by requesting no Varnish cache * Handle SQL API errors by requesting no Varnish cache
* Fix X-Cache-Channel for multilayer (by token) responses * Fix X-Cache-Channel for multilayer (by token) responses
@ -11,7 +11,8 @@ WARNING: starting from this commit the grid fetching route changed
* Deprecate signal handler for USR1, add handler for USR2 (#71) * Deprecate signal handler for USR1, add handler for USR2 (#71)
* Fix support for ampersend characters in CartoCSS * Fix support for ampersend characters in CartoCSS
* Add support for LZMA compressed GET parameters * Add support for LZMA compressed GET parameters
* Remove interactivity parameters from grid fetching route * Remove interactivity config from multilayer grid fetching route
* Require interactivity param in single-layer grid fetching request (#69)
1.1.8 1.1.8
----- -----

View File

@ -303,7 +303,8 @@ module.exports = function(){
_.extend(req.params, req.query); _.extend(req.params, req.query);
// for cartodb, ensure interactivity is cartodb_id or user specified // for cartodb, ensure interactivity is cartodb_id or user specified
req.params.interactivity = req.params.interactivity || 'cartodb_id'; // Don't: https://github.com/Vizzuality/Windshaft-cartodb/issues/69
//req.params.interactivity = req.params.interactivity || 'cartodb_id';
req.params.processXML = function(req, xml, callback) { req.params.processXML = function(req, xml, callback) {
var dbuser = req.dbuser ? req.dbuser : global.settings.postgres.user; var dbuser = req.dbuser ? req.dbuser : global.settings.postgres.user;

View File

@ -530,11 +530,24 @@ suite('server', function() {
// //
///////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////
test("get'ing a json with default style should return an grid", function(done){ test("get'ing a grid with no interactivity should fail", function(done){
assert.response(server, { assert.response(server, {
headers: {host: 'localhost'}, headers: {host: 'localhost'},
url: '/tiles/gadm4/6/31/24.grid.json', url: '/tiles/gadm4/6/31/24.grid.json',
method: 'GET' method: 'GET'
},{}, function(res) {
assert.equal(res.statusCode, 400, res.statusCode + ': ' + res.body);
assert.deepEqual(JSON.parse(res.body), {"error":"Missing interactivity parameter"});
done();
});
});
test("get'ing a json with default style should return an grid", function(done){
assert.response(server, {
headers: {host: 'localhost'},
url: '/tiles/gadm4/6/31/24.grid.json?interactivity=cartodb_id',
method: 'GET'
},{ },{
status: 200, status: 200,
headers: { 'Content-Type': 'text/javascript; charset=utf-8; charset=utf-8', headers: { 'Content-Type': 'text/javascript; charset=utf-8; charset=utf-8',
@ -545,7 +558,7 @@ suite('server', function() {
test("get'ing a json with default style should return an grid", function(done){ test("get'ing a json with default style should return an grid", function(done){
assert.response(server, { assert.response(server, {
headers: {host: 'localhost'}, headers: {host: 'localhost'},
url: '/tiles/gadm4/6/31/24.grid.json', url: '/tiles/gadm4/6/31/24.grid.json?interactivity=cartodb_id',
method: 'GET' method: 'GET'
},{ },{
status: 200, status: 200,
@ -554,10 +567,13 @@ suite('server', function() {
}); });
test("get'ing a json with default style and sql should return a constrained grid", function(done){ test("get'ing a json with default style and sql should return a constrained grid", function(done){
var sql = querystring.stringify({sql: "SELECT * FROM gadm4 WHERE codineprov = '08'"}) var q = querystring.stringify({
interactivity: 'cartodb_id',
sql: "SELECT * FROM gadm4 WHERE codineprov = '08'"
})
assert.response(server, { assert.response(server, {
headers: {host: 'localhost'}, headers: {host: 'localhost'},
url: '/tiles/gadm4/6/31/24.grid.json?' + sql, url: '/tiles/gadm4/6/31/24.grid.json?' + q,
method: 'GET' method: 'GET'
},{ },{
status: 200, status: 200,
@ -569,7 +585,7 @@ suite('server', function() {
function(done) { function(done) {
assert.response(server, { assert.response(server, {
headers: {host: 'localhost'}, headers: {host: 'localhost'},
url: '/tiles/test_table_private_1/6/31/24.grid.json', url: '/tiles/test_table_private_1/6/31/24.grid.json?interactivity=cartodb_id',
method: 'GET' method: 'GET'
},{}, function(res) { },{}, function(res) {
// 401 Unauthorized // 401 Unauthorized
@ -583,7 +599,7 @@ suite('server', function() {
function(done) { function(done) {
assert.response(server, { assert.response(server, {
headers: {host: 'unknown_user'}, headers: {host: 'unknown_user'},
url: '/tiles/test_table_private_1/6/31/24.grid.json', url: '/tiles/test_table_private_1/6/31/24.grid.json?interactivity=cartodb_id',
method: 'GET' method: 'GET'
},{ },{
}, function(res) { }, function(res) {
@ -599,7 +615,7 @@ suite('server', function() {
function(done) { function(done) {
assert.response(server, { assert.response(server, {
headers: {host: 'localhost'}, headers: {host: 'localhost'},
url: '/tiles/test_table_private_1/6/31/24.grid.json?map_key=1234', url: '/tiles/test_table_private_1/6/31/24.grid.json?map_key=1234&interactivity=cartodb_id',
method: 'GET' method: 'GET'
},{}, function(res) { },{}, function(res) {
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);

View File

@ -19,7 +19,7 @@ suite('req2params', function() {
assert.ok(_.isObject(req.query), 'request has query'); assert.ok(_.isObject(req.query), 'request has query');
assert.ok(!req.query.hasOwnProperty('dbuser'), 'dbuser was removed from query'); assert.ok(!req.query.hasOwnProperty('dbuser'), 'dbuser was removed from query');
assert.ok(req.hasOwnProperty('params'), 'request has params'); assert.ok(req.hasOwnProperty('params'), 'request has params');
assert.ok(req.params.hasOwnProperty('interactivity'), 'request params have interactivity'); assert.ok(!req.params.hasOwnProperty('interactivity'), 'request params have interactivity');
assert.equal(req.params.dbname, 'cartodb_test_user_1_db', 'could forge dbname: '+ req.params.dbname); assert.equal(req.params.dbname, 'cartodb_test_user_1_db', 'could forge dbname: '+ req.params.dbname);
assert.ok(!req.hasOwnProperty('dbuser'), 'could inject dbuser ('+req.params.dbuser+')'); assert.ok(!req.hasOwnProperty('dbuser'), 'could inject dbuser ('+req.params.dbuser+')');
done(); done();
@ -33,7 +33,7 @@ suite('req2params', function() {
assert.ok(_.isObject(req.query), 'request has query'); assert.ok(_.isObject(req.query), 'request has query');
assert.ok(!req.query.hasOwnProperty('dbuser'), 'dbuser was removed from query'); assert.ok(!req.query.hasOwnProperty('dbuser'), 'dbuser was removed from query');
assert.ok(req.hasOwnProperty('params'), 'request has params'); assert.ok(req.hasOwnProperty('params'), 'request has params');
assert.ok(req.params.hasOwnProperty('interactivity'), 'request params have interactivity'); assert.ok(!req.params.hasOwnProperty('interactivity'), 'request params have interactivity');
// database_name for user "localhost" (see test/support/prepare_db.sh) // database_name for user "localhost" (see test/support/prepare_db.sh)
assert.equal(req.params.dbname, 'cartodb_test_user_1_db'); assert.equal(req.params.dbname, 'cartodb_test_user_1_db');
// unauthenticated request gets no dbuser // unauthenticated request gets no dbuser
@ -49,7 +49,7 @@ suite('req2params', function() {
assert.ok(_.isObject(req.query), 'request has query'); assert.ok(_.isObject(req.query), 'request has query');
assert.ok(!req.query.hasOwnProperty('dbuser'), 'dbuser was removed from query'); assert.ok(!req.query.hasOwnProperty('dbuser'), 'dbuser was removed from query');
assert.ok(req.hasOwnProperty('params'), 'request has params'); assert.ok(req.hasOwnProperty('params'), 'request has params');
assert.ok(req.params.hasOwnProperty('interactivity'), 'request params have interactivity'); assert.ok(!req.params.hasOwnProperty('interactivity'), 'request params have interactivity');
// database_name for user "localhost" (see test/support/prepare_db.sh) // database_name for user "localhost" (see test/support/prepare_db.sh)
assert.equal(req.params.dbname, 'cartodb_test_user_1_db'); assert.equal(req.params.dbname, 'cartodb_test_user_1_db');
// id for user "localhost" (see test/support/prepare_db.sh) // id for user "localhost" (see test/support/prepare_db.sh)
@ -63,4 +63,16 @@ suite('req2params', function() {
}); });
}); });
test('retains interactivity', function(done){
opts.req2params({headers: { host:'localhost' }, query: {interactivity: 'fld'} }, function(err, req) {
if ( err ) { console.log(err); throw new Error(err); }
//console.dir(req);
assert.ok(_.isObject(req.query), 'request has query');
assert.ok(!req.query.hasOwnProperty('dbuser'), 'dbuser was removed from query');
assert.ok(req.hasOwnProperty('params'), 'request has params');
assert.ok(req.params.hasOwnProperty('interactivity'), 'request params has no interactivity');
done();
});
});
}); });