mirror of
https://github.com/GSA/notifications-api.git
synced 2025-12-23 08:51:30 -05:00
We don't log at this level and can always add them in manually if we need to debug something locally.
64 lines
2.1 KiB
Python
64 lines
2.1 KiB
Python
from flask import Blueprint, json, jsonify, request
|
|
|
|
from app.celery.process_sms_client_response_tasks import (
|
|
process_sms_client_response,
|
|
)
|
|
from app.config import QueueNames
|
|
from app.errors import InvalidRequest, register_errors
|
|
|
|
sms_callback_blueprint = Blueprint("sms_callback", __name__, url_prefix="/notifications/sms")
|
|
register_errors(sms_callback_blueprint)
|
|
|
|
|
|
@sms_callback_blueprint.route('/mmg', methods=['POST'])
|
|
def process_mmg_response():
|
|
client_name = 'MMG'
|
|
data = json.loads(request.data)
|
|
errors = validate_callback_data(data=data,
|
|
fields=['status', 'CID'],
|
|
client_name=client_name)
|
|
if errors:
|
|
raise InvalidRequest(errors, status_code=400)
|
|
|
|
status = str(data.get('status'))
|
|
detailed_status_code = str(data.get('substatus'))
|
|
|
|
provider_reference = data.get('CID')
|
|
|
|
process_sms_client_response.apply_async(
|
|
[status, provider_reference, client_name, detailed_status_code],
|
|
queue=QueueNames.SMS_CALLBACKS,
|
|
)
|
|
|
|
return jsonify(result='success'), 200
|
|
|
|
|
|
@sms_callback_blueprint.route('/firetext', methods=['POST'])
|
|
def process_firetext_response():
|
|
client_name = 'Firetext'
|
|
errors = validate_callback_data(data=request.form,
|
|
fields=['status', 'reference'],
|
|
client_name=client_name)
|
|
if errors:
|
|
raise InvalidRequest(errors, status_code=400)
|
|
|
|
status = request.form.get('status')
|
|
detailed_status_code = request.form.get('code')
|
|
provider_reference = request.form.get('reference')
|
|
|
|
process_sms_client_response.apply_async(
|
|
[status, provider_reference, client_name, detailed_status_code],
|
|
queue=QueueNames.SMS_CALLBACKS,
|
|
)
|
|
|
|
return jsonify(result='success'), 200
|
|
|
|
|
|
def validate_callback_data(data, fields, client_name):
|
|
errors = []
|
|
for f in fields:
|
|
if not str(data.get(f, '')):
|
|
error = "{} callback failed: {} missing".format(client_name, f)
|
|
errors.append(error)
|
|
return errors if len(errors) > 0 else None
|