diff --git a/lib/cartodb/models/cdb_request.js b/lib/cartodb/models/cdb_request.js index ec2da747..db5c93ea 100644 --- a/lib/cartodb/models/cdb_request.js +++ b/lib/cartodb/models/cdb_request.js @@ -1,25 +1,25 @@ function CdbRequest() { + this.RE_USER_FROM_HOST = new RegExp(global.environment.user_from_host || + '^([^\\.]+)\\.' // would extract "strk" from "strk.cartodb.com" + ); } module.exports = CdbRequest; -var RE_USER_FROM_HOST = new RegExp(global.environment.user_from_host || - '^([^\\.]+)\\.' // would extract "strk" from "strk.cartodb.com" -); CdbRequest.prototype.userByReq = function(req) { var host = req.headers.host; if (req.params.user) { return req.params.user; } - var mat = host.match(RE_USER_FROM_HOST); + var mat = host.match(this.RE_USER_FROM_HOST); if ( ! mat ) { - console.error("Pattern '" + RE_USER_FROM_HOST + "' does not match hostname '" + host + "'"); + console.error("Pattern '" + this.RE_USER_FROM_HOST + "' does not match hostname '" + host + "'"); return; } // console.log("Matches: "); console.dir(mat); if ( mat.length !== 2 ) { - console.error("Pattern '" + RE_USER_FROM_HOST + "' gave unexpected matches against '" + host + "': ", mat); + console.error("Pattern '" + this.RE_USER_FROM_HOST + "' gave unexpected matches against '" + host + "': ", mat); return; } return mat[1]; diff --git a/test/unit/cartodb/cdb_request.test.js b/test/unit/cartodb/cdb_request.test.js new file mode 100644 index 00000000..04b2c1b9 --- /dev/null +++ b/test/unit/cartodb/cdb_request.test.js @@ -0,0 +1,60 @@ +require('../../support/test_helper'); +var assert = require('assert'); + +var CdbRequest = require('../../../lib/cartodb/models/cdb_request'); + +describe('req2params', function() { + + function createRequest(host, userParam) { + var req = { + params: {}, + headers: { + host: host + } + }; + + if (userParam) { + req.params.user = userParam; + } + + return req; + } + + it('extracts name from host header', function() { + var cdbRequest = new CdbRequest(); + var user = cdbRequest.userByReq(createRequest('localhost')); + + assert.equal(user, 'localhost'); + }); + + it('extracts name from subdomain host header in case of no config', function() { + var userFromHostConfig = global.environment.user_from_host; + global.environment.user_from_host = null; + + var cdbRequest = new CdbRequest(); + var user = cdbRequest.userByReq(createRequest('development.localhost.lan')); + + global.environment.user_from_host = userFromHostConfig; + + assert.equal(user, 'development'); + }); + + it('considers user param before headers', function() { + var cdbRequest = new CdbRequest(); + var user = cdbRequest.userByReq(createRequest('localhost', 'development')); + + assert.equal(user, 'development'); + }); + + it('returns undefined when it cannot extract username', function() { + var userFromHostConfig = global.environment.user_from_host; + global.environment.user_from_host = null; + + var cdbRequest = new CdbRequest(); + var user = cdbRequest.userByReq(createRequest('localhost')); + + global.environment.user_from_host = userFromHostConfig; + + assert.equal(user, undefined); + }); +});