diff --git a/lib/cartodb/controllers/map.js b/lib/cartodb/controllers/map.js index 4566cdb3..96844ecf 100644 --- a/lib/cartodb/controllers/map.js +++ b/lib/cartodb/controllers/map.js @@ -57,6 +57,7 @@ MapController.prototype.register = function(app) { userMiddleware, this.prepareContext, createGetPrepareConfig, + this.prepareAdapterMapConfig.bind(this), this.createGet.bind(this), mapErrorMiddleware({ label: 'ANONYMOUS LAYERGROUP', @@ -69,6 +70,7 @@ MapController.prototype.register = function(app) { userMiddleware, this.prepareContext, createPostPrepareConfig, + this.prepareAdapterMapConfig.bind(this), this.createPost.bind(this), mapErrorMiddleware({ label: 'ANONYMOUS LAYERGROUP', @@ -81,6 +83,7 @@ MapController.prototype.register = function(app) { userMiddleware, this.prepareContext, prepareJsonTemplateParams, + this.getTemplate.bind(this), this.jsonp.bind(this), mapErrorMiddleware({ label: 'NAMED MAP LAYERGROUP' @@ -92,6 +95,7 @@ MapController.prototype.register = function(app) { userMiddleware, this.prepareContext, prepareTemplateParams, + this.getTemplate.bind(this), this.instantiate.bind(this), mapErrorMiddleware({ label: 'NAMED MAP LAYERGROUP' @@ -173,47 +177,61 @@ MapController.prototype.jsonp = function(req, res, next) { this.instantiateTemplate(req, res, next); }; +MapController.prototype.prepareAdapterMapConfig = function (req, res, next) { + const requestMapConfig = req.body; + const { user, dbhost, dbport, dbname, dbuser, dbpassword, api_key } = res.locals; + + const context = { + analysisConfiguration: { + user, + db: { + host: dbhost, + port: dbport, + dbname: dbname, + user: dbuser, + pass: dbpassword + }, + batch: { + username: user, + apiKey: api_key + } + } + }; + + this.mapConfigAdapter.getMapConfig(user, requestMapConfig, res.locals, context, (err, requestMapConfig) => { + if (err) { + return next(err); + } + + req.body = requestMapConfig; + res.locals.context = context; + + next(); + }); +}; + MapController.prototype.create = function(req, res, next) { var self = this; - var mapConfig; - - var context = {}; - step( - function prepareAdapterMapConfig() { + function createLayergroup() { const requestMapConfig = req.body; + const { context } = res.locals; - context.analysisConfiguration = { - user: res.locals.user, - db: { - host: res.locals.dbhost, - port: res.locals.dbport, - dbname: res.locals.dbname, - user: res.locals.dbuser, - pass: res.locals.dbpassword - }, - batch: { - username: res.locals.user, - apiKey: res.locals.api_key - } - }; - self.mapConfigAdapter.getMapConfig(res.locals.user, requestMapConfig, res.locals, context, this); - }, - function createLayergroup(err, requestMapConfig) { - assert.ifError(err); - var datasource = context.datasource || Datasource.EmptyDatasource(); - res.locals.mapconfig = mapConfig = new MapConfig(requestMapConfig, datasource); + const datasource = context.datasource || Datasource.EmptyDatasource(); + const mapconfig = res.locals.mapconfig = new MapConfig(requestMapConfig, datasource); self.mapBackend.createLayergroup( - mapConfig, + mapconfig, res.locals, - new CreateLayergroupMapConfigProvider(mapConfig, res.locals.user, self.userLimitsApi, res.locals), + new CreateLayergroupMapConfigProvider(mapconfig, res.locals.user, self.userLimitsApi, res.locals), this ); }, function afterLayergroupCreate(err, layergroup) { assert.ifError(err); + const { context } = res.locals; + res.locals.analysesResults = context.analysesResults; res.locals.layergroup = layergroup; res.locals.context = context; @@ -242,48 +260,59 @@ MapController.prototype.create = function(req, res, next) { ); }; +MapController.prototype.getTemplate = function(req, res, next) { + const templateParams = req.body; + const { user } = res.locals; + + const mapConfigProvider = res.locals.mapconfigProvider = new NamedMapMapConfigProvider( + this.templateMaps, + this.pgConnection, + this.metadataBackend, + this.userLimitsApi, + this.mapConfigAdapter, + user, + req.params.template_id, + templateParams, + res.locals.auth_token, + res.locals + ); + + mapConfigProvider.getMapConfig((err, mapconfig, rendererParams) => { + if (err) { + return next(err); + } + + res.locals.mapconfig = mapconfig; + res.locals.rendererParams = rendererParams; + + next(); + }); +}; + MapController.prototype.instantiateTemplate = function(req, res, next) { var self = this; - var cdbuser = res.locals.user; - - var mapConfigProvider; - var mapConfig; step( - function getTemplate() { - const templateParams = req.body; + function createLayergroup() { + const { user, mapconfig, rendererParams } = res.locals; - mapConfigProvider = new NamedMapMapConfigProvider( - self.templateMaps, - self.pgConnection, - self.metadataBackend, - self.userLimitsApi, - self.mapConfigAdapter, - cdbuser, - req.params.template_id, - templateParams, - res.locals.auth_token, - res.locals - ); - mapConfigProvider.getMapConfig(this); - }, - function createLayergroup(err, mapConfig_, rendererParams) { - assert.ifError(err); - res.locals.mapconfig = mapConfig = mapConfig_; self.mapBackend.createLayergroup( - mapConfig, rendererParams, - new CreateLayergroupMapConfigProvider(mapConfig, cdbuser, self.userLimitsApi, rendererParams), + mapconfig, rendererParams, + new CreateLayergroupMapConfigProvider(mapconfig, user, self.userLimitsApi, rendererParams), this ); }, function afterLayergroupCreate(err, layergroup) { assert.ifError(err); - res.locals.analysesResults = mapConfigProvider.analysesResults; res.locals.layergroup = layergroup; - res.locals.template = mapConfigProvider.template; - res.locals.templateName = mapConfigProvider.getTemplateName(); - res.locals.context = mapConfigProvider.context; + + const { mapconfigProvider } = res.locals; + + res.locals.analysesResults = mapconfigProvider.analysesResults; + res.locals.template = mapconfigProvider.template; + res.locals.templateName = mapconfigProvider.getTemplateName(); + res.locals.context = mapconfigProvider.context; const afterLayergroupCreate = self.afterLayergroupCreateBuilder({ useTemplateHash: true