diff --git a/apps/api/plane/middleware/logger.py b/apps/api/plane/middleware/logger.py index 62f868476..d513ee3e3 100644 --- a/apps/api/plane/middleware/logger.py +++ b/apps/api/plane/middleware/logger.py @@ -12,7 +12,6 @@ from rest_framework.request import Request from plane.utils.ip_address import get_client_ip from plane.db.models import APIActivityLog - api_logger = logging.getLogger("plane.api.request") diff --git a/apps/api/plane/middleware/request_body_size.py b/apps/api/plane/middleware/request_body_size.py new file mode 100644 index 000000000..9807c5715 --- /dev/null +++ b/apps/api/plane/middleware/request_body_size.py @@ -0,0 +1,27 @@ +from django.core.exceptions import RequestDataTooBig +from django.http import JsonResponse + + +class RequestBodySizeLimitMiddleware: + """ + Middleware to catch RequestDataTooBig exceptions and return + 413 Request Entity Too Large instead of 400 Bad Request. + """ + + def __init__(self, get_response): + self.get_response = get_response + + def __call__(self, request): + try: + _ = request.body + except RequestDataTooBig: + return JsonResponse( + { + "error": "REQUEST_BODY_TOO_LARGE", + "detail": "The size of the request body exceeds the maximum allowed size.", + }, + status=413, + ) + + # If body size is OK, continue with the request + return self.get_response(request) diff --git a/apps/api/plane/settings/common.py b/apps/api/plane/settings/common.py index 44a4d0d39..e8eb77e3b 100644 --- a/apps/api/plane/settings/common.py +++ b/apps/api/plane/settings/common.py @@ -62,6 +62,7 @@ MIDDLEWARE = [ "django.middleware.clickjacking.XFrameOptionsMiddleware", "crum.CurrentRequestUserMiddleware", "django.middleware.gzip.GZipMiddleware", + "plane.middleware.request_body_size.RequestBodySizeLimitMiddleware", "plane.middleware.logger.APITokenLogMiddleware", "plane.middleware.logger.RequestLoggerMiddleware", ]