Merge pull request #655 from CartoDB/static-maps-layers-filter
Static maps layers filter
This commit is contained in:
commit
c325df1414
@ -36,7 +36,7 @@ function BaseController(authApi, pgConnection) {
|
|||||||
|
|
||||||
module.exports = BaseController;
|
module.exports = BaseController;
|
||||||
|
|
||||||
// jshint maxcomplexity:9
|
// jshint maxcomplexity:10
|
||||||
/**
|
/**
|
||||||
* 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
|
||||||
@ -75,7 +75,11 @@ BaseController.prototype.req2params = function(req, callback){
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
req.query = _.pick(req.query, REQUEST_QUERY_PARAMS_WHITELIST);
|
var allowedQueryParams = REQUEST_QUERY_PARAMS_WHITELIST;
|
||||||
|
if (Array.isArray(req.context.allowedQueryParams)) {
|
||||||
|
allowedQueryParams = allowedQueryParams.concat(req.context.allowedQueryParams);
|
||||||
|
}
|
||||||
|
req.query = _.pick(req.query, allowedQueryParams);
|
||||||
req.params = _.extend({}, req.params); // shuffle things as request is a strange array/object
|
req.params = _.extend({}, req.params); // shuffle things as request is a strange array/object
|
||||||
|
|
||||||
var user = req.context.user;
|
var user = req.context.user;
|
||||||
|
@ -6,6 +6,7 @@ var BaseController = require('./base');
|
|||||||
|
|
||||||
var cors = require('../middleware/cors');
|
var cors = require('../middleware/cors');
|
||||||
var userMiddleware = require('../middleware/user');
|
var userMiddleware = require('../middleware/user');
|
||||||
|
var allowQueryParams = require('../middleware/allow-query-params');
|
||||||
|
|
||||||
var DataviewBackend = require('../backends/dataview');
|
var DataviewBackend = require('../backends/dataview');
|
||||||
var AnalysisStatusBackend = require('../backends/analysis-status');
|
var AnalysisStatusBackend = require('../backends/analysis-status');
|
||||||
@ -67,11 +68,13 @@ LayergroupController.prototype.register = function(app) {
|
|||||||
this.attributes.bind(this));
|
this.attributes.bind(this));
|
||||||
|
|
||||||
app.get(app.base_url_mapconfig +
|
app.get(app.base_url_mapconfig +
|
||||||
'/static/center/:token/:z/:lat/:lng/:width/:height.:format', cors(), userMiddleware,
|
'/static/center/:token/:z/:lat/:lng/:width/:height.:format',
|
||||||
|
cors(), userMiddleware, allowQueryParams(['layer']),
|
||||||
this.center.bind(this));
|
this.center.bind(this));
|
||||||
|
|
||||||
app.get(app.base_url_mapconfig +
|
app.get(app.base_url_mapconfig +
|
||||||
'/static/bbox/:token/:west,:south,:east,:north/:width/:height.:format', cors(), userMiddleware,
|
'/static/bbox/:token/:west,:south,:east,:north/:width/:height.:format',
|
||||||
|
cors(), userMiddleware, allowQueryParams(['layer']),
|
||||||
this.bbox.bind(this));
|
this.bbox.bind(this));
|
||||||
|
|
||||||
// Undocumented/non-supported API endpoint methods.
|
// Undocumented/non-supported API endpoint methods.
|
||||||
|
@ -8,6 +8,7 @@ var BaseController = require('./base');
|
|||||||
|
|
||||||
var cors = require('../middleware/cors');
|
var cors = require('../middleware/cors');
|
||||||
var userMiddleware = require('../middleware/user');
|
var userMiddleware = require('../middleware/user');
|
||||||
|
var allowQueryParams = require('../middleware/allow-query-params');
|
||||||
|
|
||||||
function NamedMapsController(authApi, pgConnection, namedMapProviderCache, tileBackend, previewBackend,
|
function NamedMapsController(authApi, pgConnection, namedMapProviderCache, tileBackend, previewBackend,
|
||||||
surrogateKeysCache, tablesExtentApi, metadataBackend) {
|
surrogateKeysCache, tablesExtentApi, metadataBackend) {
|
||||||
@ -31,7 +32,7 @@ NamedMapsController.prototype.register = function(app) {
|
|||||||
this.tile.bind(this));
|
this.tile.bind(this));
|
||||||
|
|
||||||
app.get(app.base_url_mapconfig +
|
app.get(app.base_url_mapconfig +
|
||||||
'/static/named/:template_id/:width/:height.:format', cors(), userMiddleware,
|
'/static/named/:template_id/:width/:height.:format', cors(), userMiddleware, allowQueryParams(['layer']),
|
||||||
this.staticMap.bind(this));
|
this.staticMap.bind(this));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
9
lib/cartodb/middleware/allow-query-params.js
Normal file
9
lib/cartodb/middleware/allow-query-params.js
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
module.exports = function allowQueryParams(params) {
|
||||||
|
if (!Array.isArray(params)) {
|
||||||
|
throw new Error('allowQueryParams must receive an Array of params');
|
||||||
|
}
|
||||||
|
return function allowQueryParamsMiddleware(req, res, next) {
|
||||||
|
req.context.allowedQueryParams = params;
|
||||||
|
next();
|
||||||
|
};
|
||||||
|
};
|
@ -21,7 +21,7 @@ describe('named maps static view', function() {
|
|||||||
|
|
||||||
var IMAGE_TOLERANCE = 20;
|
var IMAGE_TOLERANCE = 20;
|
||||||
|
|
||||||
function createTemplate(view) {
|
function createTemplate(view, layers) {
|
||||||
return {
|
return {
|
||||||
version: '0.0.1',
|
version: '0.0.1',
|
||||||
name: templateName,
|
name: templateName,
|
||||||
@ -36,7 +36,7 @@ describe('named maps static view', function() {
|
|||||||
},
|
},
|
||||||
view: view,
|
view: view,
|
||||||
layergroup: {
|
layergroup: {
|
||||||
layers: [
|
layers: layers || [
|
||||||
{
|
{
|
||||||
type: 'mapnik',
|
type: 'mapnik',
|
||||||
options: {
|
options: {
|
||||||
@ -198,4 +198,43 @@ describe('named maps static view', function() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should allow to select the layers to render', function (done) {
|
||||||
|
var view = {
|
||||||
|
bounds: {
|
||||||
|
west: 0,
|
||||||
|
south: 0,
|
||||||
|
east: 45,
|
||||||
|
north: 45
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var layers = [
|
||||||
|
{
|
||||||
|
type: 'mapnik',
|
||||||
|
options: {
|
||||||
|
sql: 'select * from populated_places_simple_reduced',
|
||||||
|
cartocss: '#layer { marker-fill: <%= color %>; }',
|
||||||
|
cartocss_version: '2.3.0'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'mapnik',
|
||||||
|
options: {
|
||||||
|
sql: 'select ST_Transform(ST_MakeEnvelope(-45, -45, 45, 45, 4326), 3857) the_geom_webmercator',
|
||||||
|
cartocss: '#layer { polygon-fill: <%= color %>; }',
|
||||||
|
cartocss_version: '2.3.0'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
];
|
||||||
|
templateMaps.addTemplate(username, createTemplate(view, layers), function (err) {
|
||||||
|
if (err) {
|
||||||
|
return done(err);
|
||||||
|
}
|
||||||
|
getStaticMap({ layer: 0 }, function(err, img) {
|
||||||
|
assert.ok(!err);
|
||||||
|
assert.imageIsSimilarToFile(img, previewFixture('bounds'), IMAGE_TOLERANCE, done);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user