/
lesbeg
/
django-script-consent
Обзор
Документация
Войти
/
lesbeg
/
django-script-consent
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
2
CI/CD
Аналитика
Безопасность
master
script_consent/ip.py
50 строк
1 KB
Anton Trapeznikov
Release 0.2.0
11 авг 2026, 17:40
11 авг 2026, 17:40
5e335fc
Код
Авторство
О чём код?
import ipaddress from django.http import HttpRequest from script_consent.conf import app_settings def anonymize_ip(ip: str | None) -> str | None: if not ip: return None if not app_settings.ANONYMIZE_IP: return ip try: addr = ipaddress.ip_address(ip) except ValueError: return None if isinstance(addr, ipaddress.IPv4Address): parts = str(addr).split(".") parts[-1] = "0" return ".".join(parts) packed = bytearray(addr.packed) for i in range(6, 16): packed[i] = 0 return str(ipaddress.IPv6Address(bytes(packed))) def get_client_ip(request: HttpRequest) -> str | None: """ Client IP for audit log. By default uses REMOTE_ADDR only. Set TRUST_X_FORWARDED_FOR=True only when a reverse proxy overwrites X-Forwarded-For (spoofing otherwise weakens audit). """ if app_settings.TRUST_X_FORWARDED_FOR: forwarded = request.META.get("HTTP_X_FORWARDED_FOR") if forwarded: ip = forwarded.split(",")[0].strip() else: ip = request.META.get("REMOTE_ADDR") else: ip = request.META.get("REMOTE_ADDR") return anonymize_ip(ip)