from __future__ import annotations from django.test import RequestFactory, override_settings from apps.core.network import client_ip def _request(remote: str, forwarded: str = ""): request = RequestFactory().get("/") request.META["REMOTE_ADDR"] = remote if forwarded: request.META["HTTP_X_FORWARDED_FOR"] = forwarded return request @override_settings(TRUSTED_PROXY_CIDRS=[]) def test_client_ip_ignores_untrusted_forwarded_header(): assert client_ip(_request("203.0.113.20", "198.51.100.7")) == "203.0.113.20" @override_settings(TRUSTED_PROXY_CIDRS=["172.18.0.0/16"]) def test_client_ip_uses_forwarded_chain_only_from_trusted_proxy(): request = _request("172.18.0.4", "198.51.100.7, 172.18.0.3") assert client_ip(request) == "198.51.100.7" @override_settings(TRUSTED_PROXY_CIDRS=["172.18.0.0/16"]) def test_client_ip_skips_invalid_forwarded_values(): request = _request("172.18.0.4", "invalid, 198.51.100.9") assert client_ip(request) == "198.51.100.9"