From 6ebf51ce459566977e58f9536b961532d1cbefe1 Mon Sep 17 00:00:00 2001 From: Eneko Lakasta Date: Thu, 8 Feb 2018 11:29:17 +0100 Subject: [PATCH] let select apikey type in setDBAuth: regular, default, master --- lib/cartodb/api/auth_api.js | 19 ++++++++++------ lib/cartodb/backends/pg_connection.js | 22 ++++++++++++++----- lib/cartodb/backends/pg_query_runner.js | 3 +-- .../adapter/mapconfig-named-layers-adapter.js | 4 +--- .../mapconfig/provider/named-map-provider.js | 3 +-- 5 files changed, 32 insertions(+), 19 deletions(-) diff --git a/lib/cartodb/api/auth_api.js b/lib/cartodb/api/auth_api.js index fc490585..3f92c6d9 100644 --- a/lib/cartodb/api/auth_api.js +++ b/lib/cartodb/api/auth_api.js @@ -101,8 +101,7 @@ AuthApi.prototype.authorize = function(req, res, callback) { } if (isAuthorizedByApikey) { - const asMaster = false; - return this.pgConnection.setDBAuth(user, res.locals, asMaster, function (err) { + return this.pgConnection.setDBAuth(user, res.locals, 'regular', function (err) { req.profiler.done('setDBAuth'); if (err) { @@ -119,8 +118,7 @@ AuthApi.prototype.authorize = function(req, res, callback) { } if (isAuthorizedBySigner) { - const asMaster = true; - return this.pgConnection.setDBAuth(user, res.locals, asMaster, function (err) { + return this.pgConnection.setDBAuth(user, res.locals, 'master', function (err) { req.profiler.done('setDBAuth'); if (err) { @@ -131,10 +129,17 @@ AuthApi.prototype.authorize = function(req, res, callback) { }); } - // if no signer name was given, let dbparams and - // PostgreSQL do the rest. + // if no signer name was given, use default api key if (!res.locals.signer) { - return callback(null, true); // authorized so far + return this.pgConnection.setDBAuth(user, res.locals, 'default', function (err) { + req.profiler.done('setDBAuth'); + + if (err) { + return callback(err); + } + + callback(null, true); + }); } // if signer name was given, return no authorization diff --git a/lib/cartodb/backends/pg_connection.js b/lib/cartodb/backends/pg_connection.js index 16c2e565..3c8dd143 100644 --- a/lib/cartodb/backends/pg_connection.js +++ b/lib/cartodb/backends/pg_connection.js @@ -20,8 +20,8 @@ module.exports = PgConnection; // // @param callback function(err) // -PgConnection.prototype.setDBAuth = function(username, params, asMaster, callback) { - if (asMaster) { +PgConnection.prototype.setDBAuth = function(username, params, apikeyType, callback) { + if (apikeyType === 'master') { this.metadataBackend.getMasterApikey(username, (err, apikey) => { if (err) { return callback(err); @@ -32,7 +32,7 @@ PgConnection.prototype.setDBAuth = function(username, params, asMaster, callback return callback(); }); - } else { + } else if (apikeyType === 'regular') { this.metadataBackend.getApikey(username, params.api_key || params.map_key, (err, apikey) => { if (err) { return callback(err); @@ -43,6 +43,19 @@ PgConnection.prototype.setDBAuth = function(username, params, asMaster, callback return callback(); }); + } else if (apikeyType === 'default') { + this.metadataBackend.getApikey(username, 'default_public', (err, apikey) => { + if (err) { + return callback(err); + } + + params.dbuser = apikey.databaseRole; + params.dbpassword = apikey.databasePassword; + + return callback(); + }); + } else { + return callback(new Error(`Invalid Apikey type: ${apikeyType}, valid ones: master, regular, default`)); } }; @@ -97,8 +110,7 @@ PgConnection.prototype.getConnection = function(username, callback) { require('debug')('cachechan')("getConn1"); step( function setAuth() { - const asMaster = true; - self.setDBAuth(username, params, asMaster, this); + self.setDBAuth(username, params, 'master', 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 41874513..fbbc1ee2 100644 --- a/lib/cartodb/backends/pg_query_runner.js +++ b/lib/cartodb/backends/pg_query_runner.js @@ -22,8 +22,7 @@ PgQueryRunner.prototype.run = function(username, query, callback) { step( function setAuth() { - const asMaster = true; - self.pgConnection.setDBAuth(username, params, asMaster, this); + self.pgConnection.setDBAuth(username, params, 'master', 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 dd876664..f652e675 100644 --- a/lib/cartodb/models/mapconfig/adapter/mapconfig-named-layers-adapter.js +++ b/lib/cartodb/models/mapconfig/adapter/mapconfig-named-layers-adapter.js @@ -108,9 +108,7 @@ MapConfigNamedLayersAdapter.prototype.getMapConfig = function (user, requestMapC var dbAuth = {}; if (_.some(layers, isNamedTypeLayer)) { - // Lazy load dbAuth - const asMaster = true; - this.pgConnection.setDBAuth(user, dbAuth, asMaster, function(err) { + this.pgConnection.setDBAuth(user, dbAuth, 'master', 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 9e995c53..67d29f73 100644 --- a/lib/cartodb/models/mapconfig/provider/named-map-provider.js +++ b/lib/cartodb/models/mapconfig/provider/named-map-provider.js @@ -235,8 +235,7 @@ NamedMapMapConfigProvider.prototype.setDBParams = function(cdbuser, params, call var self = this; step( function setAuth() { - const asMaster = true; - self.pgConnection.setDBAuth(cdbuser, params, asMaster, this); + self.pgConnection.setDBAuth(cdbuser, params, 'master', this); }, function setConn(err) { assert.ifError(err);