From c51e2542870055965016ea7cfe2e60fb055dd83f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Wed, 9 May 2018 15:00:18 +0200 Subject: [PATCH] Set 404 as defautl status code and set the proper status code fir the response at very same time that the response body --- lib/cartodb/api/api-router.js | 2 ++ lib/cartodb/api/map/analyses-catalog-controller.js | 1 + lib/cartodb/api/map/analysis-layergroup-controller.js | 1 + lib/cartodb/api/map/anonymous-map-controller.js | 1 + lib/cartodb/api/map/attributes-layergroup-controller.js | 1 + lib/cartodb/api/map/dataview-layergroup-controller.js | 2 ++ lib/cartodb/api/map/preview-layergroup-controller.js | 2 ++ lib/cartodb/api/map/preview-template-controller.js | 2 ++ lib/cartodb/api/middlewares/initialize-status-code.js | 6 ++++++ lib/cartodb/api/middlewares/send-response.js | 2 +- lib/cartodb/api/template/admin-template-controller.js | 4 ++++ lib/cartodb/api/template/named-template-controller.js | 1 + lib/cartodb/api/template/tile-template-controller.js | 1 + 13 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 lib/cartodb/api/middlewares/initialize-status-code.js diff --git a/lib/cartodb/api/api-router.js b/lib/cartodb/api/api-router.js index 5165007d..9d53285b 100644 --- a/lib/cartodb/api/api-router.js +++ b/lib/cartodb/api/api-router.js @@ -40,6 +40,7 @@ const ResourceLocator = require('../models/resource-locator'); const LayergroupMetadata = require('../utils/layergroup-metadata'); const RendererStatsReporter = require('../stats/reporter/renderer'); +const initializeStatusCode = require('./middlewares/initialize-status-code'); const logger = require('./middlewares/logger'); const bodyParser = require('body-parser'); const servedByHostHeader = require('./middlewares/served-by-host-header'); @@ -193,6 +194,7 @@ module.exports = class ApiRouter { const apiRouter = router(); apiRouter.use(logger(this.serverOptions)); + apiRouter.use(initializeStatusCode()); apiRouter.use(bodyParser.json()); apiRouter.use(servedByHostHeader()); apiRouter.use(stats({ diff --git a/lib/cartodb/api/map/analyses-catalog-controller.js b/lib/cartodb/api/map/analyses-catalog-controller.js index 91defc21..760c0e80 100644 --- a/lib/cartodb/api/map/analyses-catalog-controller.js +++ b/lib/cartodb/api/map/analyses-catalog-controller.js @@ -99,6 +99,7 @@ function prepareResponse () { return -1; }); + res.statusCode = 200; res.body = { catalog: analysisCatalog }; next(); diff --git a/lib/cartodb/api/map/analysis-layergroup-controller.js b/lib/cartodb/api/map/analysis-layergroup-controller.js index 0e46dc81..96f46d70 100644 --- a/lib/cartodb/api/map/analysis-layergroup-controller.js +++ b/lib/cartodb/api/map/analysis-layergroup-controller.js @@ -48,6 +48,7 @@ function analysisNodeStatus (analysisStatusBackend) { 'Last-Modified': new Date().toUTCString() }); + res.statusCode = 200; res.body = nodeStatus; next(); diff --git a/lib/cartodb/api/map/anonymous-map-controller.js b/lib/cartodb/api/map/anonymous-map-controller.js index 964ffacd..21049437 100644 --- a/lib/cartodb/api/map/anonymous-map-controller.js +++ b/lib/cartodb/api/map/anonymous-map-controller.js @@ -202,6 +202,7 @@ function createLayergroup (mapBackend, userLimitsBackend, pgConnection, affected return next(err); } + res.statusCode = 200; res.body = layergroup; res.locals.mapConfigProvider = mapConfigProvider; diff --git a/lib/cartodb/api/map/attributes-layergroup-controller.js b/lib/cartodb/api/map/attributes-layergroup-controller.js index ef9614fc..632cca9f 100644 --- a/lib/cartodb/api/map/attributes-layergroup-controller.js +++ b/lib/cartodb/api/map/attributes-layergroup-controller.js @@ -77,6 +77,7 @@ function getFeatureAttributes (attributesBackend) { return next(err); } + res.statusCode = 200; res.body = tile; next(); diff --git a/lib/cartodb/api/map/dataview-layergroup-controller.js b/lib/cartodb/api/map/dataview-layergroup-controller.js index 0b6f8cc9..710c5cd4 100644 --- a/lib/cartodb/api/map/dataview-layergroup-controller.js +++ b/lib/cartodb/api/map/dataview-layergroup-controller.js @@ -151,6 +151,7 @@ function getDataview (dataviewBackend) { return next(err); } + res.statusCode = 200; res.body = dataview; next(); @@ -174,6 +175,7 @@ function dataviewSearch (dataviewBackend) { return next(err); } + res.statusCode = 200; res.body = searchResult; next(); diff --git a/lib/cartodb/api/map/preview-layergroup-controller.js b/lib/cartodb/api/map/preview-layergroup-controller.js index 71dfdffd..29db8729 100644 --- a/lib/cartodb/api/map/preview-layergroup-controller.js +++ b/lib/cartodb/api/map/preview-layergroup-controller.js @@ -109,6 +109,7 @@ function getPreviewImageByCenter (previewBackend) { res.set('Content-Type', headers['Content-Type'] || `image/${format}`); + res.statusCode = 200; res.body = image; next(); @@ -144,6 +145,7 @@ function getPreviewImageByBoundingBox (previewBackend) { res.set('Content-Type', headers['Content-Type'] || `image/${format}`); + res.statusCode = 200; res.body = image; next(); diff --git a/lib/cartodb/api/map/preview-template-controller.js b/lib/cartodb/api/map/preview-template-controller.js index e19942d2..9f5257a3 100644 --- a/lib/cartodb/api/map/preview-template-controller.js +++ b/lib/cartodb/api/map/preview-template-controller.js @@ -268,6 +268,7 @@ function getImage({ previewBackend, label }) { res.set(headers); } + res.statusCode = 200; res.body = image; next(); @@ -287,6 +288,7 @@ function getImage({ previewBackend, label }) { res.set(headers); } + res.statusCode = 200; res.body = image; next(); diff --git a/lib/cartodb/api/middlewares/initialize-status-code.js b/lib/cartodb/api/middlewares/initialize-status-code.js new file mode 100644 index 00000000..9e6da2c7 --- /dev/null +++ b/lib/cartodb/api/middlewares/initialize-status-code.js @@ -0,0 +1,6 @@ +module.exports = function initializeStatusCode () { + return function initializeStatusCodeMiddleware (req, res, next) { + res.statusCode = 404; + next(); + }; +}; diff --git a/lib/cartodb/api/middlewares/send-response.js b/lib/cartodb/api/middlewares/send-response.js index 469cf0a7..ec13c5bf 100644 --- a/lib/cartodb/api/middlewares/send-response.js +++ b/lib/cartodb/api/middlewares/send-response.js @@ -2,7 +2,7 @@ module.exports = function sendResponse () { return function sendResponseMiddleware (req, res) { req.profiler.done('res'); - res.status(res.statusCode || 200); + res.status(res.statusCode); if (Buffer.isBuffer(res.body)) { return res.send(res.body); diff --git a/lib/cartodb/api/template/admin-template-controller.js b/lib/cartodb/api/template/admin-template-controller.js index 4cceda69..b45ebca7 100644 --- a/lib/cartodb/api/template/admin-template-controller.js +++ b/lib/cartodb/api/template/admin-template-controller.js @@ -115,6 +115,7 @@ function createTemplate ({ templateMaps }) { return next(err); } + res.statusCode = 200; res.body = { template_id: templateId }; next(); @@ -133,6 +134,7 @@ function updateTemplate ({ templateMaps }) { return next(err); } + res.statusCode = 200; res.body = { template_id: templateId }; next(); @@ -161,6 +163,7 @@ function retrieveTemplate ({ templateMaps }) { // so we remove it before returning to the user delete template.auth_id; + res.statusCode = 200; res.body = { template }; next(); @@ -199,6 +202,7 @@ function listTemplates ({ templateMaps }) { return next(err); } + res.statusCode = 200; res.body = { template_ids: templateIds }; next(); diff --git a/lib/cartodb/api/template/named-template-controller.js b/lib/cartodb/api/template/named-template-controller.js index eed39b34..86613c5e 100644 --- a/lib/cartodb/api/template/named-template-controller.js +++ b/lib/cartodb/api/template/named-template-controller.js @@ -204,6 +204,7 @@ function instantiateLayergroup (mapBackend, userLimitsBackend, pgConnection, aff return next(err); } + res.statusCode = 200; res.body = layergroup; const { mapConfigProvider } = res.locals; diff --git a/lib/cartodb/api/template/tile-template-controller.js b/lib/cartodb/api/template/tile-template-controller.js index 5cb2f4e4..de256ccb 100644 --- a/lib/cartodb/api/template/tile-template-controller.js +++ b/lib/cartodb/api/template/tile-template-controller.js @@ -75,6 +75,7 @@ function getTile ({ tileBackend, label }) { res.set(headers); } + res.statusCode = 200; res.body = tile; next();