diff --git a/lib/cartodb/controllers/layergroup.js b/lib/cartodb/controllers/layergroup.js index 5549a5c2..370c530a 100644 --- a/lib/cartodb/controllers/layergroup.js +++ b/lib/cartodb/controllers/layergroup.js @@ -64,7 +64,7 @@ LayergroupController.prototype.register = function(app) { app.base_url_mapconfig + '/:token/:z/:x/:y@:scale_factor?x.:format', cors(), userMiddleware, - rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.ENDPOINT_8), + rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.TILE), this.prepareContext, this.tile.bind(this), vectorError() @@ -74,7 +74,7 @@ LayergroupController.prototype.register = function(app) { app.base_url_mapconfig + '/:token/:z/:x/:y.:format', cors(), userMiddleware, - rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.ENDPOINT_8), + rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.TILE), this.prepareContext, this.tile.bind(this), vectorError() @@ -84,7 +84,7 @@ LayergroupController.prototype.register = function(app) { app.base_url_mapconfig + '/:token/:layer/:z/:x/:y.(:format)', cors(), userMiddleware, - rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.ENDPOINT_8), + rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.TILE), validateLayerRouteMiddleware, this.prepareContext, this.layer.bind(this), @@ -95,7 +95,7 @@ LayergroupController.prototype.register = function(app) { app.base_url_mapconfig + '/:token/:layer/attributes/:fid', cors(), userMiddleware, - rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.ENDPOINT_9), + rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.ATTRIBUTES), this.prepareContext, this.attributes.bind(this) ); @@ -104,7 +104,7 @@ LayergroupController.prototype.register = function(app) { app.base_url_mapconfig + '/static/center/:token/:z/:lat/:lng/:width/:height.:format', cors(), userMiddleware, - rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.ENDPOINT_2), + rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.STATIC), allowQueryParams(['layer']), this.prepareContext, this.center.bind(this) @@ -114,7 +114,7 @@ LayergroupController.prototype.register = function(app) { app.base_url_mapconfig + '/static/bbox/:token/:west,:south,:east,:north/:width/:height.:format', cors(), userMiddleware, - rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.ENDPOINT_2), + rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.STATIC), allowQueryParams(['layer']), this.prepareContext, this.bbox.bind(this) @@ -142,7 +142,7 @@ LayergroupController.prototype.register = function(app) { app.base_url_mapconfig + '/:token/dataview/:dataviewName', cors(), userMiddleware, - rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.ENDPOINT_5), + rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.DATAVIEW), allowQueryParams(allowedDataviewQueryParams), this.prepareContext, this.dataview.bind(this) @@ -152,7 +152,7 @@ LayergroupController.prototype.register = function(app) { app.base_url_mapconfig + '/:token/:layer/widget/:dataviewName', cors(), userMiddleware, - rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.ENDPOINT_5), + rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.DATAVIEW), allowQueryParams(allowedDataviewQueryParams), this.prepareContext, this.dataview.bind(this) @@ -162,7 +162,7 @@ LayergroupController.prototype.register = function(app) { app.base_url_mapconfig + '/:token/dataview/:dataviewName/search', cors(), userMiddleware, - rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.ENDPOINT_6), + rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.DATAVIEW_SEARCH), allowQueryParams(allowedDataviewQueryParams), this.prepareContext, this.dataviewSearch.bind(this) @@ -172,7 +172,7 @@ LayergroupController.prototype.register = function(app) { app.base_url_mapconfig + '/:token/:layer/widget/:dataviewName/search', cors(), userMiddleware, - rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.ENDPOINT_6), + rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.DATAVIEW_SEARCH), allowQueryParams(allowedDataviewQueryParams), this.prepareContext, this.dataviewSearch.bind(this) @@ -182,7 +182,7 @@ LayergroupController.prototype.register = function(app) { app.base_url_mapconfig + '/:token/analysis/node/:nodeId', cors(), userMiddleware, - rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.ENDPOINT_7), + rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.ANALYSIS), this.prepareContext, this.analysisNodeStatus.bind(this) ); diff --git a/lib/cartodb/controllers/map.js b/lib/cartodb/controllers/map.js index 8a119ef6..f83b1616 100644 --- a/lib/cartodb/controllers/map.js +++ b/lib/cartodb/controllers/map.js @@ -59,28 +59,28 @@ MapController.prototype.register = function(app) { base_url_mapconfig, cors(), userMiddleware, - rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.ENDPOINT_1), + rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.ANONYMOUS), this.composeCreateMapMiddleware() ); app.post( base_url_mapconfig, cors(), userMiddleware, - rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.ENDPOINT_1), + rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.ANONYMOUS), this.composeCreateMapMiddleware() ); app.get( `${base_url_templated}/:template_id/jsonp`, cors(), userMiddleware, - rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.ENDPOINT_13), + rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.NAMED), this.composeCreateMapMiddleware(useTemplate) ); app.post( `${base_url_templated}/:template_id`, cors(), userMiddleware, - rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.ENDPOINT_13), + rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.NAMED), this.composeCreateMapMiddleware(useTemplate) ); app.options( diff --git a/lib/cartodb/controllers/named_maps.js b/lib/cartodb/controllers/named_maps.js index 5ee82611..002a8606 100644 --- a/lib/cartodb/controllers/named_maps.js +++ b/lib/cartodb/controllers/named_maps.js @@ -47,7 +47,7 @@ NamedMapsController.prototype.register = function(app) { app.base_url_templated + '/:template_id/:layer/:z/:x/:y.(:format)', cors(), userMiddleware, - rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.ENDPOINT_17), + rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.NAMED_TILES), this.prepareContext, this.getNamedMapProvider('NAMED_MAP_TILE'), this.getAffectedTables(), @@ -65,7 +65,7 @@ NamedMapsController.prototype.register = function(app) { app.base_url_mapconfig + '/static/named/:template_id/:width/:height.:format', cors(), userMiddleware, - rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.ENDPOINT_3), + rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.STATIC_NAMED), allowQueryParams(['layer', 'zoom', 'lon', 'lat', 'bbox']), this.prepareContext, this.getNamedMapProvider('STATIC_VIZ_MAP'), diff --git a/lib/cartodb/controllers/named_maps_admin.js b/lib/cartodb/controllers/named_maps_admin.js index 7dd10e75..ec0a480d 100644 --- a/lib/cartodb/controllers/named_maps_admin.js +++ b/lib/cartodb/controllers/named_maps_admin.js @@ -25,7 +25,7 @@ NamedMapsAdminController.prototype.register = function (app) { `${base_url_templated}/`, cors(), userMiddleware, - rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.ENDPOINT_11), + rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.NAMED_CREATE), this.checkContentType('POST', 'POST TEMPLATE'), this.authorizedByAPIKey('create', 'POST TEMPLATE'), this.create() @@ -35,7 +35,7 @@ NamedMapsAdminController.prototype.register = function (app) { `${base_url_templated}/:template_id`, cors(), userMiddleware, - rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.ENDPOINT_14), + rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.NAMED_UPDATE), this.checkContentType('PUT', 'PUT TEMPLATE'), this.authorizedByAPIKey('update', 'PUT TEMPLATE'), this.update() @@ -45,7 +45,7 @@ NamedMapsAdminController.prototype.register = function (app) { `${base_url_templated}/:template_id`, cors(), userMiddleware, - rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.ENDPOINT_12), + rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.NAMED_GET), this.authorizedByAPIKey('get', 'GET TEMPLATE'), this.retrieve() ); @@ -54,7 +54,7 @@ NamedMapsAdminController.prototype.register = function (app) { `${base_url_templated}/:template_id`, cors(), userMiddleware, - rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.ENDPOINT_15), + rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.NAMED_DELETE), this.authorizedByAPIKey('delete', 'DELETE TEMPLATE'), this.destroy() ); @@ -63,7 +63,7 @@ NamedMapsAdminController.prototype.register = function (app) { `${base_url_templated}/`, cors(), userMiddleware, - rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.ENDPOINT_10), + rateLimit(this.metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.NAMED_LIST), this.authorizedByAPIKey('list', 'GET TEMPLATE LIST'), this.list() ); diff --git a/lib/cartodb/middleware/rate-limit.js b/lib/cartodb/middleware/rate-limit.js index 0857a25a..22247686 100644 --- a/lib/cartodb/middleware/rate-limit.js +++ b/lib/cartodb/middleware/rate-limit.js @@ -3,21 +3,21 @@ const REDIS_DB = 8; const RATE_LIMIT_ENDPOINTS_GROUPS = { - ENDPOINT_1: 'anonymous', - ENDPOINT_2: 'static', - ENDPOINT_3: 'static_named', - ENDPOINT_5: 'dataview', - ENDPOINT_6: 'dataview_search', - ENDPOINT_7: 'analysis', - ENDPOINT_8: 'tile', - ENDPOINT_9: 'attributes', - ENDPOINT_10: 'named_list', - ENDPOINT_11: 'named_create', - ENDPOINT_12: 'named_get', - ENDPOINT_13: 'named', - ENDPOINT_14: 'named_update', - ENDPOINT_15: 'named_delete', - ENDPOINT_17: 'named_tiles' + ANONYMOUS: 'anonymous', + STATIC: 'static', + STATIC_NAMED: 'static_named', + DATAVIEW: 'dataview', + DATAVIEW_SEARCH: 'dataview_search', + ANALYSIS: 'analysis', + TILE: 'tile', + ATTRIBUTES: 'attributes', + NAMED_LIST: 'named_list', + NAMED_CREATE: 'named_create', + NAMED_GET: 'named_get', + NAMED: 'named', + NAMED_UPDATE: 'named_update', + NAMED_DELETE: 'named_delete', + NAMED_TILES: 'named_tiles' }; function rateLimitFn(metadataBackend, endpointGroup = null) { diff --git a/test/acceptance/rate-limit.test.js b/test/acceptance/rate-limit.test.js index 7b211f03..51f0ebcb 100644 --- a/test/acceptance/rate-limit.test.js +++ b/test/acceptance/rate-limit.test.js @@ -72,7 +72,7 @@ function setLimit(count, period, burst) { return; } - const key = getStoreKey(user, RATE_LIMIT_ENDPOINTS_GROUPS.ENDPOINT_1); + const key = getStoreKey(user, RATE_LIMIT_ENDPOINTS_GROUPS.ANONYMOUS); redisClient.rpush(key, burst); redisClient.rpush(key, count); redisClient.rpush(key, period); @@ -280,7 +280,7 @@ describe('rate limit middleware', function () { const redisPool = new RedisPool(global.environment.redis); const metadataBackend = cartodbRedis({ pool: redisPool }); - rateLimit = rateLimitMiddleware(metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.ENDPOINT_1); + rateLimit = rateLimitMiddleware(metadataBackend, RATE_LIMIT_ENDPOINTS_GROUPS.ANONYMOUS); redisClient = redis.createClient(global.environment.redis.port); testClient = new TestClient(createMapConfig(), 1234);