mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-18 13:39:41 -04:00
refactor of api callbacks admin work
This commit is contained in:
@@ -1,7 +1,12 @@
|
||||
from flask import request, render_template, redirect, url_for, flash, Markup, abort
|
||||
from flask_login import login_required, current_user
|
||||
from app.main import main
|
||||
from app.main.forms import CreateKeyForm, Whitelist, ServiceCallbacksForm
|
||||
from app.main.forms import (
|
||||
CreateKeyForm,
|
||||
Whitelist,
|
||||
ServiceReceiveMessagesCallbackForm,
|
||||
ServiceDeliveryStatusCallbackForm
|
||||
)
|
||||
from app import api_key_api_client, service_api_client, notification_api_client, current_service
|
||||
from app.utils import user_has_permissions, email_safe
|
||||
from app.notify_client.api_key_api_client import KEY_TYPE_NORMAL, KEY_TYPE_TEST, KEY_TYPE_TEAM
|
||||
@@ -13,8 +18,13 @@ dummy_bearer_token = 'bearer_token_set'
|
||||
@login_required
|
||||
@user_has_permissions('manage_api_keys', admin_override=True)
|
||||
def api_integration(service_id):
|
||||
callbacks_link = (
|
||||
'.api_callbacks' if 'inbound_sms' in current_service['permissions']
|
||||
else '.delivery_status_callback'
|
||||
)
|
||||
return render_template(
|
||||
'views/api/index.html',
|
||||
callbacks_link=callbacks_link,
|
||||
api_notifications=notification_api_client.get_api_notifications_for_service(service_id)
|
||||
)
|
||||
|
||||
@@ -144,58 +154,107 @@ def check_token_against_dummy_bearer(token):
|
||||
@main.route("/services/<service_id>/api/callbacks", methods=['GET', 'POST'])
|
||||
@login_required
|
||||
def api_callbacks(service_id):
|
||||
callback_api, inbound_api = get_apis()
|
||||
can_receive_inbound = 'inbound_sms' in current_service['permissions']
|
||||
if 'inbound_sms' not in current_service['permissions']:
|
||||
return redirect(url_for('.delivery_status_callback', service_id=service_id))
|
||||
|
||||
form = ServiceCallbacksForm(
|
||||
inbound_url=inbound_api.get('url') if inbound_api else '',
|
||||
inbound_bearer_token=dummy_bearer_token if inbound_api else '',
|
||||
outbound_url=callback_api.get('url') if callback_api else '',
|
||||
outbound_bearer_token=dummy_bearer_token if callback_api else '',
|
||||
can_receive_inbound=can_receive_inbound,
|
||||
received_text_messages_callback, delivery_status_callback = get_apis()
|
||||
|
||||
return render_template(
|
||||
'views/api/callbacks.html',
|
||||
received_text_messages_callback=received_text_messages_callback.get('url', "Not Set"),
|
||||
delivery_status_callback=delivery_status_callback.get('url', "Not Set")
|
||||
)
|
||||
|
||||
|
||||
def get_delivery_status_callback_details():
|
||||
if current_service['service_callback_api']:
|
||||
return service_api_client.get_service_callback_api(
|
||||
current_service['id'],
|
||||
current_service.get('service_callback_api')[0]
|
||||
)
|
||||
|
||||
|
||||
@main.route("/services/<service_id>/api/callbacks/delivery-status-callback", methods=['GET', 'POST'])
|
||||
@login_required
|
||||
def delivery_status_callback(service_id):
|
||||
delivery_status_callback = get_delivery_status_callback_details()
|
||||
back_link = (
|
||||
'.api_callbacks' if 'inbound_sms' in current_service['permissions']
|
||||
else '.api_integration'
|
||||
)
|
||||
|
||||
form = ServiceDeliveryStatusCallbackForm(
|
||||
url=delivery_status_callback.get('url') if delivery_status_callback else '',
|
||||
bearer_token=dummy_bearer_token if delivery_status_callback else ''
|
||||
)
|
||||
|
||||
if form.validate_on_submit():
|
||||
if callback_api:
|
||||
if (callback_api.get('url') != form.outbound_url.data
|
||||
or form.outbound_bearer_token.data != dummy_bearer_token):
|
||||
if delivery_status_callback:
|
||||
if (delivery_status_callback.get('url') != form.url.data
|
||||
or form.bearer_token.data != dummy_bearer_token):
|
||||
service_api_client.update_service_callback_api(
|
||||
service_id,
|
||||
url=form.outbound_url.data,
|
||||
bearer_token=check_token_against_dummy_bearer(form.outbound_bearer_token.data),
|
||||
url=form.url.data,
|
||||
bearer_token=check_token_against_dummy_bearer(form.bearer_token.data),
|
||||
user_id=current_user.id,
|
||||
callback_api_id=callback_api.get('id')
|
||||
callback_api_id=delivery_status_callback.get('id')
|
||||
)
|
||||
else:
|
||||
service_api_client.create_service_callback_api(
|
||||
service_id,
|
||||
url=form.outbound_url.data,
|
||||
bearer_token=form.outbound_bearer_token.data,
|
||||
url=form.url.data,
|
||||
bearer_token=form.bearer_token.data,
|
||||
user_id=current_user.id
|
||||
)
|
||||
if can_receive_inbound:
|
||||
if inbound_api:
|
||||
if (inbound_api.get('url') != form.inbound_url.data
|
||||
or form.inbound_bearer_token.data != dummy_bearer_token):
|
||||
service_api_client.update_service_inbound_api(
|
||||
service_id,
|
||||
url=form.inbound_url.data,
|
||||
bearer_token=check_token_against_dummy_bearer(form.inbound_bearer_token.data),
|
||||
user_id=current_user.id,
|
||||
inbound_api_id=inbound_api.get('id')
|
||||
)
|
||||
else:
|
||||
service_api_client.create_service_inbound_api(
|
||||
service_id,
|
||||
url=form.inbound_url.data,
|
||||
bearer_token=form.inbound_bearer_token.data,
|
||||
user_id=current_user.id
|
||||
)
|
||||
|
||||
return redirect(url_for('.api_integration', service_id=service_id))
|
||||
return redirect(url_for(back_link, service_id=service_id))
|
||||
|
||||
return render_template(
|
||||
'views/api/callbacks.html',
|
||||
'views/api/callbacks/delivery-status-callback.html',
|
||||
back_link=back_link,
|
||||
form=form,
|
||||
)
|
||||
|
||||
|
||||
def get_received_text_messages_callback():
|
||||
if current_service['inbound_api']:
|
||||
return service_api_client.get_service_inbound_api(
|
||||
current_service['id'],
|
||||
current_service.get('inbound_api')[0]
|
||||
)
|
||||
|
||||
|
||||
@main.route("/services/<service_id>/api/callbacks/received-text-messages-callback", methods=['GET', 'POST'])
|
||||
@login_required
|
||||
def received_text_messages_callback(service_id):
|
||||
if 'inbound_sms' not in current_service['permissions']:
|
||||
return redirect(url_for('.api_integration', service_id=service_id))
|
||||
|
||||
received_text_messages_callback = get_received_text_messages_callback()
|
||||
form = ServiceReceiveMessagesCallbackForm(
|
||||
url=received_text_messages_callback.get('url') if received_text_messages_callback else '',
|
||||
bearer_token=dummy_bearer_token if received_text_messages_callback else ''
|
||||
)
|
||||
|
||||
if form.validate_on_submit():
|
||||
if received_text_messages_callback:
|
||||
if (received_text_messages_callback.get('url') != form.url.data
|
||||
or form.bearer_token.data != dummy_bearer_token):
|
||||
service_api_client.update_service_inbound_api(
|
||||
service_id,
|
||||
url=form.url.data,
|
||||
bearer_token=check_token_against_dummy_bearer(form.bearer_token.data),
|
||||
user_id=current_user.id,
|
||||
inbound_api_id=received_text_messages_callback.get('id')
|
||||
)
|
||||
else:
|
||||
service_api_client.create_service_inbound_api(
|
||||
service_id,
|
||||
url=form.url.data,
|
||||
bearer_token=form.bearer_token.data,
|
||||
user_id=current_user.id
|
||||
)
|
||||
return redirect(url_for('.api_callbacks', service_id=service_id))
|
||||
return render_template(
|
||||
'views/api/callbacks/received-text-messages-callback.html',
|
||||
form=form,
|
||||
can_receive_inbound=can_receive_inbound,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user