web: get remoteAddress for socket with cloudflare header

This commit is contained in:
Braydon Fuller 2016-05-18 00:17:45 -04:00
parent 57cb146ce0
commit bf080422ed
2 changed files with 38 additions and 5 deletions

View File

@ -159,7 +159,7 @@ WebService.prototype.getEventNames = function() {
}; };
WebService.prototype._getRemoteAddress = function(socket) { WebService.prototype._getRemoteAddress = function(socket) {
return socket.conn.remoteAddress; return socket.client.request.headers['cf-connecting-ip'] || socket.conn.remoteAddress;
}; };
/** /**
@ -169,19 +169,20 @@ WebService.prototype._getRemoteAddress = function(socket) {
*/ */
WebService.prototype.socketHandler = function(socket) { WebService.prototype.socketHandler = function(socket) {
var self = this; var self = this;
var bus = this.node.openBus({remoteAddress: self._getRemoteAddress(socket)}); var remoteAddress = self._getRemoteAddress(socket);
var bus = this.node.openBus({remoteAddress: remoteAddress});
if (this.enableSocketRPC) { if (this.enableSocketRPC) {
socket.on('message', this.socketMessageHandler.bind(this)); socket.on('message', this.socketMessageHandler.bind(this));
} }
socket.on('subscribe', function(name, params) { socket.on('subscribe', function(name, params) {
log.info(self._getRemoteAddress(socket), 'web socket subscribe:', name); log.info(remoteAddress, 'web socket subscribe:', name);
bus.subscribe(name, params); bus.subscribe(name, params);
}); });
socket.on('unsubscribe', function(name, params) { socket.on('unsubscribe', function(name, params) {
log.info(self._getRemoteAddress(socket), 'web socket unsubscribe:', name); log.info(remoteAddress, 'web socket unsubscribe:', name);
bus.unsubscribe(name, params); bus.unsubscribe(name, params);
}); });
@ -201,7 +202,7 @@ WebService.prototype.socketHandler = function(socket) {
}); });
socket.on('disconnect', function() { socket.on('disconnect', function() {
log.info(self._getRemoteAddress(socket), 'web socket disconnect'); log.info(remoteAddress, 'web socket disconnect');
bus.close(); bus.close();
}); });
}; };

View File

@ -210,6 +210,32 @@ describe('WebService', function() {
}); });
}); });
describe('#_getRemoteAddress', function() {
it('will get remote address from cloudflare header', function() {
var web = new WebService({node: defaultNode});
var socket = {};
socket.conn = {};
socket.client = {};
socket.client.request = {};
socket.client.request.headers = {
'cf-connecting-ip': '127.0.0.1'
};
var remoteAddress = web._getRemoteAddress(socket);
remoteAddress.should.equal('127.0.0.1');
});
it('will get remote address from connection', function() {
var web = new WebService({node: defaultNode});
var socket = {};
socket.conn = {};
socket.conn.remoteAddress = '127.0.0.1';
socket.client = {};
socket.client.request = {};
socket.client.request.headers = {};
var remoteAddress = web._getRemoteAddress(socket);
remoteAddress.should.equal('127.0.0.1');
});
});
describe('#socketHandler', function() { describe('#socketHandler', function() {
var bus = new EventEmitter(); var bus = new EventEmitter();
bus.remoteAddress = '127.0.0.1'; bus.remoteAddress = '127.0.0.1';
@ -244,6 +270,9 @@ describe('WebService', function() {
socket = new EventEmitter(); socket = new EventEmitter();
socket.conn = {}; socket.conn = {};
socket.conn.remoteAddress = '127.0.0.1'; socket.conn.remoteAddress = '127.0.0.1';
socket.client = {};
socket.client.request = {};
socket.client.request.headers = {};
web.socketHandler(socket); web.socketHandler(socket);
socket.emit('message', 'data'); socket.emit('message', 'data');
}); });
@ -255,6 +284,9 @@ describe('WebService', function() {
socket = new EventEmitter(); socket = new EventEmitter();
socket.conn = {}; socket.conn = {};
socket.conn.remoteAddress = '127.0.0.1'; socket.conn.remoteAddress = '127.0.0.1';
socket.client = {};
socket.client.request = {};
socket.client.request.headers = {};
web.socketHandler(socket); web.socketHandler(socket);
socket.on('message', function() { socket.on('message', function() {
web.socketMessageHandler.callCount.should.equal(0); web.socketMessageHandler.callCount.should.equal(0);