From d2fe59ae8f9c34c1f8a7d51c0d113348d7bed937 Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Wed, 1 Sep 2021 10:43:12 -0400 Subject: [PATCH] Fixes #7109: Ensure human readability of exceptions raised during REST API requests --- docs/release-notes/version-3.0.md | 1 + netbox/netbox/middleware.py | 8 ++++---- netbox/utilities/api.py | 3 ++- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/docs/release-notes/version-3.0.md b/docs/release-notes/version-3.0.md index c03a4687f..59b603ab1 100644 --- a/docs/release-notes/version-3.0.md +++ b/docs/release-notes/version-3.0.md @@ -23,6 +23,7 @@ * [#7101](https://github.com/netbox-community/netbox/issues/7101) - Enforce `MAX_PAGE_SIZE` for table and REST API pagination * [#7106](https://github.com/netbox-community/netbox/issues/7106) - Fix incorrect "Map It" button URL on a site's Physical Address field * [#7107](https://github.com/netbox-community/netbox/issues/7107) - Fix missing search button and search results in IP Address assignment "Assign IP" tab +* [#7109](https://github.com/netbox-community/netbox/issues/7109) - Ensure human readability of exceptions raised during REST API requests --- diff --git a/netbox/netbox/middleware.py b/netbox/netbox/middleware.py index ef50edc4a..e0f376223 100644 --- a/netbox/netbox/middleware.py +++ b/netbox/netbox/middleware.py @@ -113,6 +113,10 @@ class ExceptionHandlingMiddleware(object): def process_exception(self, request, exception): + # Handle exceptions that occur from REST API requests + if is_api_request(request): + return rest_api_server_error(request) + # Don't catch exceptions when in debug mode if settings.DEBUG: return @@ -121,10 +125,6 @@ class ExceptionHandlingMiddleware(object): if isinstance(exception, Http404): return - # Handle exceptions that occur from REST API requests - if is_api_request(request): - return rest_api_server_error(request) - # Determine the type of exception. If it's a common issue, return a custom error page with instructions. custom_template = None if isinstance(exception, ProgrammingError): diff --git a/netbox/utilities/api.py b/netbox/utilities/api.py index 4e147b7a2..e3fc3c8d4 100644 --- a/netbox/utilities/api.py +++ b/netbox/utilities/api.py @@ -48,7 +48,8 @@ def is_api_request(request): Return True of the request is being made via the REST API. """ api_path = reverse('api-root') - return request.path_info.startswith(api_path) + + return request.path_info.startswith(api_path) and request.content_type == 'application/json' def get_view_name(view, suffix=None):