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:
Rebecca Law
2016-01-20 17:32:55 +00:00
parent 9784a9936c
commit 41c775cd68
6 changed files with 42 additions and 18 deletions

View File

@@ -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'

View File

@@ -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))

View 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)

View File

@@ -35,21 +35,18 @@
empty_message="You havent 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 %}

View File

@@ -20,7 +20,7 @@
once you leave this page.
</p>
{{ api_key('d30512af92e1386d63b90e5973b49a10', 'CRM application') }}
{{ api_key(secret, key_name) }}
</div>
</div>

View File

@@ -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')