mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-02-28 14:20:59 -05:00
Created api_key_api_client.
Implementation of create, revoke and show api keys for service. These calls work, however we still need to fix the tests.
This commit is contained in:
@@ -8,6 +8,7 @@ from flask_login import LoginManager
|
||||
from flask_wtf import CsrfProtect
|
||||
from werkzeug.exceptions import abort
|
||||
from app.notify_client.api_client import NotificationsAdminAPIClient
|
||||
from app.notify_client.api_key_api_client import ApiKeyApiClient
|
||||
from app.notify_client.user_api_client import UserApiClient
|
||||
from app.its_dangerous_session import ItsdangerousSessionInterface
|
||||
import app.proxy_fix
|
||||
@@ -20,6 +21,7 @@ csrf = CsrfProtect()
|
||||
|
||||
notifications_api_client = NotificationsAdminAPIClient()
|
||||
user_api_client = UserApiClient()
|
||||
api_key_api_client = ApiKeyApiClient()
|
||||
|
||||
|
||||
def create_app(config_name, config_overrides=None):
|
||||
@@ -34,6 +36,7 @@ def create_app(config_name, config_overrides=None):
|
||||
|
||||
notifications_api_client.init_app(application)
|
||||
user_api_client.init_app(application)
|
||||
api_key_api_client.init_app(application)
|
||||
|
||||
login_manager.init_app(application)
|
||||
login_manager.login_view = 'main.sign_in'
|
||||
|
||||
@@ -2,6 +2,7 @@ from flask import request, render_template, redirect, url_for, flash
|
||||
from flask_login import login_required
|
||||
from app.main import main
|
||||
from app.main.forms import CreateKeyForm
|
||||
from app import api_key_api_client
|
||||
|
||||
|
||||
@main.route("/services/<int:service_id>/documentation")
|
||||
@@ -16,15 +17,7 @@ def api_keys(service_id):
|
||||
return render_template(
|
||||
'views/api-keys.html',
|
||||
service_id=service_id,
|
||||
keys=[
|
||||
{'name': 'Test key 1', 'last_used': '12 January 2016, 10:01AM', 'id': 1},
|
||||
{'name': 'Test key 2', 'last_used': '12 January 2016, 9:50AM', 'id': 1},
|
||||
{'name': 'Test key 3', 'last_used': '12 January 2016, 9:49AM', 'id': 1},
|
||||
{
|
||||
'name': 'My first key', 'last_used': '25 December 2015, 09:49AM', 'id': 1,
|
||||
'revoked': '4 January 2016, 6:00PM'
|
||||
}
|
||||
]
|
||||
keys=api_key_api_client.get_api_keys(service_id=service_id)['apiKeys']
|
||||
)
|
||||
|
||||
|
||||
@@ -33,7 +26,9 @@ def api_keys(service_id):
|
||||
def create_api_key(service_id):
|
||||
form = CreateKeyForm()
|
||||
if form.validate_on_submit():
|
||||
return redirect(url_for('.show_api_key', service_id=service_id))
|
||||
secret = api_key_api_client.create_api_key(service_id=service_id, key_name=form.key_name.data)
|
||||
return render_template('views/api-keys/show.html', service_id=service_id, secret=secret,
|
||||
key_name=form.key_name.data)
|
||||
return render_template(
|
||||
'views/api-keys/create.html',
|
||||
service_id=service_id,
|
||||
@@ -53,5 +48,6 @@ def revoke_api_key(service_id, key_id):
|
||||
if request.method == 'GET':
|
||||
return render_template('views/api-keys/revoke.html', service_id=service_id)
|
||||
elif request.method == 'POST':
|
||||
api_key_api_client.revoke_api_key(service_id=service_id, key_id=key_id)
|
||||
flash('‘Test key 1’ was revoked')
|
||||
return redirect(url_for('.api_keys', service_id=service_id))
|
||||
|
||||
24
app/notify_client/api_key_api_client.py
Normal file
24
app/notify_client/api_key_api_client.py
Normal file
@@ -0,0 +1,24 @@
|
||||
from client.base import BaseAPIClient
|
||||
|
||||
|
||||
class ApiKeyApiClient(BaseAPIClient):
|
||||
def __init__(self, base_url=None, client_id=None, secret=None):
|
||||
super(self.__class__, self).__init__(base_url=base_url or 'base_url',
|
||||
client_id=client_id or 'client_id',
|
||||
secret=secret or 'secret')
|
||||
|
||||
def init_app(self, app):
|
||||
self.base_url = app.config['API_HOST_NAME']
|
||||
self.client_id = app.config['ADMIN_CLIENT_USER_NAME']
|
||||
self.secret = app.config['ADMIN_CLIENT_SECRET']
|
||||
|
||||
def get_api_keys(self, service_id, *params):
|
||||
return self.get(url='/service/{}/api-keys'.format(service_id))
|
||||
|
||||
def create_api_key(self, service_id, key_name, *params):
|
||||
data = {"name": key_name}
|
||||
key = self.post(url='/service/{}/api-key'.format(service_id), data=data)
|
||||
return key['data']
|
||||
|
||||
def revoke_api_key(self, service_id, key_id, *params):
|
||||
return self.post(url='/service/{0}/api-key/revoke/{1}'.format(service_id, key_id), data=None)
|
||||
@@ -35,21 +35,18 @@
|
||||
empty_message="You haven’t created any API keys yet",
|
||||
caption="API keys",
|
||||
caption_visible=False,
|
||||
field_headings=['Key name', 'Created at', hidden_field_heading('Action')]
|
||||
field_headings=['Key name', hidden_field_heading('Action')]
|
||||
) %}
|
||||
{% call field() %}
|
||||
{{ item.name }}
|
||||
{% endcall %}
|
||||
{% call field() %}
|
||||
{{ item.last_used }}
|
||||
{% endcall %}
|
||||
{% if item.revoked %}
|
||||
{% if item.expiry_date %}
|
||||
{% call field(align='right', status='default') %}
|
||||
Revoked {{ item.revoked }}
|
||||
Revoked {{ item.expiry_date }}
|
||||
{% endcall %}
|
||||
{% else %}
|
||||
{% call field(align='right', status='error') %}
|
||||
<a href='{{ url_for('.revoke_api_key', service_id=123, key_id=item.id) }}'>Revoke</a>
|
||||
<a href='{{ url_for('.revoke_api_key', service_id=service_id, key_id=item.id) }}'>Revoke</a>
|
||||
{% endcall %}
|
||||
{% endif %}
|
||||
{% endcall %}
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
once you leave this page.
|
||||
</p>
|
||||
|
||||
{{ api_key('d30512af92e1386d63b90e5973b49a10', 'CRM application') }}
|
||||
{{ api_key(secret, key_name) }}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -210,3 +210,7 @@ def mock_register_user(mocker, user_data):
|
||||
mock_class = mocker.patch('app.user_api_client.register_user')
|
||||
mock_class.return_value = user
|
||||
return mock_class
|
||||
|
||||
|
||||
def mock_create_api_key(mocker, key_name):
|
||||
mock_class = mocker.patch('app.api')
|
||||
|
||||
Reference in New Issue
Block a user