the beginning of the idiots

This commit is contained in:
2025-10-24 14:51:13 -05:00
parent 0b377030c6
commit cb06217ef7
123 changed files with 10279 additions and 0 deletions

View File

@@ -0,0 +1,40 @@
"""
Tenant middleware for handling multi-tenant requests
"""
import uuid
from typing import Optional
from fastapi import Request, HTTPException, status
from starlette.middleware.base import BaseHTTPMiddleware
from .config.settings import settings
from .models import Tenant
class TenantMiddleware(BaseHTTPMiddleware):
async def dispatch(self, request: Request, call_next):
# Get tenant ID from header or subdomain
tenant_id = request.headers.get(settings.TENANT_ID_HEADER)
if not tenant_id:
# Try to extract tenant from subdomain
host = request.headers.get("host", "")
tenant_id = self.extract_tenant_from_host(host)
if not tenant_id and settings.MULTI_TENANT_ENABLED:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="Tenant ID is required"
)
# Attach tenant info to request
request.state.tenant_id = tenant_id
response = await call_next(request)
return response
def extract_tenant_from_host(self, host: str) -> Optional[str]:
"""
Extract tenant from host (subdomain.tenant.com)
"""
# For now, return a default tenant or None
# In a real implementation, you would parse the subdomain
# and look up the corresponding tenant in the database
return "default"