From 95659839b21d1032c9b3c45975af032f4bd1deb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20M=C3=A9tais?= Date: Sat, 31 Mar 2018 09:28:21 -0500 Subject: [PATCH] Fix IP address filtering when behind a proxy --- lib/server/middlewares/apiLimitsMiddleware.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/server/middlewares/apiLimitsMiddleware.js b/lib/server/middlewares/apiLimitsMiddleware.js index 7e2c643..0ebe205 100644 --- a/lib/server/middlewares/apiLimitsMiddleware.js +++ b/lib/server/middlewares/apiLimitsMiddleware.js @@ -6,25 +6,27 @@ var debug = require('debug')('apiLimitsMiddleware'); var apiLimitsMiddleware = function(req, res, next) { 'use strict'; - debug('Entering API Limits Middleware with IP address %s', req.connection.remoteAddress); + var ipAddress = req.headers['x-forwarded-for'] || req.connection.remoteAddress; + + debug('Entering API Limits Middleware with IP address %s', ipAddress); if (req.path.indexOf('/api/') === 0 && !res.locals.hasApiKey) { if (req.path === '/api/runs') { - if (!runsTable.accepts(req.connection.remoteAddress)) { + if (!runsTable.accepts(ipAddress)) { // Sorry :/ - debug('Too many tests launched from IP address %s', req.connection.remoteAddress); + debug('Too many tests launched from IP address %s', ipAddress); res.status(429).send('Too many requests'); return; } } - if (!callsTable.accepts(req.connection.remoteAddress)) { + if (!callsTable.accepts(ipAddress)) { // Sorry :/ - debug('Too many API requests from IP address %s', req.connection.remoteAddress); + debug('Too many API requests from IP address %s', ipAddress); res.status(429).send('Too many requests'); return; }