コード例 #1
0
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)
コード例 #2
0
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
コード例 #3
0
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