45 lines
1.5 KiB
Python
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
|
|
)
|