|
|
@@ -29,12 +29,10 @@ from fastapi import (
|
|
|
WebSocket,
|
|
|
status,
|
|
|
)
|
|
|
-from fastapi.middleware.cors import CORSMiddleware
|
|
|
from fastapi.responses import JSONResponse, StreamingResponse
|
|
|
from fastapi.security import HTTPBearer
|
|
|
from fastapi.staticfiles import StaticFiles
|
|
|
from pydantic import BaseModel
|
|
|
-from starlette.middleware.base import BaseHTTPMiddleware
|
|
|
|
|
|
import openhands.agenthub # noqa F401 (we import this to get the agents registered)
|
|
|
from openhands.controller.agent import Agent
|
|
|
@@ -57,6 +55,7 @@ from openhands.events.serialization import event_to_dict
|
|
|
from openhands.llm import bedrock
|
|
|
from openhands.runtime.base import Runtime
|
|
|
from openhands.server.auth import get_sid_from_token, sign_token
|
|
|
+from openhands.server.middleware import LocalhostCORSMiddleware, NoCacheMiddleware
|
|
|
from openhands.server.session import SessionManager
|
|
|
|
|
|
load_dotenv()
|
|
|
@@ -93,30 +92,13 @@ async def lifespan(app: FastAPI):
|
|
|
|
|
|
app = FastAPI(lifespan=lifespan)
|
|
|
app.add_middleware(
|
|
|
- CORSMiddleware,
|
|
|
- allow_origins=['http://localhost:3001', 'http://127.0.0.1:3001'],
|
|
|
+ LocalhostCORSMiddleware,
|
|
|
allow_credentials=True,
|
|
|
allow_methods=['*'],
|
|
|
allow_headers=['*'],
|
|
|
)
|
|
|
|
|
|
|
|
|
-class NoCacheMiddleware(BaseHTTPMiddleware):
|
|
|
- """
|
|
|
- Middleware to disable caching for all routes by adding appropriate headers
|
|
|
- """
|
|
|
-
|
|
|
- async def dispatch(self, request, call_next):
|
|
|
- response = await call_next(request)
|
|
|
- if not request.url.path.startswith('/assets'):
|
|
|
- response.headers['Cache-Control'] = (
|
|
|
- 'no-cache, no-store, must-revalidate, max-age=0'
|
|
|
- )
|
|
|
- response.headers['Pragma'] = 'no-cache'
|
|
|
- response.headers['Expires'] = '0'
|
|
|
- return response
|
|
|
-
|
|
|
-
|
|
|
app.add_middleware(NoCacheMiddleware)
|
|
|
|
|
|
security_scheme = HTTPBearer()
|