Backend Draft
This commit is contained in:
39
backend/tenants/middleware.py
Normal file
39
backend/tenants/middleware.py
Normal file
@@ -0,0 +1,39 @@
|
||||
from django.http import JsonResponse
|
||||
from tenants.models import Tenant
|
||||
|
||||
class TenantMiddleware:
|
||||
def __init__(self, get_response):
|
||||
self.get_response = get_response
|
||||
self.exempt_paths = [
|
||||
'/admin/',
|
||||
'/api/schema/',
|
||||
'/api/docs/',
|
||||
'/api/auth/login/',
|
||||
'/api/auth/register/',
|
||||
'/api/auth/token/refresh/',
|
||||
'/api/auth/profile/',
|
||||
]
|
||||
|
||||
def __call__(self, request):
|
||||
if any(request.path.startswith(path) for path in self.exempt_paths):
|
||||
request.tenant = None
|
||||
return self.get_response(request)
|
||||
|
||||
# 1. Check Header
|
||||
tenant_id = request.headers.get('X-Tenant-ID')
|
||||
if not tenant_id:
|
||||
# 2. Check Subdomain (Optional, skipping for now, can implement later)
|
||||
# host = request.get_host().split(':')[0]
|
||||
# subdomain = host.split('.')[0]
|
||||
pass
|
||||
|
||||
if tenant_id:
|
||||
try:
|
||||
request.tenant = Tenant.objects.get(id=tenant_id, is_active=True)
|
||||
except Tenant.DoesNotExist:
|
||||
return JsonResponse({"detail": "Invalid or inactive tenant ID supplied."}, status=403)
|
||||
else:
|
||||
# Normally we might enforce tenant_id, but we'll let permission classes handle it.
|
||||
request.tenant = None
|
||||
|
||||
return self.get_response(request)
|
||||
Reference in New Issue
Block a user