""" 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 )