2025-10-06 15:25:37 +03:00

45 lines
1.5 KiB
Python

"""
Custom allauth adapter for the hospital management system.
"""
from allauth.account.adapter import DefaultAccountAdapter
from django.conf import settings
class CustomAccountAdapter(DefaultAccountAdapter):
"""
Custom account adapter to handle edge cases in allauth.
"""
def is_safe_url(self, url):
"""
Override is_safe_url to handle cases where request context is None.
This fixes the AttributeError: 'NoneType' object has no attribute 'get_host'
that occurs when context.request is None in certain scenarios.
"""
if not url:
return False
# Try to get the request from the adapter's stash
request = getattr(self, 'request', None)
if request:
# If we have a request, use the standard validation
try:
allowed_hosts = {request.get_host()} | set(settings.ALLOWED_HOSTS)
except AttributeError:
# Fallback if request doesn't have get_host
allowed_hosts = set(settings.ALLOWED_HOSTS)
else:
# If no request available, just use ALLOWED_HOSTS
allowed_hosts = set(settings.ALLOWED_HOSTS)
# Use Django's url_has_allowed_host_and_scheme for validation
from django.utils.http import url_has_allowed_host_and_scheme
return url_has_allowed_host_and_scheme(
url=url,
allowed_hosts=allowed_hosts,
require_https=request.is_secure() if request else False
)