31 lines
1006 B
Python
31 lines
1006 B
Python
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"
|