theo-agent-dashboard

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

__init__.py (1886B)


      1 """Router registration for all sub-routers."""
      2 
      3 from fastapi import FastAPI, Request, Response
      4 from starlette.middleware.base import BaseHTTPMiddleware, RequestResponseEndpoint
      5 
      6 from app.auth import get_jwt_from_cookie, verify_jwt
      7 from app.routes.auth import router as auth_router
      8 from app.routes.attachments import router as attachments_router
      9 from app.routes.chat import chat_router
     10 from app.routes.sessions import router as sessions_router
     11 from app.routes.topics import router as topics_router
     12 from app.routes.search import router as search_router
     13 from app.routes.models import router as models_router
     14 
     15 _EXEMPT_PREFIXES = ("/api/auth/", "/api/health", "/ws/")
     16 
     17 
     18 class AuthMiddleware(BaseHTTPMiddleware):
     19     """JWT auth middleware for /api/* routes."""
     20 
     21     async def dispatch(self, request: Request, call_next: RequestResponseEndpoint) -> Response:  # pragma: no mutate: block
     22         if request.url.path.startswith(_EXEMPT_PREFIXES):
     23             return await call_next(request)
     24         if request.method == "OPTIONS":
     25             return await call_next(request)
     26         if request.url.path.startswith("/api/"):
     27             token = get_jwt_from_cookie(request)
     28             if token is None:
     29                 return Response(status_code=401, content="Unauthorized")
     30             try:
     31                 verify_jwt(token)
     32             except Exception:
     33                 return Response(status_code=401, content="Invalid token")
     34         return await call_next(request)
     35 
     36 
     37 def register_routes(app: FastAPI) -> None:  # pragma: no mutate: block
     38     """Include all routers on the app."""
     39     app.include_router(auth_router)
     40     app.include_router(chat_router)
     41     app.include_router(attachments_router)
     42     app.include_router(sessions_router)
     43     app.include_router(topics_router)
     44     app.include_router(search_router)
     45     app.include_router(models_router)
     46     app.add_middleware(AuthMiddleware)