From ef22c46199233058ed624ce65eecdc4829ff7703 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Wed, 4 Apr 2018 19:15:51 +0200 Subject: [PATCH] Make send-response middleware generic to the router --- lib/cartodb/controllers/analyses.js | 2 -- lib/cartodb/controllers/factory.js | 2 +- lib/cartodb/controllers/layergroup/analysis.js | 4 +--- .../controllers/layergroup/attributes.js | 4 +--- lib/cartodb/controllers/layergroup/dataview.js | 13 ++++--------- lib/cartodb/controllers/layergroup/preview.js | 7 ++----- lib/cartodb/controllers/layergroup/tile.js | 18 ++++++++---------- lib/cartodb/controllers/map-router.js | 2 ++ lib/cartodb/controllers/map/anonymous.js | 2 -- lib/cartodb/controllers/map/named.js | 2 -- lib/cartodb/controllers/template-router.js | 2 ++ lib/cartodb/controllers/template/admin.js | 16 +++++----------- lib/cartodb/controllers/template/preview.js | 4 +--- lib/cartodb/controllers/template/tile.js | 2 -- 14 files changed, 27 insertions(+), 53 deletions(-) diff --git a/lib/cartodb/controllers/analyses.js b/lib/cartodb/controllers/analyses.js index 9c0e915c..cc6dd3a6 100644 --- a/lib/cartodb/controllers/analyses.js +++ b/lib/cartodb/controllers/analyses.js @@ -6,7 +6,6 @@ const dbConnSetup = require('../middleware/db-conn-setup'); const rateLimit = require('../middleware/rate-limit'); const { RATE_LIMIT_ENDPOINTS_GROUPS } = rateLimit; const cacheControlHeader = require('../middleware/cache-control-header'); -const sendResponse = require('../middleware/send-response'); const dbParamsFromResLocals = require('../utils/database-params'); function AnalysesController(pgConnection, authApi, userLimitsApi) { @@ -30,7 +29,6 @@ AnalysesController.prototype.register = function (mapRouter) { getDataFromQuery({ queryTemplate: tablesQueryTpl, key: 'tables' }), prepareResponse(), cacheControlHeader({ ttl: 10, revalidate: true }), - sendResponse(), unauthorizedError() ); }; diff --git a/lib/cartodb/controllers/factory.js b/lib/cartodb/controllers/factory.js index 4e4365e1..33d76c2a 100644 --- a/lib/cartodb/controllers/factory.js +++ b/lib/cartodb/controllers/factory.js @@ -173,8 +173,8 @@ module.exports = class ControllersFactory { app.layergroupAffectedTablesCache = this.layergroupAffectedTablesCache; } - this.mapRouter.register(app); this.templateRouter.register(app); + this.mapRouter.register(app); } }; diff --git a/lib/cartodb/controllers/layergroup/analysis.js b/lib/cartodb/controllers/layergroup/analysis.js index 30371950..36f20991 100644 --- a/lib/cartodb/controllers/layergroup/analysis.js +++ b/lib/cartodb/controllers/layergroup/analysis.js @@ -5,7 +5,6 @@ const dbConnSetup = require('../../middleware/db-conn-setup'); const authorize = require('../../middleware/authorize'); const rateLimit = require('../../middleware/rate-limit'); const { RATE_LIMIT_ENDPOINTS_GROUPS } = rateLimit; -const sendResponse = require('../../middleware/send-response'); const dbParamsFromResLocals = require('../../utils/database-params'); module.exports = class AnalysisLayergroupController { @@ -36,8 +35,7 @@ module.exports = class AnalysisLayergroupController { dbConnSetup(this.pgConnection), rateLimit(this.userLimitsApi, RATE_LIMIT_ENDPOINTS_GROUPS.ANALYSIS), cleanUpQueryParams(), - analysisNodeStatus(this.analysisStatusBackend), - sendResponse() + analysisNodeStatus(this.analysisStatusBackend) ); } diff --git a/lib/cartodb/controllers/layergroup/attributes.js b/lib/cartodb/controllers/layergroup/attributes.js index 9e1aa24f..c4c5af38 100644 --- a/lib/cartodb/controllers/layergroup/attributes.js +++ b/lib/cartodb/controllers/layergroup/attributes.js @@ -10,7 +10,6 @@ const cacheControlHeader = require('../../middleware/cache-control-header'); const cacheChannelHeader = require('../../middleware/cache-channel-header'); const surrogateKeyHeader = require('../../middleware/surrogate-key-header'); const lastModifiedHeader = require('../../middleware/last-modified-header'); -const sendResponse = require('../../middleware/send-response'); module.exports = class AttributesLayergroupController { constructor ( @@ -50,8 +49,7 @@ module.exports = class AttributesLayergroupController { cacheControlHeader(), cacheChannelHeader(), surrogateKeyHeader({ surrogateKeysCache: this.surrogateKeysCache }), - lastModifiedHeader(), - sendResponse() + lastModifiedHeader() ); } }; diff --git a/lib/cartodb/controllers/layergroup/dataview.js b/lib/cartodb/controllers/layergroup/dataview.js index 04390d23..c13e0eaa 100644 --- a/lib/cartodb/controllers/layergroup/dataview.js +++ b/lib/cartodb/controllers/layergroup/dataview.js @@ -10,7 +10,6 @@ const cacheControlHeader = require('../../middleware/cache-control-header'); const cacheChannelHeader = require('../../middleware/cache-channel-header'); const surrogateKeyHeader = require('../../middleware/surrogate-key-header'); const lastModifiedHeader = require('../../middleware/last-modified-header'); -const sendResponse = require('../../middleware/send-response'); const ALLOWED_DATAVIEW_QUERY_PARAMS = [ 'filters', // json @@ -68,8 +67,7 @@ module.exports = class DataviewLayergroupController { cacheControlHeader(), cacheChannelHeader(), surrogateKeyHeader({ surrogateKeysCache: this.surrogateKeysCache }), - lastModifiedHeader(), - sendResponse() + lastModifiedHeader() ); mapRouter.get( @@ -90,8 +88,7 @@ module.exports = class DataviewLayergroupController { cacheControlHeader(), cacheChannelHeader(), surrogateKeyHeader({ surrogateKeysCache: this.surrogateKeysCache }), - lastModifiedHeader(), - sendResponse() + lastModifiedHeader() ); mapRouter.get( @@ -112,8 +109,7 @@ module.exports = class DataviewLayergroupController { cacheControlHeader(), cacheChannelHeader(), surrogateKeyHeader({ surrogateKeysCache: this.surrogateKeysCache }), - lastModifiedHeader(), - sendResponse() + lastModifiedHeader() ); mapRouter.get( @@ -134,8 +130,7 @@ module.exports = class DataviewLayergroupController { cacheControlHeader(), cacheChannelHeader(), surrogateKeyHeader({ surrogateKeysCache: this.surrogateKeysCache }), - lastModifiedHeader(), - sendResponse() + lastModifiedHeader() ); } }; diff --git a/lib/cartodb/controllers/layergroup/preview.js b/lib/cartodb/controllers/layergroup/preview.js index 1918fd72..8885e45c 100644 --- a/lib/cartodb/controllers/layergroup/preview.js +++ b/lib/cartodb/controllers/layergroup/preview.js @@ -10,7 +10,6 @@ const cacheControlHeader = require('../../middleware/cache-control-header'); const cacheChannelHeader = require('../../middleware/cache-channel-header'); const surrogateKeyHeader = require('../../middleware/surrogate-key-header'); const lastModifiedHeader = require('../../middleware/last-modified-header'); -const sendResponse = require('../../middleware/send-response'); module.exports = class PreviewLayergroupController { constructor ( @@ -53,8 +52,7 @@ module.exports = class PreviewLayergroupController { cacheControlHeader(), cacheChannelHeader(), surrogateKeyHeader({ surrogateKeysCache: this.surrogateKeysCache }), - lastModifiedHeader(), - sendResponse() + lastModifiedHeader() ); mapRouter.get( @@ -76,8 +74,7 @@ module.exports = class PreviewLayergroupController { cacheControlHeader(), cacheChannelHeader(), surrogateKeyHeader({ surrogateKeysCache: this.surrogateKeysCache }), - lastModifiedHeader(), - sendResponse() + lastModifiedHeader() ); } }; diff --git a/lib/cartodb/controllers/layergroup/tile.js b/lib/cartodb/controllers/layergroup/tile.js index 39c0e5f7..17c35377 100644 --- a/lib/cartodb/controllers/layergroup/tile.js +++ b/lib/cartodb/controllers/layergroup/tile.js @@ -10,7 +10,6 @@ const cacheControlHeader = require('../../middleware/cache-control-header'); const cacheChannelHeader = require('../../middleware/cache-channel-header'); const surrogateKeyHeader = require('../../middleware/surrogate-key-header'); const lastModifiedHeader = require('../../middleware/last-modified-header'); -const sendResponse = require('../../middleware/send-response'); const vectorError = require('../../middleware/vector-error'); const SUPPORTED_FORMATS = { @@ -42,8 +41,10 @@ module.exports = class TileLayergroupController { } register (mapRouter) { + const number = (param) => `${param}(-?\\d+)`; + mapRouter.get( - `/:token/:z/:x/:y@:scale_factor?x.:format`, + `/:token/:${number('z')}/:${number('x')}/:${number('y')}@:${number('scale_factor')}?x.:format`, layergroupToken(), credentials(), authorize(this.authApi), @@ -64,12 +65,11 @@ module.exports = class TileLayergroupController { incrementSuccessMetrics(global.statsClient), incrementErrorMetrics(global.statsClient), tileError(), - vectorError(), - sendResponse() + vectorError() ); mapRouter.get( - `/:token/:z/:x/:y.:format`, + `/:token/:${number('z')}/:${number('x')}/:${number('y')}.:format`, layergroupToken(), credentials(), authorize(this.authApi), @@ -90,12 +90,11 @@ module.exports = class TileLayergroupController { incrementSuccessMetrics(global.statsClient), incrementErrorMetrics(global.statsClient), tileError(), - vectorError(), - sendResponse() + vectorError() ); mapRouter.get( - `/:token/:layer/:z/:x/:y.(:format)`, + `/:token/:layer/:${number('z')}/:${number('x')}/:${number('y')}.(:format)`, distinguishLayergroupFromStaticRoute(), layergroupToken(), credentials(), @@ -117,8 +116,7 @@ module.exports = class TileLayergroupController { incrementSuccessMetrics(global.statsClient), incrementErrorMetrics(global.statsClient), tileError(), - vectorError(), - sendResponse() + vectorError() ); } }; diff --git a/lib/cartodb/controllers/map-router.js b/lib/cartodb/controllers/map-router.js index 0b72572d..5cc2bc7b 100644 --- a/lib/cartodb/controllers/map-router.js +++ b/lib/cartodb/controllers/map-router.js @@ -7,6 +7,7 @@ const stats = require('../middleware/stats'); const lzmaMiddleware = require('../middleware/lzma'); const cors = require('../middleware/cors'); const user = require('../middleware/user'); +const sendResponse = require('../middleware/send-response'); const syntaxError = require('../middleware/syntax-error'); const errorMiddleware = require('../middleware/error-middleware'); @@ -152,6 +153,7 @@ module.exports = class MapRouter { this.previewTemplateController.register(mapRouter); this.analysesController.register(mapRouter); + mapRouter.use(sendResponse()); mapRouter.use(syntaxError()); mapRouter.use(errorMiddleware()); diff --git a/lib/cartodb/controllers/map/anonymous.js b/lib/cartodb/controllers/map/anonymous.js index 9575eead..433da3e4 100644 --- a/lib/cartodb/controllers/map/anonymous.js +++ b/lib/cartodb/controllers/map/anonymous.js @@ -18,7 +18,6 @@ const layerStats = require('./middlewares/layer-stats'); const layergroupIdHeader = require('./middlewares/layergroup-id-header'); const layergroupMetadata = require('./middlewares/layergroup-metadata'); const mapError = require('./middlewares/map-error'); -const sendResponse = require('../../middleware/send-response'); const CreateLayergroupMapConfigProvider = require('../../models/mapconfig/provider/create-layergroup-provider'); const rateLimit = require('../../middleware/rate-limit'); const { RATE_LIMIT_ENDPOINTS_GROUPS } = rateLimit; @@ -103,7 +102,6 @@ AnonymousMapController.prototype.composeCreateMapMiddleware = function () { layerStats(this.pgConnection, this.statsBackend), layergroupIdHeader(this.templateMaps, useTemplateHash), layergroupMetadata(this.layergroupMetadata, includeQuery), - sendResponse(), mapError({ label, addContext }) ]; }; diff --git a/lib/cartodb/controllers/map/named.js b/lib/cartodb/controllers/map/named.js index 4c99fc09..2258b62f 100644 --- a/lib/cartodb/controllers/map/named.js +++ b/lib/cartodb/controllers/map/named.js @@ -15,7 +15,6 @@ const layerStats = require('./middlewares/layer-stats'); const layergroupIdHeader = require('./middlewares/layergroup-id-header'); const layergroupMetadata = require('./middlewares/layergroup-metadata'); const mapError = require('./middlewares/map-error'); -const sendResponse = require('../../middleware/send-response'); const NamedMapMapConfigProvider = require('../../models/mapconfig/provider/named-map-provider'); const CreateLayergroupMapConfigProvider = require('../../models/mapconfig/provider/create-layergroup-provider'); const rateLimit = require('../../middleware/rate-limit'); @@ -114,7 +113,6 @@ NamedMapController.prototype.composeInstantiateTemplateMiddleware = function () layerStats(this.pgConnection, this.statsBackend), layergroupIdHeader(this.templateMaps ,useTemplateHash), layergroupMetadata(this.layergroupMetadata, includeQuery), - sendResponse(), mapError({ label, addContext }) ]; }; diff --git a/lib/cartodb/controllers/template-router.js b/lib/cartodb/controllers/template-router.js index b7334c9b..50287b43 100644 --- a/lib/cartodb/controllers/template-router.js +++ b/lib/cartodb/controllers/template-router.js @@ -7,6 +7,7 @@ const stats = require('../middleware/stats'); const lzmaMiddleware = require('../middleware/lzma'); const cors = require('../middleware/cors'); const user = require('../middleware/user'); +const sendResponse = require('../middleware/send-response'); const syntaxError = require('../middleware/syntax-error'); const errorMiddleware = require('../middleware/error-middleware'); @@ -84,6 +85,7 @@ module.exports = class TemplateRouter { this.tileTemplateController.register(templateRouter); this.adminTemplateController.register(templateRouter); + templateRouter.use(sendResponse()); templateRouter.use(syntaxError()); templateRouter.use(errorMiddleware()); diff --git a/lib/cartodb/controllers/template/admin.js b/lib/cartodb/controllers/template/admin.js index d91ca9fd..169f6b20 100644 --- a/lib/cartodb/controllers/template/admin.js +++ b/lib/cartodb/controllers/template/admin.js @@ -2,7 +2,6 @@ const { templateName } = require('../../backends/template_maps'); const credentials = require('../../middleware/credentials'); const rateLimit = require('../../middleware/rate-limit'); const { RATE_LIMIT_ENDPOINTS_GROUPS } = rateLimit; -const sendResponse = require('../../middleware/send-response'); /** * @param {AuthApi} authApi @@ -27,8 +26,7 @@ AdminTemplateController.prototype.register = function (templateRouter) { authorizedByAPIKey({ authApi: this.authApi, action: 'create', label: 'POST TEMPLATE' }), rateLimit(this.userLimitsApi, RATE_LIMIT_ENDPOINTS_GROUPS.NAMED_CREATE), checkContentType({ action: 'POST', label: 'POST TEMPLATE' }), - createTemplate({ templateMaps: this.templateMaps }), - sendResponse() + createTemplate({ templateMaps: this.templateMaps }) ); templateRouter.put( @@ -37,8 +35,7 @@ AdminTemplateController.prototype.register = function (templateRouter) { authorizedByAPIKey({ authApi: this.authApi, action: 'update', label: 'PUT TEMPLATE' }), rateLimit(this.userLimitsApi, RATE_LIMIT_ENDPOINTS_GROUPS.NAMED_UPDATE), checkContentType({ action: 'PUT', label: 'PUT TEMPLATE' }), - updateTemplate({ templateMaps: this.templateMaps }), - sendResponse() + updateTemplate({ templateMaps: this.templateMaps }) ); templateRouter.get( @@ -46,8 +43,7 @@ AdminTemplateController.prototype.register = function (templateRouter) { credentials(), authorizedByAPIKey({ authApi: this.authApi, action: 'get', label: 'GET TEMPLATE' }), rateLimit(this.userLimitsApi, RATE_LIMIT_ENDPOINTS_GROUPS.NAMED_GET), - retrieveTemplate({ templateMaps: this.templateMaps }), - sendResponse() + retrieveTemplate({ templateMaps: this.templateMaps }) ); templateRouter.delete( @@ -55,8 +51,7 @@ AdminTemplateController.prototype.register = function (templateRouter) { credentials(), authorizedByAPIKey({ authApi: this.authApi, action: 'delete', label: 'DELETE TEMPLATE' }), rateLimit(this.userLimitsApi, RATE_LIMIT_ENDPOINTS_GROUPS.NAMED_DELETE), - destroyTemplate({ templateMaps: this.templateMaps }), - sendResponse() + destroyTemplate({ templateMaps: this.templateMaps }) ); templateRouter.get( @@ -64,8 +59,7 @@ AdminTemplateController.prototype.register = function (templateRouter) { credentials(), authorizedByAPIKey({ authApi: this.authApi, action: 'list', label: 'GET TEMPLATE LIST' }), rateLimit(this.userLimitsApi, RATE_LIMIT_ENDPOINTS_GROUPS.NAMED_LIST), - listTemplates({ templateMaps: this.templateMaps }), - sendResponse() + listTemplates({ templateMaps: this.templateMaps }) ); }; diff --git a/lib/cartodb/controllers/template/preview.js b/lib/cartodb/controllers/template/preview.js index d1abc587..53f583de 100644 --- a/lib/cartodb/controllers/template/preview.js +++ b/lib/cartodb/controllers/template/preview.js @@ -7,7 +7,6 @@ const cacheControlHeader = require('../../middleware/cache-control-header'); const cacheChannelHeader = require('../../middleware/cache-channel-header'); const surrogateKeyHeader = require('../../middleware/surrogate-key-header'); const lastModifiedHeader = require('../../middleware/last-modified-header'); -const sendResponse = require('../../middleware/send-response'); const rateLimit = require('../../middleware/rate-limit'); const { RATE_LIMIT_ENDPOINTS_GROUPS } = rateLimit; @@ -69,8 +68,7 @@ PreviewTemplateController.prototype.register = function (mapRouter) { cacheControlHeader(), cacheChannelHeader(), surrogateKeyHeader({ surrogateKeysCache: this.surrogateKeysCache }), - lastModifiedHeader(), - sendResponse() + lastModifiedHeader() ); }; diff --git a/lib/cartodb/controllers/template/tile.js b/lib/cartodb/controllers/template/tile.js index 29b7f852..86404100 100644 --- a/lib/cartodb/controllers/template/tile.js +++ b/lib/cartodb/controllers/template/tile.js @@ -7,7 +7,6 @@ const cacheControlHeader = require('../../middleware/cache-control-header'); const cacheChannelHeader = require('../../middleware/cache-channel-header'); const surrogateKeyHeader = require('../../middleware/surrogate-key-header'); const lastModifiedHeader = require('../../middleware/last-modified-header'); -const sendResponse = require('../../middleware/send-response'); const vectorError = require('../../middleware/vector-error'); const rateLimit = require('../../middleware/rate-limit'); const { RATE_LIMIT_ENDPOINTS_GROUPS } = rateLimit; @@ -51,7 +50,6 @@ TileTemplateController.prototype.register = function (templateRouter) { cacheChannelHeader(), surrogateKeyHeader({ surrogateKeysCache: this.surrogateKeysCache }), lastModifiedHeader(), - sendResponse(), vectorError() ); };