2022-12-31 13:13:19 -08:00
|
|
|
import logging
|
|
|
|
|
|
|
|
|
|
from django.conf import settings
|
|
|
|
|
from ipware import get_client_ip
|
|
|
|
|
|
|
|
|
|
logger = logging.getLogger("paperless.auth")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# https://docs.djangoproject.com/en/4.1/ref/contrib/auth/#django.contrib.auth.signals.user_login_failed
|
|
|
|
|
def handle_failed_login(sender, credentials, request, **kwargs):
|
|
|
|
|
client_ip, is_routable = get_client_ip(
|
|
|
|
|
request,
|
|
|
|
|
proxy_trusted_ips=settings.TRUSTED_PROXIES,
|
|
|
|
|
)
|
|
|
|
|
if client_ip is None:
|
|
|
|
|
logger.info(
|
|
|
|
|
f"Login failed for user `{credentials['username']}`."
|
2023-03-28 09:39:30 -07:00
|
|
|
" Unable to determine IP address.",
|
2022-12-31 13:13:19 -08:00
|
|
|
)
|
|
|
|
|
else:
|
|
|
|
|
if is_routable:
|
|
|
|
|
# We got the client's IP address
|
|
|
|
|
logger.info(
|
|
|
|
|
f"Login failed for user `{credentials['username']}`"
|
2023-03-28 09:39:30 -07:00
|
|
|
f" from IP `{client_ip}.`",
|
2022-12-31 13:13:19 -08:00
|
|
|
)
|
|
|
|
|
else:
|
|
|
|
|
# The client's IP address is private
|
|
|
|
|
logger.info(
|
|
|
|
|
f"Login failed for user `{credentials['username']}`"
|
2023-03-28 09:39:30 -07:00
|
|
|
f" from private IP `{client_ip}.`",
|
2022-12-31 13:13:19 -08:00
|
|
|
)
|