@@ -0,0 +1,30 @@
|
||||
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"
|
||||
Reference in New Issue
Block a user