mirror of
https://github.com/plankanban/planka.git
synced 2025-07-18 12:49:43 +02:00
78 lines
2.3 KiB
JavaScript
78 lines
2.3 KiB
JavaScript
const { expect } = require('chai');
|
|
const { getRemoteAddress } = require('../../utils/remoteAddress');
|
|
|
|
/**
|
|
* Fake HTTP request object
|
|
* given to all api controllers.
|
|
*/
|
|
const MOCK_REQUEST = {
|
|
ip: '',
|
|
ips: [],
|
|
};
|
|
|
|
/**
|
|
* Mocks the `MOCK_REQUEST` value.
|
|
* Should be called before asserting `getRemoteAddress`.
|
|
* @param {string} ip Mock remote IP address
|
|
* @param {any[]} ips Mock array of proxy IP addresses
|
|
*/
|
|
const mockRequest = (ip, ips) => {
|
|
MOCK_REQUEST.ip = ip;
|
|
MOCK_REQUEST.ips = ips;
|
|
};
|
|
|
|
/**
|
|
* Mocks the `TRUST_PROXY` environment variable passed through `docker-compose` file.
|
|
* @param {boolean} trustProxy Whether the TRUST_PROXY environment variable was enabled.
|
|
*/
|
|
const mockProxyFlag = (trustProxy) => {
|
|
process.env.TRUST_PROXY = !!trustProxy;
|
|
};
|
|
|
|
describe('remoteAddress', () => {
|
|
describe('#getRemoteAddress(Request)', () => {
|
|
it('should get IPv4 remote address while not behind proxy and TRUST_PROXY=false', async () => {
|
|
const expectedAddress = '172.2.109.132';
|
|
|
|
mockRequest(`::ffff:${expectedAddress}`, null);
|
|
mockProxyFlag(false);
|
|
|
|
expect(getRemoteAddress(MOCK_REQUEST)).to.be.equal(expectedAddress);
|
|
});
|
|
|
|
it('should get IPv6 remote address while not behind proxy and TRUST_PROXY=false', async () => {
|
|
const expectedAddress = 'f53f:5832:9f1c:fe38:ce3d:1be8:81a2:115e';
|
|
|
|
mockRequest(expectedAddress, null);
|
|
mockProxyFlag(false);
|
|
|
|
expect(getRemoteAddress(MOCK_REQUEST)).to.be.equal(expectedAddress);
|
|
});
|
|
|
|
it('should get IPv4 remote address while behind proxy and TRUST_PROXY=true', async () => {
|
|
const expectedAddress = '172.2.109.132';
|
|
|
|
mockRequest(`::ffff:${expectedAddress}`, [
|
|
`::ffff:${expectedAddress}`,
|
|
'::ffff:192.182.23.111',
|
|
'::ffff:120.210.132.14',
|
|
]);
|
|
mockProxyFlag(true);
|
|
|
|
expect(getRemoteAddress(MOCK_REQUEST)).to.be.equal(expectedAddress);
|
|
});
|
|
|
|
it('should get IPv6 remote address while behind proxy and TRUST_PROXY=true', async () => {
|
|
const expectedAddress = 'f53f:5832:9f1c:fe38:ce3d:1be8:81a2:115e';
|
|
|
|
mockRequest(expectedAddress, [
|
|
expectedAddress,
|
|
'9d74:fb18:3b95:801f:8751:8d18:8207:b322',
|
|
'598e:4291:e1b3:2991:5d17:00af:1b6b:802c',
|
|
]);
|
|
mockProxyFlag(true);
|
|
|
|
expect(getRemoteAddress(MOCK_REQUEST)).to.be.equal(expectedAddress);
|
|
});
|
|
});
|
|
});
|