diff --git a/engine/apps/integrations/middlewares.py b/engine/apps/integrations/middlewares.py new file mode 100644 index 00000000..87408370 --- /dev/null +++ b/engine/apps/integrations/middlewares.py @@ -0,0 +1,14 @@ +import logging + +from django.core.exceptions import PermissionDenied +from django.http import HttpResponse +from django.utils.deprecation import MiddlewareMixin +from rest_framework import status + +logger = logging.getLogger(__name__) + + +class IntegrationExceptionMiddleware(MiddlewareMixin): + def process_exception(self, request, exception): + if request.path.startswith("/integrations/v1") and isinstance(exception, PermissionDenied): + return HttpResponse(exception, status=status.HTTP_403_FORBIDDEN) diff --git a/engine/settings/base.py b/engine/settings/base.py index d9ec9f36..2dfeaa30 100644 --- a/engine/settings/base.py +++ b/engine/settings/base.py @@ -244,6 +244,7 @@ MIDDLEWARE = [ "django.middleware.clickjacking.XFrameOptionsMiddleware", "social_django.middleware.SocialAuthExceptionMiddleware", "apps.social_auth.middlewares.SocialAuthAuthCanceledExceptionMiddleware", + "apps.integrations.middlewares.IntegrationExceptionMiddleware", ] LOG_REQUEST_ID_HEADER = "HTTP_X_CLOUD_TRACE_CONTEXT"