# utils/ip_helper.py import geoip2.database from django.conf import settings import os def get_client_ip(request): """Retrieves the real IP address from the request.""" x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR') if x_forwarded_for: # The header contains a list of IPs, the first one is the real client ip = x_forwarded_for.split(',')[0] else: ip = request.META.get('REMOTE_ADDR') return ip def get_country_code(ip_address): """ Returns the ISO country code (e.g., 'RU', 'US', 'IR') for an IP. Returns None if IP is invalid or not found. """ # Path to your .mmdb file db_path = os.path.join(settings.BASE_DIR, 'utils', 'country_city_db', 'GeoLite2-Country.mmdb') try: with geoip2.database.Reader(db_path) as reader: response = reader.country(ip_address) return response.country.iso_code except Exception as e: # Log error in production print(f"GeoIP Error: {e}") return None