From 95538707c9b108ed01ebcb5d02763e8f5f95b889 Mon Sep 17 00:00:00 2001 From: Eneko Lakasta Date: Wed, 7 Feb 2018 17:14:13 +0100 Subject: [PATCH] add parameter asMaster to setDBAuth --- lib/cartodb/api/auth_api.js | 6 ++-- lib/cartodb/backends/pg_connection.js | 33 +++++++++++++------ lib/cartodb/backends/pg_query_runner.js | 3 +- .../adapter/mapconfig-named-layers-adapter.js | 3 +- .../mapconfig/provider/named-map-provider.js | 3 +- 5 files changed, 33 insertions(+), 15 deletions(-) diff --git a/lib/cartodb/api/auth_api.js b/lib/cartodb/api/auth_api.js index 562614c3..e18f1d0d 100644 --- a/lib/cartodb/api/auth_api.js +++ b/lib/cartodb/api/auth_api.js @@ -105,8 +105,9 @@ AuthApi.prototype.authorize = function(req, res, callback) { return self.authorizedBySigner(res, this); } + const asMaster = false; // authorized by api key, login as the given username and stop - self.pgConnection.setDBAuth(user, res.locals, function(err) { + self.pgConnection.setDBAuth(user, res.locals, asMaster, function(err) { callback(err, true); // authorized (or error) }); }, @@ -129,7 +130,8 @@ AuthApi.prototype.authorize = function(req, res, callback) { return callback(null, false); } - self.pgConnection.setDBAuth(user, res.locals, function(err) { + const asMaster = true; + self.pgConnection.setDBAuth(user, res.locals, asMaster, function(err) { req.profiler.done('setDBAuth'); callback(err, true); // authorized (or error) }); diff --git a/lib/cartodb/backends/pg_connection.js b/lib/cartodb/backends/pg_connection.js index 8355f585..16c2e565 100644 --- a/lib/cartodb/backends/pg_connection.js +++ b/lib/cartodb/backends/pg_connection.js @@ -20,18 +20,30 @@ module.exports = PgConnection; // // @param callback function(err) // -PgConnection.prototype.setDBAuth = function(username, params, callback) { - this.metadataBackend.getMasterApikey(username, (err, apikey)=> { - if (err) { - return callback(err); - } +PgConnection.prototype.setDBAuth = function(username, params, asMaster, callback) { + if (asMaster) { + this.metadataBackend.getMasterApikey(username, (err, apikey) => { + if (err) { + return callback(err); + } - params.dbuser = apikey.databaseRole; - params.dbpassword = apikey.databasePassword; + params.dbuser = apikey.databaseRole; + params.dbpassword = apikey.databasePassword; - callback(); - }); + return callback(); + }); + } else { + this.metadataBackend.getApikey(username, params.api_key || params.map_key, (err, apikey) => { + if (err) { + return callback(err); + } + params.dbuser = apikey.databaseRole; + params.dbpassword = apikey.databasePassword; + + return callback(); + }); + } }; // Set db connection parameters to those for the given username @@ -85,7 +97,8 @@ PgConnection.prototype.getConnection = function(username, callback) { require('debug')('cachechan')("getConn1"); step( function setAuth() { - self.setDBAuth(username, params, this); + const asMaster = true; + self.setDBAuth(username, params, asMaster, this); }, function setConn(err) { assert.ifError(err); diff --git a/lib/cartodb/backends/pg_query_runner.js b/lib/cartodb/backends/pg_query_runner.js index bf57f166..41874513 100644 --- a/lib/cartodb/backends/pg_query_runner.js +++ b/lib/cartodb/backends/pg_query_runner.js @@ -22,7 +22,8 @@ PgQueryRunner.prototype.run = function(username, query, callback) { step( function setAuth() { - self.pgConnection.setDBAuth(username, params, this); + const asMaster = true; + self.pgConnection.setDBAuth(username, params, asMaster, this); }, function setConn(err) { assert.ifError(err); diff --git a/lib/cartodb/models/mapconfig/adapter/mapconfig-named-layers-adapter.js b/lib/cartodb/models/mapconfig/adapter/mapconfig-named-layers-adapter.js index 17c2059f..dd876664 100644 --- a/lib/cartodb/models/mapconfig/adapter/mapconfig-named-layers-adapter.js +++ b/lib/cartodb/models/mapconfig/adapter/mapconfig-named-layers-adapter.js @@ -109,7 +109,8 @@ MapConfigNamedLayersAdapter.prototype.getMapConfig = function (user, requestMapC if (_.some(layers, isNamedTypeLayer)) { // Lazy load dbAuth - this.pgConnection.setDBAuth(user, dbAuth, function(err) { + const asMaster = true; + this.pgConnection.setDBAuth(user, dbAuth, asMaster, function(err) { if (err) { return callback(err); } diff --git a/lib/cartodb/models/mapconfig/provider/named-map-provider.js b/lib/cartodb/models/mapconfig/provider/named-map-provider.js index 17c66c29..9e995c53 100644 --- a/lib/cartodb/models/mapconfig/provider/named-map-provider.js +++ b/lib/cartodb/models/mapconfig/provider/named-map-provider.js @@ -235,7 +235,8 @@ NamedMapMapConfigProvider.prototype.setDBParams = function(cdbuser, params, call var self = this; step( function setAuth() { - self.pgConnection.setDBAuth(cdbuser, params, this); + const asMaster = true; + self.pgConnection.setDBAuth(cdbuser, params, asMaster, this); }, function setConn(err) { assert.ifError(err);