mirror of
https://github.com/GSA/notifications-api.git
synced 2025-12-09 14:42:24 -05:00
26 lines
1.0 KiB
Python
26 lines
1.0 KiB
Python
from flask import Blueprint, jsonify, request
|
|
|
|
from app.celery.process_ses_receipts_tasks import process_ses_results
|
|
from app.config import QueueNames
|
|
from app.errors import InvalidRequest
|
|
from app.notifications.sns_handlers import sns_notification_handler
|
|
|
|
ses_callback_blueprint = Blueprint("notifications_ses_callback", __name__)
|
|
|
|
|
|
# 400 counts as a permanent failure so SNS will not retry.
|
|
# 500 counts as a failed delivery attempt so SNS will retry.
|
|
# See https://docs.aws.amazon.com/sns/latest/dg/DeliveryPolicies.html#DeliveryPolicies
|
|
@ses_callback_blueprint.route("/notifications/email/ses", methods=["POST"])
|
|
def email_ses_callback_handler():
|
|
try:
|
|
data = sns_notification_handler(request.data, request.headers)
|
|
except InvalidRequest as e:
|
|
return jsonify(result="error", message=str(e.message)), e.status_code
|
|
|
|
message = data.get("Message")
|
|
if "mail" in message:
|
|
process_ses_results.apply_async([{"Message": message}], queue=QueueNames.NOTIFY)
|
|
|
|
return jsonify(result="success", message="SES-SNS callback succeeded"), 200
|