diff --git a/core/utils.py b/core/utils.py index 87f3ab50..41d132bc 100644 --- a/core/utils.py +++ b/core/utils.py @@ -25,6 +25,7 @@ from typing import Optional import PIL from django.conf import settings from django.core.files.base import ContentFile +from django.http import HttpRequest from django.utils import timezone from PIL import ExifTags from PIL.Image import Resampling @@ -297,3 +298,16 @@ def bbcode_to_markdown(text): new_text.append(line) return "\n".join(new_text) + + +def get_client_ip(request: HttpRequest) -> str | None: + headers = ( + "X_FORWARDED_FOR", # Common header for proixes + "FORWARDED", # Standard header defined by RFC 7239. + "REMOTE_ADDR", # Default IP Address (direct connection) + ) + for header in headers: + if (ip := request.META.get(header)) is not None: + return ip + + return None diff --git a/sith/honeypot.py b/sith/honeypot.py index a64b428b..f70e2874 100644 --- a/sith/honeypot.py +++ b/sith/honeypot.py @@ -4,12 +4,14 @@ from typing import Any from django.http import HttpRequest, HttpResponse +from core.utils import get_client_ip + def custom_honeypot_error( request: HttpRequest, context: dict[str, Any] ) -> HttpResponse: logging.warning( f"[{strftime('%c', localtime())}] " - f"HoneyPot blocked user with ip {request.META.get('X-Forwarded-For')}" + f"HoneyPot blocked user with ip {get_client_ip(request)}" ) return HttpResponse("Upon reading this, the http client was enlightened.")