web: get remoteAddress for socket with cloudflare header
This commit is contained in:
parent
57cb146ce0
commit
bf080422ed
|
@ -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();
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue