| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- from __future__ import annotations
- from typing import Optional
- from django.utils.deprecation import MiddlewareMixin
- from django.contrib.sites.models import Site
- from .models import OrganizationSite, Organization
- class CurrentOrganizationMiddleware(MiddlewareMixin):
- def process_request(self, request):
- request.site = None # type: ignore[attr-defined]
- request.org: Optional[Organization] = None # type: ignore[attr-defined]
- host = request.get_host().split(":")[0].lower()
- # Resolve Site by host
- try:
- request.site = Site.objects.get(domain__iexact=host)
- except Site.DoesNotExist:
- try:
- request.site = Site.objects.get_current()
- except Exception:
- request.site = None
- # Map Site -> Organization
- if request.site is not None:
- try:
- mapping = OrganizationSite.objects.select_related("organization").get(site=request.site)
- request.org = mapping.organization
- except OrganizationSite.DoesNotExist:
- request.org = None
- # Fallback to user's org if not mapped
- if request.org is None and getattr(request, "user", None) and request.user.is_authenticated:
- request.org = getattr(getattr(request.user, "recycle_profile", None), "organization", None)
- return None
|