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) {
|
||||
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) {
|
||||
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) {
|
||||
socket.on('message', this.socketMessageHandler.bind(this));
|
||||
}
|
||||
|
||||
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);
|
||||
});
|
||||
|
||||
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);
|
||||
});
|
||||
|
||||
|
@ -201,7 +202,7 @@ WebService.prototype.socketHandler = function(socket) {
|
|||
});
|
||||
|
||||
socket.on('disconnect', function() {
|
||||
log.info(self._getRemoteAddress(socket), 'web socket disconnect');
|
||||
log.info(remoteAddress, 'web socket disconnect');
|
||||
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() {
|
||||
var bus = new EventEmitter();
|
||||
bus.remoteAddress = '127.0.0.1';
|
||||
|
@ -244,6 +270,9 @@ describe('WebService', function() {
|
|||
socket = new EventEmitter();
|
||||
socket.conn = {};
|
||||
socket.conn.remoteAddress = '127.0.0.1';
|
||||
socket.client = {};
|
||||
socket.client.request = {};
|
||||
socket.client.request.headers = {};
|
||||
web.socketHandler(socket);
|
||||
socket.emit('message', 'data');
|
||||
});
|
||||
|
@ -255,6 +284,9 @@ describe('WebService', function() {
|
|||
socket = new EventEmitter();
|
||||
socket.conn = {};
|
||||
socket.conn.remoteAddress = '127.0.0.1';
|
||||
socket.client = {};
|
||||
socket.client.request = {};
|
||||
socket.client.request.headers = {};
|
||||
web.socketHandler(socket);
|
||||
socket.on('message', function() {
|
||||
web.socketMessageHandler.callCount.should.equal(0);
|
||||
|
|
Loading…
Reference in New Issue