mirror of
https://github.com/GSA/notifications-api.git
synced 2026-08-23 15:56:45 -04:00
We are getting 500 errors when a POST notification has characters that can not be decoded or the json is malformed.
The exception is wrapped and a sensible error message is returned to the client.
This commit is contained in:
@@ -3,6 +3,7 @@ import functools
|
|||||||
import io
|
import io
|
||||||
import math
|
import math
|
||||||
|
|
||||||
|
import werkzeug
|
||||||
from flask import request, jsonify, current_app, abort
|
from flask import request, jsonify, current_app, abort
|
||||||
from notifications_utils.pdf import pdf_page_count, PdfReadError
|
from notifications_utils.pdf import pdf_page_count, PdfReadError
|
||||||
from notifications_utils.recipients import try_validate_and_format_phone_number
|
from notifications_utils.recipients import try_validate_and_format_phone_number
|
||||||
@@ -104,12 +105,17 @@ def post_precompiled_letter_notification():
|
|||||||
|
|
||||||
@v2_notification_blueprint.route('/<notification_type>', methods=['POST'])
|
@v2_notification_blueprint.route('/<notification_type>', methods=['POST'])
|
||||||
def post_notification(notification_type):
|
def post_notification(notification_type):
|
||||||
|
try:
|
||||||
|
request_json = request.get_json()
|
||||||
|
except werkzeug.exceptions.BadRequest as e:
|
||||||
|
raise BadRequestError(message=e.description, status_code=400)
|
||||||
|
|
||||||
if notification_type == EMAIL_TYPE:
|
if notification_type == EMAIL_TYPE:
|
||||||
form = validate(request.get_json(), post_email_request)
|
form = validate(request_json, post_email_request)
|
||||||
elif notification_type == SMS_TYPE:
|
elif notification_type == SMS_TYPE:
|
||||||
form = validate(request.get_json(), post_sms_request)
|
form = validate(request_json, post_sms_request)
|
||||||
elif notification_type == LETTER_TYPE:
|
elif notification_type == LETTER_TYPE:
|
||||||
form = validate(request.get_json(), post_letter_request)
|
form = validate(request_json, post_letter_request)
|
||||||
else:
|
else:
|
||||||
abort(404)
|
abort(404)
|
||||||
|
|
||||||
|
|||||||
@@ -839,3 +839,12 @@ def test_post_notification_without_document_upload_permission(client, notify_db,
|
|||||||
headers=[('Content-Type', 'application/json'), auth_header])
|
headers=[('Content-Type', 'application/json'), auth_header])
|
||||||
|
|
||||||
assert response.status_code == 400, response.get_data(as_text=True)
|
assert response.status_code == 400, response.get_data(as_text=True)
|
||||||
|
|
||||||
|
|
||||||
|
def test_post_notification_returns_400_when_get_json_throws_exception(client, sample_email_template, rmock, mocker):
|
||||||
|
auth_header = create_authorization_header(service_id=sample_email_template.service_id)
|
||||||
|
response = client.post(
|
||||||
|
path="v2/notifications/email",
|
||||||
|
data="[",
|
||||||
|
headers=[('Content-Type', 'application/json'), auth_header])
|
||||||
|
assert response.status_code == 400
|
||||||
|
|||||||
Reference in New Issue
Block a user