Files
notifications-admin/app/main/views/api_keys.py
T

105 lines
3.8 KiB
Python
Raw Normal View History

2016-01-19 09:55:13 +00:00
from flask import request, render_template, redirect, url_for, flash
2016-01-16 10:59:16 +00:00
from flask_login import login_required
from app.main import main
from app.main.forms import CreateKeyForm, Whitelist
from app import api_key_api_client, service_api_client, notification_api_client, current_service
from app.utils import user_has_permissions
2016-08-10 16:49:25 +01:00
from app.notify_client.api_key_api_client import KEY_TYPE_NORMAL, KEY_TYPE_TEST, KEY_TYPE_TEAM
2016-01-19 09:55:13 +00:00
2016-09-20 11:34:37 +01:00
@main.route("/services/<service_id>/api")
@login_required
@user_has_permissions('manage_api_keys', admin_override=True)
2016-09-20 11:34:37 +01:00
def api_integration(service_id):
return render_template(
'views/api/index.html',
api_notifications=notification_api_client.get_notifications_for_service(
service_id=service_id,
include_jobs=False,
include_from_test_key=True
)
2016-09-20 11:34:37 +01:00
)
@main.route("/services/<service_id>/api/documentation")
@login_required
@user_has_permissions('manage_api_keys', admin_override=True)
def api_documentation(service_id):
return render_template(
'views/api/documentation.html'
)
@main.route("/services/<service_id>/api/whitelist", methods=['GET', 'POST'])
@login_required
@user_has_permissions('manage_api_keys', admin_override=True)
def whitelist(service_id):
form = Whitelist()
if form.validate_on_submit():
service_api_client.update_whitelist(service_id, {
'email_addresses': list(filter(None, form.email_addresses.data)),
'phone_numbers': list(filter(None, form.phone_numbers.data))
})
return redirect(url_for('.api_integration', service_id=service_id))
if not form.errors:
form.populate(**service_api_client.get_whitelist(service_id))
return render_template(
'views/api/whitelist.html',
form=form
)
2016-09-20 11:09:50 +01:00
@main.route("/services/<service_id>/api/keys")
2016-01-16 10:59:16 +00:00
@login_required
@user_has_permissions('manage_api_keys', admin_override=True)
2016-01-16 10:59:16 +00:00
def api_keys(service_id):
2016-01-19 09:55:13 +00:00
return render_template(
2016-09-20 11:23:59 +01:00
'views/api/keys.html',
2016-01-20 17:32:55 +00:00
keys=api_key_api_client.get_api_keys(service_id=service_id)['apiKeys']
2016-01-19 09:55:13 +00:00
)
2016-09-20 11:09:50 +01:00
@main.route("/services/<service_id>/api/keys/create", methods=['GET', 'POST'])
2016-01-19 09:55:13 +00:00
@login_required
@user_has_permissions('manage_api_keys')
2016-01-19 09:55:13 +00:00
def create_api_key(service_id):
key_names = [
key['name'] for key in api_key_api_client.get_api_keys(service_id=service_id)['apiKeys']
]
form = CreateKeyForm(key_names)
2016-08-10 16:49:25 +01:00
form.key_type.choices = [
(KEY_TYPE_NORMAL, 'Send messages to anyone{}'.format(
', once this service is not in trial mode' if current_service['restricted'] else ''
)),
(KEY_TYPE_TEST, 'Simulate sending messages to anyone'),
(KEY_TYPE_TEAM, 'Only send messages to members of your team')
]
2016-01-19 09:55:13 +00:00
if form.validate_on_submit():
2016-07-06 15:10:36 +01:00
secret = api_key_api_client.create_api_key(
service_id=service_id,
key_name=form.key_name.data,
key_type=form.key_type.data
)
2016-09-20 11:23:59 +01:00
return render_template('views/api/keys/show.html', secret=secret,
2016-01-20 17:32:55 +00:00
key_name=form.key_name.data)
2016-01-19 09:55:13 +00:00
return render_template(
2016-09-20 11:23:59 +01:00
'views/api/keys/create.html',
form=form
2016-01-19 09:55:13 +00:00
)
2016-09-20 11:09:50 +01:00
@main.route("/services/<service_id>/api/keys/revoke/<key_id>", methods=['GET', 'POST'])
2016-01-19 09:55:13 +00:00
@login_required
@user_has_permissions('manage_api_keys', admin_override=True)
2016-01-19 09:55:13 +00:00
def revoke_api_key(service_id, key_id):
2016-01-21 12:28:05 +00:00
key_name = api_key_api_client.get_api_keys(service_id=service_id, key_id=key_id)['apiKeys'][0]['name']
2016-01-19 09:55:13 +00:00
if request.method == 'GET':
2016-01-21 12:28:05 +00:00
return render_template(
2016-09-20 11:23:59 +01:00
'views/api/keys/revoke.html',
2016-01-21 12:28:05 +00:00
key_name=key_name
)
2016-01-19 09:55:13 +00:00
elif request.method == 'POST':
2016-01-20 17:32:55 +00:00
api_key_api_client.revoke_api_key(service_id=service_id, key_id=key_id)
2016-02-05 10:33:14 +00:00
flash('{} was revoked'.format(key_name), 'default_with_tick')
2016-01-19 09:55:13 +00:00
return redirect(url_for('.api_keys', service_id=service_id))