diff --git a/lib/cartodb/controllers/factory.js b/lib/cartodb/controllers/api-router.js similarity index 88% rename from lib/cartodb/controllers/factory.js rename to lib/cartodb/controllers/api-router.js index 33d76c2a..fe701985 100644 --- a/lib/cartodb/controllers/factory.js +++ b/lib/cartodb/controllers/api-router.js @@ -1,3 +1,5 @@ +const { Router: router } = require('express'); + const RedisPool = require('redis-mpool'); const cartodbRedis = require('cartodb-redis'); @@ -38,10 +40,21 @@ const ResourceLocator = require('../models/resource-locator'); const LayergroupMetadata = require('../utils/layergroup-metadata'); const RendererStatsReporter = require('../stats/reporter/renderer'); +const logger = require('../middleware/logger'); +const bodyParser = require('body-parser'); +const servedByHostHeader = require('../middleware/served-by-host-header'); +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'); + const MapRouter = require('./map-router'); const TemplateRouter = require('./template-router'); -module.exports = class ControllersFactory { +module.exports = class ApiRouter { constructor ({ serverOptions, environmentOptions }) { this.serverOptions = serverOptions; @@ -163,8 +176,8 @@ module.exports = class ControllersFactory { tablesExtentApi }; - this.mapRouter = new MapRouter({ collaborators, serverOptions }); - this.templateRouter = new TemplateRouter({ collaborators, serverOptions }); + this.mapRouter = new MapRouter({ collaborators }); + this.templateRouter = new TemplateRouter({ collaborators }); } register (app) { @@ -173,8 +186,34 @@ module.exports = class ControllersFactory { app.layergroupAffectedTablesCache = this.layergroupAffectedTablesCache; } - this.templateRouter.register(app); - this.mapRouter.register(app); + const apiRouter = router(); + + apiRouter.use(logger(this.serverOptions)); + apiRouter.use(bodyParser.json()); + apiRouter.use(servedByHostHeader()); + apiRouter.use(stats({ + enabled: this.serverOptions.useProfiler, + statsClient: global.statsClient + })); + apiRouter.use(lzmaMiddleware()); + apiRouter.use(cors()); + apiRouter.use(user()); + + this.templateRouter.register(apiRouter); + this.mapRouter.register(apiRouter); + + apiRouter.use(sendResponse()); + apiRouter.use(syntaxError()); + apiRouter.use(errorMiddleware()); + + const paths = [ + '/api/v1', + '/user/:user/api/v1', + '/tiles', + '/database/:dbname' + ]; + + app.use(`(?:${paths.join('|')})`, apiRouter); } }; diff --git a/lib/cartodb/controllers/map-router.js b/lib/cartodb/controllers/map-router.js index 5cc2bc7b..d02cd563 100644 --- a/lib/cartodb/controllers/map-router.js +++ b/lib/cartodb/controllers/map-router.js @@ -1,16 +1,5 @@ const { Router: router } = require('express'); -const logger = require('../middleware/logger'); -const bodyParser = require('body-parser'); -const servedByHostHeader = require('../middleware/served-by-host-header'); -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'); - const AnalysisLayergroupController = require('./layergroup/analysis'); const AttributesLayergroupController = require('./layergroup/attributes'); const DataviewLayergroupController = require('./layergroup/dataview'); @@ -21,9 +10,7 @@ const PreviewTemplateController = require('./template/preview'); const AnalysesController = require('./analyses'); module.exports = class MapRouter { - constructor ({ collaborators, serverOptions }) { - this.serverOptions = serverOptions; - + constructor ({ collaborators }) { const { analysisStatusBackend, attributesBackend, @@ -128,22 +115,9 @@ module.exports = class MapRouter { ); } - register (app) { - const mapConfigBasePath = this.serverOptions.base_url_mapconfig; - + register (apiRouter) { const mapRouter = router(); - mapRouter.use(logger(this.serverOptions)); - mapRouter.use(bodyParser.json()); - mapRouter.use(servedByHostHeader()); - mapRouter.use(stats({ - enabled: this.serverOptions.useProfiler, - statsClient: global.statsClient - })); - mapRouter.use(lzmaMiddleware()); - mapRouter.use(cors()); - mapRouter.use(user()); - this.analysisLayergroupController.register(mapRouter); this.attributesLayergroupController.register(mapRouter); this.dataviewLayergroupController.register(mapRouter); @@ -153,10 +127,11 @@ module.exports = class MapRouter { this.previewTemplateController.register(mapRouter); this.analysesController.register(mapRouter); - mapRouter.use(sendResponse()); - mapRouter.use(syntaxError()); - mapRouter.use(errorMiddleware()); + const paths = [ + '/map', + '/layergroup' + ]; - app.use(mapConfigBasePath, mapRouter); + apiRouter.use(`(?:${paths.join('|')})`, mapRouter); } }; diff --git a/lib/cartodb/controllers/template-router.js b/lib/cartodb/controllers/template-router.js index 50287b43..d549dafd 100644 --- a/lib/cartodb/controllers/template-router.js +++ b/lib/cartodb/controllers/template-router.js @@ -1,24 +1,11 @@ const { Router: router } = require('express'); -const logger = require('../middleware/logger'); -const bodyParser = require('body-parser'); -const servedByHostHeader = require('../middleware/served-by-host-header'); -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'); - const NamedMapController = require('./map/named'); const AdminTemplateController = require('./template/admin'); const TileTemplateController = require('./template/tile'); module.exports = class TemplateRouter { - constructor ({ collaborators, serverOptions }) { - this.serverOptions = serverOptions; - + constructor ({ collaborators }) { const { pgConnection, templateMaps, @@ -65,30 +52,18 @@ module.exports = class TemplateRouter { ); } - register (app) { - const templateBasePath = this.serverOptions.base_url_templated; - + register (apiRouter) { const templateRouter = router(); - templateRouter.use(logger(this.serverOptions)); - templateRouter.use(bodyParser.json()); - templateRouter.use(servedByHostHeader()); - templateRouter.use(stats({ - enabled: this.serverOptions.useProfiler, - statsClient: global.statsClient - })); - templateRouter.use(lzmaMiddleware()); - templateRouter.use(cors()); - templateRouter.use(user()); - this.namedMapController.register(templateRouter); this.tileTemplateController.register(templateRouter); this.adminTemplateController.register(templateRouter); - templateRouter.use(sendResponse()); - templateRouter.use(syntaxError()); - templateRouter.use(errorMiddleware()); + const paths = [ + '/map/named', + '/template' + ]; - app.use(templateBasePath, templateRouter); + apiRouter.use(`(?:${paths.join('|')})`, templateRouter); } }; diff --git a/lib/cartodb/server.js b/lib/cartodb/server.js index 847b7090..ab6fcc62 100644 --- a/lib/cartodb/server.js +++ b/lib/cartodb/server.js @@ -5,7 +5,7 @@ const { mapnik } = windshaft; const jsonReplacer = require('./utils/json-replacer'); -const ControllersFactory = require('./controllers/factory'); +const ApiRouter = require('./controllers/api-router'); const ServerInfoController = require('./controllers/server-info'); const StatsClient = require('./stats/client'); @@ -27,8 +27,8 @@ module.exports = function createServer (serverOptions) { app.disable('etag'); app.set('json replacer', jsonReplacer()); - const controllers = new ControllersFactory({ serverOptions, environmentOptions: global.environment }); - controllers.register(app); + const apiRouter = new ApiRouter({ serverOptions, environmentOptions: global.environment }); + apiRouter.register(app); const versions = getAndValidateVersions(serverOptions);