From ad8440c3d894f03059c0cced86b30289dcf3918a Mon Sep 17 00:00:00 2001 From: Lorenzo Venerandi Date: Mon, 9 Mar 2026 18:20:49 +0100 Subject: [PATCH] fix connection exception issue --- src/app.py | 9 +-------- src/middleware/ban_check.py | 17 +++++++++-------- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/src/app.py b/src/app.py index 2884162..a01df71 100644 --- a/src/app.py +++ b/src/app.py @@ -131,14 +131,7 @@ def create_app() -> FastAPI: async def access_log_middleware(request: Request, call_next): from dependencies import get_client_ip - try: - response: Response = await call_next(request) - except ConnectionResetError: - client_ip = get_client_ip(request) - path = request.url.path - method = request.method - get_access_logger().info(f"[BANNED] [{method}] {client_ip} - {path}") - raise + response: Response = await call_next(request) client_ip = get_client_ip(request) path = request.url.path diff --git a/src/middleware/ban_check.py b/src/middleware/ban_check.py index c4b2e80..5fcacf5 100644 --- a/src/middleware/ban_check.py +++ b/src/middleware/ban_check.py @@ -12,13 +12,6 @@ from starlette.responses import Response from dependencies import get_client_ip -class ConnectionResetResponse(Response): - """Response that abruptly closes the connection without sending data.""" - - async def __call__(self, scope, receive, send): - raise ConnectionResetError() - - class BanCheckMiddleware(BaseHTTPMiddleware): async def dispatch(self, request: Request, call_next): # Skip ban check for dashboard routes @@ -31,7 +24,15 @@ class BanCheckMiddleware(BaseHTTPMiddleware): tracker = request.app.state.tracker if tracker.is_banned_ip(client_ip): - return ConnectionResetResponse() + from logger import get_access_logger + + get_access_logger().info( + f"[BANNED] [{request.method}] {client_ip} - {request.url.path}" + ) + transport = request.scope.get("transport") + if transport: + transport.close() + return Response(status_code=500) response = await call_next(request) return response