Middleware was actually useful

This commit is contained in:
Antoine Nguyen
2025-06-08 15:12:49 +02:00
parent 17fc9db554
commit e8f9c6b0f0
4 changed files with 32 additions and 0 deletions
@@ -118,6 +118,7 @@ MIDDLEWARE = (
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'modoboa.core.middleware.LocalConfigMiddleware',
'modoboa.lib.middleware.CommonExceptionCatcher',
'modoboa.lib.middleware.RequestCatcherMiddleware',
)
+22
View File
@@ -1,8 +1,30 @@
"""Custom middlewares."""
from django.http import JsonResponse
from django.utils.deprecation import MiddlewareMixin
from django.utils.encoding import smart_str
from modoboa.lib import signals as lib_signals
from modoboa.lib.exceptions import ModoboaException
from modoboa.lib.web_utils import _render_error
def is_ajax(request):
return request.META.get("HTTP_X_REQUESTED_WITH") == "XMLHttpRequest"
class CommonExceptionCatcher(MiddlewareMixin):
"""Modoboa exceptions catcher."""
def process_exception(self, request, exception):
if not isinstance(exception, ModoboaException):
return None
if "/api/" in request.path:
http_code = exception.http_code if exception.http_code else 500
return JsonResponse({"error": str(exception)}, status=http_code)
return _render_error(request, user_context={"error": smart_str(exception)})
class RequestCatcherMiddleware(MiddlewareMixin):
+8
View File
@@ -2,6 +2,14 @@
import re
from django.shortcuts import render
def _render_error(request, errortpl="error", user_context=None):
if user_context is None:
user_context = {}
return render(request, f"common/{errortpl}.html", user_context)
def size2integer(value: str, output_unit: str = "B") -> int:
"""
+1
View File
@@ -129,6 +129,7 @@ MIDDLEWARE = (
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
"modoboa.core.middleware.LocalConfigMiddleware",
"modoboa.lib.middleware.CommonExceptionCatcher",
"modoboa.lib.middleware.RequestCatcherMiddleware",
)