Merge pull request #958 from alphagov/imdad-fix-sns-plaintext-header-json

Force parse JSON received from SNS
This commit is contained in:
Imdad Ahad
2017-05-16 11:39:26 +01:00
committed by GitHub
2 changed files with 15 additions and 2 deletions

View File

@@ -35,7 +35,7 @@ def validate_schema(schema):
def decorator(f):
@wraps(f)
def wrapper(*args, **kw):
validate(request.json, schema)
validate(request.get_json(force=True), schema)
return f(*args, **kw)
return wrapper
return decorator
@@ -44,7 +44,8 @@ def validate_schema(schema):
@letter_callback_blueprint.route('/notifications/letter/dvla', methods=['POST'])
@validate_schema(dvla_sns_callback_schema)
def process_letter_response():
req_json = request.json
req_json = request.get_json(force=True)
current_app.logger.info('Received SNS callback: {}'.format(req_json))
if not autoconfirm_subscription(req_json):
# The callback should have one record for an S3 Put Event.
filename = req_json['Message']['Records'][0]['s3']['object']['key']

View File

@@ -71,6 +71,18 @@ def test_dvla_callback_calls_update_letter_notifications_task(client, mocker):
update_task.assert_called_with(['bar.txt'], queue='notify')
def test_dvla_callback_does_not_raise_error_parsing_json_for_plaintext_header(client, mocker):
mocker.patch('app.notifications.notifications_letter_callback.update_letter_notifications_statuses.apply_async')
data = _sample_sns_s3_callback()
response = client.post(
path='/notifications/letter/dvla',
data=data,
headers=[('Content-Type', 'text/plain')]
)
assert response.status_code == 200
def test_firetext_callback_should_not_need_auth(client, mocker):
mocker.patch('app.statsd_client.incr')
response = client.post(