From 606e34ec81e8c7ad1491a0fda5031f75d5d74713 Mon Sep 17 00:00:00 2001 From: Bavisetti Narayan <72156168+NarayanBavisetti@users.noreply.github.com> Date: Tue, 14 Oct 2025 17:21:11 +0530 Subject: [PATCH] [WIKI-730] chore: handle body too large error (#7963) * chore: added middleware to handle body too large * chore: added middleware to handle body too large * chore: indentend the code * chore: changed the response structure * chore: changed the response structure * chore: created a new file for middleware * chore: added a standardized error key --- apps/api/plane/middleware/logger.py | 1 - .../api/plane/middleware/request_body_size.py | 27 +++++++++++++++++++ apps/api/plane/settings/common.py | 1 + 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 apps/api/plane/middleware/request_body_size.py 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", ]