diff --git a/lib/cartodb/api/auth_api.js b/lib/cartodb/api/auth_api.js index 8782f907..e9f10262 100644 --- a/lib/cartodb/api/auth_api.js +++ b/lib/cartodb/api/auth_api.js @@ -62,7 +62,7 @@ function isValidApiKey(apikey) { // AuthApi.prototype.authorizedByAPIKey = function(user, res, callback) { const apikeyToken = res.locals.api_key; - const apikeyUsername = res.locals.apikeyUsername; + const basicAuthUsername = res.locals.basicAuthUsername; if ( ! apikeyToken ) { return callback(null, false); // no api key, no authorization... @@ -91,7 +91,7 @@ AuthApi.prototype.authorizedByAPIKey = function(user, res, callback) { return callback(error); } - if (!usernameMatches(apikeyUsername, res.locals.user)) { + if (!usernameMatches(basicAuthUsername, res.locals.user)) { const error = new Error('Forbidden'); error.type = 'auth'; error.subtype = 'api-key-username-mismatch'; @@ -149,8 +149,8 @@ function isNameNotFoundError (err) { return err.message && -1 !== err.message.indexOf('name not found'); } -function usernameMatches (apikeyUsername, requestUsername) { - return !(apikeyUsername && (apikeyUsername !== requestUsername)); +function usernameMatches (basicAuthUsername, requestUsername) { + return !(basicAuthUsername && (basicAuthUsername !== requestUsername)); } /** diff --git a/lib/cartodb/controllers/analyses.js b/lib/cartodb/controllers/analyses.js index fb75c633..db3550c8 100644 --- a/lib/cartodb/controllers/analyses.js +++ b/lib/cartodb/controllers/analyses.js @@ -12,7 +12,7 @@ AnalysesController.prototype.register = function (app) { app.get( `${app.base_url_mapconfig}/analyses/catalog`, cors(), - userMiddleware, + userMiddleware(), this.prepareContext, this.createPGClient(), this.getDataFromQuery({ queryTemplate: catalogQueryTpl, key: 'catalog' }), diff --git a/lib/cartodb/controllers/layergroup.js b/lib/cartodb/controllers/layergroup.js index bf2abeed..1f6f8d4f 100644 --- a/lib/cartodb/controllers/layergroup.js +++ b/lib/cartodb/controllers/layergroup.js @@ -45,7 +45,7 @@ LayergroupController.prototype.register = function(app) { app.get( `${basePath}/:token/:z/:x/:y@:scale_factor?x.:format`, cors(), - userMiddleware, + userMiddleware(), this.prepareContext, getMapStoreMapConfigProvider(this.mapStore, this.userLimitsApi), tile(this.tileBackend), @@ -64,7 +64,7 @@ LayergroupController.prototype.register = function(app) { app.get( `${basePath}/:token/:z/:x/:y.:format`, cors(), - userMiddleware, + userMiddleware(), this.prepareContext, getMapStoreMapConfigProvider(this.mapStore, this.userLimitsApi), tile(this.tileBackend), @@ -82,9 +82,9 @@ LayergroupController.prototype.register = function(app) { app.get( `${basePath}/:token/:layer/:z/:x/:y.(:format)`, - cors(), - userMiddleware, validateLayerRoute(), + cors(), + userMiddleware(), this.prepareContext, getMapStoreMapConfigProvider(this.mapStore, this.userLimitsApi), layer(this.tileBackend), @@ -103,7 +103,7 @@ LayergroupController.prototype.register = function(app) { app.get( `${basePath}/:token/:layer/attributes/:fid`, cors(), - userMiddleware, + userMiddleware(), this.prepareContext, getMapStoreMapConfigProvider(this.mapStore, this.userLimitsApi), attributes(this.attributesBackend), @@ -120,7 +120,7 @@ LayergroupController.prototype.register = function(app) { app.get( `${basePath}/static/center/:token/:z/:lat/:lng/:width/:height.:format`, cors(), - userMiddleware, + userMiddleware(), allowQueryParams(['layer']), this.prepareContext, getMapStoreMapConfigProvider(this.mapStore, this.userLimitsApi, forcedFormat), @@ -136,7 +136,7 @@ LayergroupController.prototype.register = function(app) { app.get( `${basePath}/static/bbox/:token/:west,:south,:east,:north/:width/:height.:format`, cors(), - userMiddleware, + userMiddleware(), allowQueryParams(['layer']), this.prepareContext, getMapStoreMapConfigProvider(this.mapStore, this.userLimitsApi, forcedFormat), @@ -170,7 +170,7 @@ LayergroupController.prototype.register = function(app) { app.get( `${basePath}/:token/dataview/:dataviewName`, cors(), - userMiddleware, + userMiddleware(), allowQueryParams(allowedDataviewQueryParams), this.prepareContext, getMapStoreMapConfigProvider(this.mapStore, this.userLimitsApi), @@ -186,7 +186,7 @@ LayergroupController.prototype.register = function(app) { app.get( `${basePath}/:token/:layer/widget/:dataviewName`, cors(), - userMiddleware, + userMiddleware(), allowQueryParams(allowedDataviewQueryParams), this.prepareContext, getMapStoreMapConfigProvider(this.mapStore, this.userLimitsApi), @@ -202,7 +202,7 @@ LayergroupController.prototype.register = function(app) { app.get( `${basePath}/:token/dataview/:dataviewName/search`, cors(), - userMiddleware, + userMiddleware(), allowQueryParams(allowedDataviewQueryParams), this.prepareContext, getMapStoreMapConfigProvider(this.mapStore, this.userLimitsApi), @@ -218,7 +218,7 @@ LayergroupController.prototype.register = function(app) { app.get( `${basePath}/:token/:layer/widget/:dataviewName/search`, cors(), - userMiddleware, + userMiddleware(), allowQueryParams(allowedDataviewQueryParams), this.prepareContext, getMapStoreMapConfigProvider(this.mapStore, this.userLimitsApi), @@ -234,7 +234,7 @@ LayergroupController.prototype.register = function(app) { app.get( `${basePath}/:token/analysis/node/:nodeId`, cors(), - userMiddleware, + userMiddleware(), this.prepareContext, analysisNodeStatus(this.analysisStatusBackend), sendResponse() diff --git a/lib/cartodb/controllers/map.js b/lib/cartodb/controllers/map.js index 34660ce0..a9077339 100644 --- a/lib/cartodb/controllers/map.js +++ b/lib/cartodb/controllers/map.js @@ -69,7 +69,7 @@ MapController.prototype.composeCreateMapMiddleware = function (useTemplate = fal return [ cors(), - userMiddleware, + userMiddleware(), allowQueryParams(['aggregation']), this.prepareContext, this.initProfiler(isTemplateInstantiation), diff --git a/lib/cartodb/controllers/named_maps.js b/lib/cartodb/controllers/named_maps.js index 93566cc9..ffa007a1 100644 --- a/lib/cartodb/controllers/named_maps.js +++ b/lib/cartodb/controllers/named_maps.js @@ -48,7 +48,7 @@ NamedMapsController.prototype.register = function(app) { app.get( app.base_url_templated + '/:template_id/:layer/:z/:x/:y.(:format)', cors(), - userMiddleware, + userMiddleware(), this.prepareContext, this.getNamedMapProvider(tileOptions), this.getAffectedTables(), @@ -70,7 +70,7 @@ NamedMapsController.prototype.register = function(app) { app.get( app.base_url_mapconfig + '/static/named/:template_id/:width/:height.:format', cors(), - userMiddleware, + userMiddleware(), allowQueryParams(['layer', 'zoom', 'lon', 'lat', 'bbox']), this.prepareContext, this.getNamedMapProvider(staticOptions), diff --git a/lib/cartodb/controllers/named_maps_admin.js b/lib/cartodb/controllers/named_maps_admin.js index b1c6a451..0728b38c 100644 --- a/lib/cartodb/controllers/named_maps_admin.js +++ b/lib/cartodb/controllers/named_maps_admin.js @@ -2,12 +2,7 @@ const { templateName } = require('../backends/template_maps'); const cors = require('../middleware/cors'); const userMiddleware = require('../middleware/user'); const localsMiddleware = require('../middleware/context/locals'); -const apikeyCredentialsMiddleware = require('../middleware/context/apikey-credentials'); - -const apikeyMiddleware = [ - localsMiddleware, - apikeyCredentialsMiddleware(), -]; +const credentialsMiddleware = require('../middleware/context/credentials'); /** * @param {AuthApi} authApi @@ -28,8 +23,9 @@ NamedMapsAdminController.prototype.register = function (app) { app.post( `${base_url_templated}/`, cors(), - userMiddleware, - apikeyMiddleware, + userMiddleware(), + localsMiddleware(), + credentialsMiddleware(), this.checkContentType('POST', 'POST TEMPLATE'), this.authorizedByAPIKey('create', 'POST TEMPLATE'), this.create() @@ -38,8 +34,9 @@ NamedMapsAdminController.prototype.register = function (app) { app.put( `${base_url_templated}/:template_id`, cors(), - userMiddleware, - apikeyMiddleware, + userMiddleware(), + localsMiddleware(), + credentialsMiddleware(), this.checkContentType('PUT', 'PUT TEMPLATE'), this.authorizedByAPIKey('update', 'PUT TEMPLATE'), this.update() @@ -48,8 +45,9 @@ NamedMapsAdminController.prototype.register = function (app) { app.get( `${base_url_templated}/:template_id`, cors(), - userMiddleware, - apikeyMiddleware, + userMiddleware(), + localsMiddleware(), + credentialsMiddleware(), this.authorizedByAPIKey('get', 'GET TEMPLATE'), this.retrieve() ); @@ -57,8 +55,9 @@ NamedMapsAdminController.prototype.register = function (app) { app.delete( `${base_url_templated}/:template_id`, cors(), - userMiddleware, - apikeyMiddleware, + userMiddleware(), + localsMiddleware(), + credentialsMiddleware(), this.authorizedByAPIKey('delete', 'DELETE TEMPLATE'), this.destroy() ); @@ -66,8 +65,9 @@ NamedMapsAdminController.prototype.register = function (app) { app.get( `${base_url_templated}/`, cors(), - userMiddleware, - apikeyMiddleware, + userMiddleware(), + localsMiddleware(), + credentialsMiddleware(), this.authorizedByAPIKey('list', 'GET TEMPLATE LIST'), this.list() ); diff --git a/lib/cartodb/middleware/allow-query-params.js b/lib/cartodb/middleware/allow-query-params.js index 7ec31d74..cf90e69b 100644 --- a/lib/cartodb/middleware/allow-query-params.js +++ b/lib/cartodb/middleware/allow-query-params.js @@ -1,8 +1,9 @@ -module.exports = function allowQueryParams(params) { +module.exports = function allowQueryParams (params) { if (!Array.isArray(params)) { throw new Error('allowQueryParams must receive an Array of params'); } - return function allowQueryParamsMiddleware(req, res, next) { + + return function allowQueryParamsMiddleware (req, res, next) { res.locals.allowedQueryParams = params; next(); }; diff --git a/lib/cartodb/middleware/context/authorize.js b/lib/cartodb/middleware/context/authorize.js index a42b5407..a1323fa9 100644 --- a/lib/cartodb/middleware/context/authorize.js +++ b/lib/cartodb/middleware/context/authorize.js @@ -1,9 +1,8 @@ -module.exports = function authorizeMiddleware (authApi) { - return function (req, res, next) { - req.profiler.done('req2params.setup'); - +module.exports = function authorize (authApi) { + return function authorizeMiddleware (req, res, next) { authApi.authorize(req, res, (err, authorized) => { req.profiler.done('authorize'); + if (err) { return next(err); } diff --git a/lib/cartodb/middleware/context/apikey-credentials.js b/lib/cartodb/middleware/context/credentials.js similarity index 86% rename from lib/cartodb/middleware/context/apikey-credentials.js rename to lib/cartodb/middleware/context/credentials.js index 225c8ab6..b2024e99 100644 --- a/lib/cartodb/middleware/context/apikey-credentials.js +++ b/lib/cartodb/middleware/context/credentials.js @@ -1,18 +1,16 @@ -'use strict'; +const basicAuth = require('basic-auth'); -module.exports = function apikeyToken () { - return function apikeyTokenMiddleware(req, res, next) { +module.exports = function credentials () { + return function credentialsMiddleware(req, res, next) { const apikeyCredentials = getApikeyCredentialsFromRequest(req); + res.locals.api_key = apikeyCredentials.token; - res.locals.apikeyUsername = apikeyCredentials.username; + res.locals.basicAuthUsername = apikeyCredentials.username; + return next(); }; }; -//-------------------------------------------------------------------------------- - -const basicAuth = require('basic-auth'); - function getApikeyCredentialsFromRequest(req) { let apikeyCredentials = { token: null, diff --git a/lib/cartodb/middleware/context/db-conn-setup.js b/lib/cartodb/middleware/context/db-conn-setup.js index 068d77c2..ce3f6ac0 100644 --- a/lib/cartodb/middleware/context/db-conn-setup.js +++ b/lib/cartodb/middleware/context/db-conn-setup.js @@ -1,14 +1,17 @@ const _ = require('underscore'); -module.exports = function dbConnSetupMiddleware(pgConnection) { - return function dbConnSetup(req, res, next) { - const user = res.locals.user; +module.exports = function dbConnSetup (pgConnection) { + return function dbConnSetupMiddleware (req, res, next) { + const { user } = res.locals; + pgConnection.setDBConn(user, res.locals, (err) => { + req.profiler.done('dbConnSetup'); + if (err) { if (err.message && -1 !== err.message.indexOf('name not found')) { err.http_status = 404; } - req.profiler.done('req2params'); + return next(err); } @@ -18,12 +21,10 @@ module.exports = function dbConnSetupMiddleware(pgConnection) { dbhost: global.environment.postgres.host, dbport: global.environment.postgres.port }); - + res.set('X-Served-By-DB-Host', res.locals.dbhost); - req.profiler.done('req2params'); - - next(null); + next(); }); }; }; diff --git a/lib/cartodb/middleware/context/index.js b/lib/cartodb/middleware/context/index.js index 8922739f..70465895 100644 --- a/lib/cartodb/middleware/context/index.js +++ b/lib/cartodb/middleware/context/index.js @@ -1,16 +1,16 @@ const locals = require('./locals'); const cleanUpQueryParams = require('./clean-up-query-params'); const layergroupToken = require('./layergroup-token'); -const apikeyCredentials = require('./apikey-credentials'); +const credentials = require('./credentials'); const authorize = require('./authorize'); const dbConnSetup = require('./db-conn-setup'); module.exports = function prepareContextMiddleware(authApi, pgConnection) { return [ - locals, + locals(), cleanUpQueryParams(), - layergroupToken, - apikeyCredentials(), + layergroupToken(), + credentials(), authorize(authApi), dbConnSetup(pgConnection) ]; diff --git a/lib/cartodb/middleware/context/layergroup-token.js b/lib/cartodb/middleware/context/layergroup-token.js index 026d0806..c4aac23f 100644 --- a/lib/cartodb/middleware/context/layergroup-token.js +++ b/lib/cartodb/middleware/context/layergroup-token.js @@ -1,32 +1,33 @@ -var LayergroupToken = require('../../models/layergroup-token'); +const LayergroupToken = require('../../models/layergroup-token'); +const authErrorMessageTemplate = function (signer, user) { + return `Cannot use map signature of user "${signer}" on db of user "${user}"`; +}; -module.exports = function layergroupTokenMiddleware(req, res, next) { - if (!res.locals.token) { - return next(); - } - - var user = res.locals.user; - - var layergroupToken = LayergroupToken.parse(res.locals.token); - res.locals.token = layergroupToken.token; - res.locals.cache_buster = layergroupToken.cacheBuster; - - if (layergroupToken.signer) { - res.locals.signer = layergroupToken.signer; - if (!res.locals.signer) { - res.locals.signer = user; - } else if (res.locals.signer !== user) { - var err = new Error(`Cannot use map signature of user "${res.locals.signer}" on db of user "${user}"`); - err.type = 'auth'; - err.http_status = 403; - if (req.query && req.query.callback) { - err.http_status = 200; +module.exports = function layergroupToken () { + return function layergroupTokenMiddleware (req, res, next) { + if (!res.locals.token) { + return next(); + } + + const user = res.locals.user; + + const layergroupToken = LayergroupToken.parse(res.locals.token); + + res.locals.token = layergroupToken.token; + res.locals.cache_buster = layergroupToken.cacheBuster; + + if (layergroupToken.signer) { + res.locals.signer = layergroupToken.signer; + + if (res.locals.signer !== user) { + const err = new Error(authErrorMessageTemplate(res.locals.signer, user)); + err.type = 'auth'; + err.http_status = (req.query && req.query.callback) ? 200: 403; + + return next(err); } - - req.profiler.done('req2params'); - return next(err); } - } - return next(); + return next(); + }; }; diff --git a/lib/cartodb/middleware/context/locals.js b/lib/cartodb/middleware/context/locals.js index 0fdcce50..f6f70923 100644 --- a/lib/cartodb/middleware/context/locals.js +++ b/lib/cartodb/middleware/context/locals.js @@ -1,6 +1,7 @@ -module.exports = function localsMiddleware(req, res, next) { - // save req.params in res.locals - res.locals = Object.assign(req.params || {}, res.locals); +module.exports = function locals () { + return function localsMiddleware (req, res, next) { + res.locals = Object.assign(req.params || {}, res.locals); - next(); + next(); + }; }; diff --git a/lib/cartodb/middleware/cors.js b/lib/cartodb/middleware/cors.js index 227bb477..65b7cf4f 100644 --- a/lib/cartodb/middleware/cors.js +++ b/lib/cartodb/middleware/cors.js @@ -1,11 +1,14 @@ -module.exports = function cors(extraHeaders) { - return function(req, res, next) { - var baseHeaders = "X-Requested-With, X-Prototype-Version, X-CSRF-Token"; +module.exports = function cors (extraHeaders) { + return function corsMiddleware (req, res, next) { + let baseHeaders = "X-Requested-With, X-Prototype-Version, X-CSRF-Token"; + if(extraHeaders) { baseHeaders += ", " + extraHeaders; } + res.set("Access-Control-Allow-Origin", "*"); res.set("Access-Control-Allow-Headers", baseHeaders); + next(); }; }; diff --git a/lib/cartodb/middleware/lzma.js b/lib/cartodb/middleware/lzma.js index 6655cdeb..b0a94412 100644 --- a/lib/cartodb/middleware/lzma.js +++ b/lib/cartodb/middleware/lzma.js @@ -1,30 +1,33 @@ -'use strict'; - const LZMA = require('lzma').LZMA; -const lzmaWorker = new LZMA(); +module.exports = function lzma () { + const lzmaWorker = new LZMA(); -module.exports = function lzmaMiddleware(req, res, next) { - if (!req.query.hasOwnProperty('lzma')) { - return next(); - } - - // Decode (from base64) - var lzma = new Buffer(req.query.lzma, 'base64') - .toString('binary') - .split('') - .map(function(c) { - return c.charCodeAt(0) - 128; - }); - - // Decompress - lzmaWorker.decompress(lzma, function(result) { - try { - delete req.query.lzma; - Object.assign(req.query, JSON.parse(result)); - next(); - } catch (err) { - next(new Error('Error parsing lzma as JSON: ' + err)); + return function lzmaMiddleware (req, res, next) { + if (!req.query.hasOwnProperty('lzma')) { + return next(); } - }); + + // Decode (from base64) + var lzma = new Buffer(req.query.lzma, 'base64') + .toString('binary') + .split('') + .map(function(c) { + return c.charCodeAt(0) - 128; + }); + + // Decompress + lzmaWorker.decompress(lzma, function(result) { + try { + delete req.query.lzma; + Object.assign(req.query, JSON.parse(result)); + + req.profiler.done('lzma'); + + next(); + } catch (err) { + next(new Error('Error parsing lzma as JSON: ' + err)); + } + }); + }; }; diff --git a/lib/cartodb/middleware/stats.js b/lib/cartodb/middleware/stats.js index 489ee645..83ff3054 100644 --- a/lib/cartodb/middleware/stats.js +++ b/lib/cartodb/middleware/stats.js @@ -2,10 +2,10 @@ const Profiler = require('../stats/profiler_proxy'); const debug = require('debug')('windshaft:cartodb:stats'); const onHeaders = require('on-headers'); -module.exports = function statsMiddleware(options) { +module.exports = function stats (options) { const { enabled = true, statsClient } = options; - return function stats(req, res, next) { + return function statsMiddleware (req, res, next) { req.profiler = new Profiler({ statsd_client: statsClient, profile: enabled diff --git a/lib/cartodb/middleware/user.js b/lib/cartodb/middleware/user.js index adf06203..9c7968bc 100644 --- a/lib/cartodb/middleware/user.js +++ b/lib/cartodb/middleware/user.js @@ -1,8 +1,11 @@ -var CdbRequest = require('../models/cdb_request'); -var cdbRequest = new CdbRequest(); +const CdbRequest = require('../models/cdb_request'); -module.exports = function userMiddleware(req, res, next) { - res.locals.user = cdbRequest.userByReq(req); +module.exports = function user () { + const cdbRequest = new CdbRequest(); - next(); + return function userMiddleware(req, res, next) { + res.locals.user = cdbRequest.userByReq(req); + + next(); + }; }; diff --git a/lib/cartodb/middleware/vector-error.js b/lib/cartodb/middleware/vector-error.js index f42f1c87..75e93b0a 100644 --- a/lib/cartodb/middleware/vector-error.js +++ b/lib/cartodb/middleware/vector-error.js @@ -1,5 +1,4 @@ const fs = require('fs'); - const timeoutErrorVectorTile = fs.readFileSync(__dirname + '/../../../assets/render-timeout-fallback.mvt'); module.exports = function vectorError() { diff --git a/lib/cartodb/server.js b/lib/cartodb/server.js index 46ff7122..532d155b 100644 --- a/lib/cartodb/server.js +++ b/lib/cartodb/server.js @@ -377,7 +377,7 @@ function bootstrap(opts) { statsClient: global.statsClient })); - app.use(lzmaMiddleware); + app.use(lzmaMiddleware()); // temporary measure until we upgrade to newer version expressjs so we can check err.status app.use(function(err, req, res, next) { diff --git a/test/unit/cartodb/lzmaMiddleware.test.js b/test/unit/cartodb/lzmaMiddleware.test.js index 9a41030a..3ad81962 100644 --- a/test/unit/cartodb/lzmaMiddleware.test.js +++ b/test/unit/cartodb/lzmaMiddleware.test.js @@ -12,6 +12,7 @@ describe('lzma-middleware', function() { } }; testHelper.lzma_compress_to_base64(JSON.stringify(qo), 1, function(err, data) { + const lzma = lzmaMiddleware(); var req = { headers: { host:'localhost' @@ -19,9 +20,13 @@ describe('lzma-middleware', function() { query: { api_key: 'test', lzma: data + }, + profiler: { + done: function () {} } }; - lzmaMiddleware(req, {}, function(err) { + + lzma(req, {}, function(err) { if ( err ) { return done(err); } diff --git a/test/unit/cartodb/prepare-context.test.js b/test/unit/cartodb/prepare-context.test.js index 2eb7e890..2f6d80a3 100644 --- a/test/unit/cartodb/prepare-context.test.js +++ b/test/unit/cartodb/prepare-context.test.js @@ -10,7 +10,7 @@ var TemplateMaps = require('../../../lib/cartodb/backends/template_maps'); const cleanUpQueryParamsMiddleware = require('../../../lib/cartodb/middleware/context/clean-up-query-params'); const authorizeMiddleware = require('../../../lib/cartodb/middleware/context/authorize'); const dbConnSetupMiddleware = require('../../../lib/cartodb/middleware/context/db-conn-setup'); -const apikeyCredentialsMiddleware = require('../../../lib/cartodb/middleware/context/apikey-credentials'); +const credentialsMiddleware = require('../../../lib/cartodb/middleware/context/credentials'); const localsMiddleware = require('../../../lib/cartodb/middleware/context/locals'); var windshaft = require('windshaft'); @@ -24,7 +24,7 @@ describe('prepare-context', function() { let cleanUpQueryParams; let dbConnSetup; let authorize; - let setApikeyCredentials; + let setCredentials; before(function() { var redisPool = new RedisPool(global.environment.redis); @@ -37,7 +37,7 @@ describe('prepare-context', function() { cleanUpQueryParams = cleanUpQueryParamsMiddleware(); authorize = authorizeMiddleware(authApi); dbConnSetup = dbConnSetupMiddleware(pgConnection); - setApikeyCredentials = apikeyCredentialsMiddleware(); + setCredentials = credentialsMiddleware(); }); @@ -65,16 +65,17 @@ describe('prepare-context', function() { } it('res.locals are created', function(done) { + const locals = localsMiddleware(); let req = {}; let res = {}; - localsMiddleware(prepareRequest(req), prepareResponse(res), function(err) { + locals(prepareRequest(req), prepareResponse(res), function(err) { if ( err ) { done(err); return; } assert.ok(res.hasOwnProperty('locals'), 'response has locals'); done(); }); }); - + it('cleans up request', function(done){ var req = {headers: { host:'localhost' }, query: {dbuser:'hacker',dbname:'secret'}}; var res = {}; @@ -106,18 +107,18 @@ describe('prepare-context', function() { }); it('sets also dbuser for authenticated requests', function(done){ - var req = { - headers: { - host: 'localhost' - }, + var req = { + headers: { + host: 'localhost' + }, query: { api_key: '1234' } }; - var res = { + var res = { set: function () {}, locals: { - api_key: '1234' + api_key: '1234' } }; @@ -169,7 +170,7 @@ describe('prepare-context', function() { } }; var res = {}; - + cleanUpQueryParams(prepareRequest(req), prepareResponse(res), function (err) { if ( err ) { return done(err); @@ -194,12 +195,12 @@ describe('prepare-context', function() { } }; var res = {}; - setApikeyCredentials(prepareRequest(req), prepareResponse(res), function (err) { + setCredentials(prepareRequest(req), prepareResponse(res), function (err) { if (err) { return done(err); } var query = res.locals; - + assert.equal('1234', query.api_key); done(); }); @@ -215,7 +216,7 @@ describe('prepare-context', function() { } }; var res = {}; - setApikeyCredentials(prepareRequest(req), prepareResponse(res), function (err) { + setCredentials(prepareRequest(req), prepareResponse(res), function (err) { if (err) { return done(err); } @@ -234,7 +235,7 @@ describe('prepare-context', function() { } }; var res = {}; - setApikeyCredentials(prepareRequest(req), prepareResponse(res), function (err) { + setCredentials(prepareRequest(req), prepareResponse(res), function (err) { if (err) { return done(err); }