Files
webmail/lib/__tests__/client-address.test.ts
T

32 lines
1.4 KiB
TypeScript

import { describe, expect, it, vi } from 'vitest';
vi.mock('@/lib/admin/session', () => ({ getClientIP: () => '127.0.0.1' }));
import { forwardedClientHeaders } from '@/lib/auth/client-address';
describe('forwardedClientHeaders', () => {
it('forwards a client address', () => {
expect(forwardedClientHeaders('203.0.113.7')).toEqual({ 'X-Forwarded-For': '203.0.113.7' });
expect(forwardedClientHeaders('10.0.0.5')).toEqual({ 'X-Forwarded-For': '10.0.0.5' });
expect(forwardedClientHeaders('2001:db8::1')).toEqual({ 'X-Forwarded-For': '2001:db8::1' });
});
it('forwards nothing for a missing or malformed address', () => {
expect(forwardedClientHeaders(undefined)).toEqual({});
expect(forwardedClientHeaders('')).toEqual({});
expect(forwardedClientHeaders('0.0.0.0')).toEqual({});
expect(forwardedClientHeaders('::')).toEqual({});
expect(forwardedClientHeaders('not-an-ip')).toEqual({});
});
// Stalwart 1.0 with `clientIpSource: xForwardedFor` (what stalwart-migrate
// sets for a 0.16 server that used X-Forwarded-For) answers 400 Bad Request
// to any request whose forwarded client is a loopback address. 0.16 took it.
it('forwards nothing for a loopback address', () => {
expect(forwardedClientHeaders('127.0.0.1')).toEqual({});
expect(forwardedClientHeaders('127.8.9.10')).toEqual({});
expect(forwardedClientHeaders('::1')).toEqual({});
expect(forwardedClientHeaders('::ffff:127.0.0.1')).toEqual({});
});
});