mirror of
https://github.com/All-Hands-AI/OpenHands.git
synced 2026-01-14 09:18:04 -05:00
44 lines
1.4 KiB
Python
44 lines
1.4 KiB
Python
from urllib.parse import urlparse
|
|
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
from starlette.middleware.base import BaseHTTPMiddleware
|
|
from starlette.types import ASGIApp
|
|
|
|
|
|
class LocalhostCORSMiddleware(CORSMiddleware):
|
|
"""
|
|
Custom CORS middleware that allows any request from localhost/127.0.0.1 domains,
|
|
while using standard CORS rules for other origins.
|
|
"""
|
|
|
|
def __init__(self, app: ASGIApp, **kwargs) -> None:
|
|
super().__init__(app, **kwargs)
|
|
|
|
def is_allowed_origin(self, origin: str) -> bool:
|
|
if origin:
|
|
parsed = urlparse(origin)
|
|
hostname = parsed.hostname or ''
|
|
|
|
# Allow any localhost/127.0.0.1 origin regardless of port
|
|
if hostname in ['localhost', '127.0.0.1']:
|
|
return True
|
|
|
|
# For missing origin or other origins, use the parent class's logic
|
|
return super().is_allowed_origin(origin)
|
|
|
|
|
|
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
|