def sns_callback_handler(): message_type = request.headers.get('x-amz-sns-message-type') try: verify_message_type(message_type) except InvalidMessageTypeException: raise InvalidRequest("SES-SNS callback failed: invalid message type", 400) try: message = json.loads(request.data) except json.decoder.JSONDecodeError: raise InvalidRequest("SES-SNS callback failed: invalid JSON given", 400) try: validatesns.validate(message, get_certificate=get_certificate) except validatesns.ValidationError: raise InvalidRequest("SES-SNS callback failed: validation failed", 400) if autoconfirm_subscription(message): return jsonify(result="success", message="SES-SNS auto-confirm callback succeeded"), 200 ok, retry = process_ses_results(message) if ok: return jsonify(result="success", message="SES-SNS callback succeeded"), 200 if retry: raise InvalidRequest("SES callback failed, should retry", 500) raise InvalidRequest("SES-SNS callback failed", 400)
def process_letter_response(): req_json = request.get_json(force=True) current_app.logger.debug('Received SNS callback: {}'.format(req_json)) if not autoconfirm_subscription(req_json): # The callback should have one record for an S3 Put Event. message = json.loads(req_json['Message']) filename = message['Records'][0]['s3']['object']['key'] current_app.logger.info('Received file from DVLA: {}'.format(filename)) if filename.lower().endswith('rs.txt') or filename.lower().endswith('rsp.txt'): current_app.logger.info('DVLA callback: Calling task to update letter notifications') update_letter_notifications_statuses.apply_async([filename], queue=QueueNames.NOTIFY) return jsonify( result="success", message="DVLA callback succeeded" ), 200
def process_letter_response(): req_json = request.get_json(force=True) current_app.logger.debug("Received SNS callback: {}".format(req_json)) if not autoconfirm_subscription(req_json): # The callback should have one record for an S3 Put Event. message = json.loads(req_json["Message"]) filename = message["Records"][0]["s3"]["object"]["key"] current_app.logger.info("Received file from DVLA: {}".format(filename)) if filename.lower().endswith("rs.txt") or filename.lower().endswith( "rsp.txt"): current_app.logger.info( "DVLA callback: Calling task to update letter notifications") update_letter_notifications_statuses.apply_async( [filename], queue=QueueNames.NOTIFY) record_daily_sorted_counts.apply_async([filename], queue=QueueNames.NOTIFY) return jsonify(result="success", message="DVLA callback succeeded"), 200