Skip to content

Commit d5e3840

Browse files
fix: 500->400 for bad /api/v1/ requests (#8802)
* fix: 400->500 for bad /api/v1/ requests * chore: remove unused import
1 parent 0348dbd commit d5e3840

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

ietf/api/views.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
from django.contrib.auth.models import User
1919
from django.core.exceptions import ValidationError
2020
from django.core.validators import validate_email
21-
from django.http import HttpResponse, Http404, JsonResponse
21+
from django.http import HttpResponse, Http404, JsonResponse, HttpResponseBadRequest
2222
from django.shortcuts import render, get_object_or_404
2323
from django.urls import reverse
2424
from django.utils.decorators import method_decorator
@@ -68,18 +68,23 @@ def top_level(request):
6868
}
6969

7070
serializer = Serializer()
71-
desired_format = determine_format(request, serializer)
71+
try:
72+
desired_format = determine_format(request, serializer)
73+
except BadRequest as err:
74+
return HttpResponseBadRequest(str(err))
7275

7376
options = {}
7477

7578
if 'text/javascript' in desired_format:
7679
callback = request.GET.get('callback', 'callback')
7780

7881
if not is_valid_jsonp_callback_value(callback):
79-
raise BadRequest('JSONP callback name is invalid.')
82+
return HttpResponseBadRequest("JSONP callback name is invalid")
8083

8184
options['callback'] = callback
8285

86+
# This might raise UnsupportedFormat, but that indicates a real server misconfiguration
87+
# so let it bubble up unhandled and trigger a 500 / email to admins.
8388
serialized = serializer.serialize(available_resources, desired_format, options)
8489
return HttpResponse(content=serialized, content_type=build_content_type(desired_format))
8590

0 commit comments

Comments
 (0)