From 10a25b82af5a2b603973e947f9cc6cbaf3ccb70d Mon Sep 17 00:00:00 2001 From: Jakob Scheid Date: Sun, 3 May 2026 19:04:59 +0200 Subject: [PATCH] Bug fix: HTTPException should not be used in a middleware, so use JSONResponse instead --- .../integrations/gitea/middlewares/signature.py | 13 ++++++++++--- .../signature/test_GiteaSignatureMiddleware.py | 6 ++++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/jcloud_deployment_server/integrations/gitea/middlewares/signature.py b/src/jcloud_deployment_server/integrations/gitea/middlewares/signature.py index b2e3ede..1a0c5e0 100644 --- a/src/jcloud_deployment_server/integrations/gitea/middlewares/signature.py +++ b/src/jcloud_deployment_server/integrations/gitea/middlewares/signature.py @@ -16,6 +16,7 @@ import hmac import hashlib from fastapi import Request, HTTPException from starlette.middleware.base import BaseHTTPMiddleware +from starlette.responses import JSONResponse __all__ = [ 'GiteaSignatureMiddleware' @@ -45,7 +46,10 @@ class GiteaSignatureMiddleware(BaseHTTPMiddleware): signature = request.headers.get('X-Gitea-Signature') if not signature: - raise HTTPException(status_code = 401, detail = 'Missing signature') + return JSONResponse( + status_code = 401, + content = {'detail': 'Invalid signature'} + ) body = await request.body() @@ -57,6 +61,9 @@ class GiteaSignatureMiddleware(BaseHTTPMiddleware): ).hexdigest()}', signature ): - raise HTTPException(status_code = 401, detail = 'Invalid signature') - + return JSONResponse( + status_code = 401, + content = {'detail': 'Invalid signature'} + ) + return await call_next(request) \ No newline at end of file diff --git a/tests/unit/integrations/gitea/middlewares/signature/test_GiteaSignatureMiddleware.py b/tests/unit/integrations/gitea/middlewares/signature/test_GiteaSignatureMiddleware.py index 2e898d5..54d9e12 100644 --- a/tests/unit/integrations/gitea/middlewares/signature/test_GiteaSignatureMiddleware.py +++ b/tests/unit/integrations/gitea/middlewares/signature/test_GiteaSignatureMiddleware.py @@ -104,6 +104,8 @@ async def test_GiteaSignatureMiddleware_valid_signature(body, secret): res = await middleware.dispatch(req, call_next) assert hasattr(res, 'called') +import pprint + @pytest.mark.asyncio @pytest.mark.parametrize('signature,body,secret', [ (make_signature(b'body', b''), b'body', b'\x42'), @@ -139,5 +141,5 @@ async def test_GiteaSignatureMiddleware_invalid_signature(signature, body, secre headers ) - with pytest.raises(HTTPException): - await middleware.dispatch(req, call_next) \ No newline at end of file + res = await middleware.dispatch(req, call_next) + assert res.status_code == 401 \ No newline at end of file