|
|
@@ -0,0 +1,100 @@
|
|
|
+const SandboxedModule = require('sandboxed-module')
|
|
|
+const { expect } = require('chai')
|
|
|
+const modulePath = require('path').join(
|
|
|
+ __dirname,
|
|
|
+ '../../../app/js/WebsocketAddressManager'
|
|
|
+)
|
|
|
+
|
|
|
+describe('WebsocketAddressManager', function () {
|
|
|
+ beforeEach(function () {
|
|
|
+ this.WebsocketAddressManager = SandboxedModule.require(modulePath, {
|
|
|
+ requires: {},
|
|
|
+ })
|
|
|
+ })
|
|
|
+
|
|
|
+ describe('with a proxy configuration', function () {
|
|
|
+ beforeEach(function () {
|
|
|
+ this.websocketAddressManager = new this.WebsocketAddressManager(
|
|
|
+ true,
|
|
|
+ '127.0.0.1'
|
|
|
+ )
|
|
|
+ })
|
|
|
+
|
|
|
+ it('should return the client ip address when behind a proxy', function () {
|
|
|
+ expect(
|
|
|
+ this.websocketAddressManager.getRemoteIp({
|
|
|
+ headers: {
|
|
|
+ 'x-forwarded-proto': 'https',
|
|
|
+ 'x-forwarded-for': '123.45.67.89',
|
|
|
+ },
|
|
|
+ address: { address: '127.0.0.1' },
|
|
|
+ })
|
|
|
+ ).to.equal('123.45.67.89')
|
|
|
+ })
|
|
|
+
|
|
|
+ it('should return the client ip address for a direct connection', function () {
|
|
|
+ expect(
|
|
|
+ this.websocketAddressManager.getRemoteIp({
|
|
|
+ headers: {},
|
|
|
+ address: { address: '123.45.67.89' },
|
|
|
+ })
|
|
|
+ ).to.equal('123.45.67.89')
|
|
|
+ })
|
|
|
+
|
|
|
+ it('should return the client ip address when there are no headers in the handshake', function () {
|
|
|
+ expect(
|
|
|
+ this.websocketAddressManager.getRemoteIp({
|
|
|
+ address: { address: '123.45.67.89' },
|
|
|
+ })
|
|
|
+ ).to.equal('123.45.67.89')
|
|
|
+ })
|
|
|
+
|
|
|
+ it('should return a "client-handshake-missing" response when the handshake is missing', function () {
|
|
|
+ expect(this.websocketAddressManager.getRemoteIp()).to.equal(
|
|
|
+ 'client-handshake-missing'
|
|
|
+ )
|
|
|
+ })
|
|
|
+ })
|
|
|
+
|
|
|
+ describe('without a proxy configuration', function () {
|
|
|
+ beforeEach(function () {
|
|
|
+ this.websocketAddressManager = new this.WebsocketAddressManager(false)
|
|
|
+ })
|
|
|
+
|
|
|
+ it('should return the client ip address for a direct connection', function () {
|
|
|
+ expect(
|
|
|
+ this.websocketAddressManager.getRemoteIp({
|
|
|
+ headers: {},
|
|
|
+ address: { address: '123.45.67.89' },
|
|
|
+ })
|
|
|
+ ).to.equal('123.45.67.89')
|
|
|
+ })
|
|
|
+
|
|
|
+ it('should return undefined if the client ip address is not present', function () {
|
|
|
+ expect(
|
|
|
+ this.websocketAddressManager.getRemoteIp({
|
|
|
+ headers: {},
|
|
|
+ address: { otherAddressProperty: '123.45.67.89' },
|
|
|
+ })
|
|
|
+ ).to.be.undefined
|
|
|
+ })
|
|
|
+
|
|
|
+ it('should return the proxy ip address if there is actually a proxy', function () {
|
|
|
+ expect(
|
|
|
+ this.websocketAddressManager.getRemoteIp({
|
|
|
+ headers: {
|
|
|
+ 'x-forwarded-proto': 'https',
|
|
|
+ 'x-forwarded-for': '123.45.67.89',
|
|
|
+ },
|
|
|
+ address: { address: '127.0.0.1' },
|
|
|
+ })
|
|
|
+ ).to.equal('127.0.0.1')
|
|
|
+ })
|
|
|
+
|
|
|
+ it('should return a "client-handshake-missing" response when the handshake is missing', function () {
|
|
|
+ expect(this.websocketAddressManager.getRemoteIp()).to.equal(
|
|
|
+ 'client-handshake-missing'
|
|
|
+ )
|
|
|
+ })
|
|
|
+ })
|
|
|
+})
|