diff --git a/app/main/views/api_keys.py b/app/main/views/api_keys.py index ace3da731..de7c65181 100644 --- a/app/main/views/api_keys.py +++ b/app/main/views/api_keys.py @@ -3,7 +3,7 @@ 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 +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 @@ -80,8 +80,12 @@ def create_api_key(service_id): key_name=form.key_name.data, key_type=form.key_type.data ) - return render_template('views/api/keys/show.html', secret=secret, - key_name=form.key_name.data) + return render_template( + 'views/api/keys/show.html', + secret=secret, + service_id=service_id, + key_name=email_safe(form.key_name.data, whitespace='_') + ) return render_template( 'views/api/keys/create.html', form=form diff --git a/app/templates/views/api/keys.html b/app/templates/views/api/keys.html index a512dd572..5c67da32f 100644 --- a/app/templates/views/api/keys.html +++ b/app/templates/views/api/keys.html @@ -55,10 +55,6 @@ {% endif %} {% endcall %} -
- {{ api_key(current_service.id, "Service ID", thing="service ID") }} -
- {{ page_footer( secondary_link=url_for('.api_integration', service_id=current_service.id), secondary_link_text='Back to API integration' diff --git a/app/templates/views/api/keys/show.html b/app/templates/views/api/keys/show.html index 3191f8b31..645b0e07c 100644 --- a/app/templates/views/api/keys/show.html +++ b/app/templates/views/api/keys/show.html @@ -18,11 +18,31 @@ once you leave this page.

- {{ api_key(secret, key_name) }} +
- {{ page_footer( - secondary_link=url_for('.api_keys', service_id=current_service.id), - secondary_link_text='Back to API keys' - ) }} + {{ api_key( + '{}-{}-{}'.format(key_name, service_id, secret), + 'API key' + ) }} + + {{ page_footer( + secondary_link=url_for('.api_keys', service_id=current_service.id), + secondary_link_text='Back to API keys' + ) }} + +
+ +

For older API clients

+ +

+ If the client you’re using needs a service ID and an API key, + use these values: +

+ +
+ {{ api_key(service_id, 'Service ID', thing='service ID') }} +
+ + {{ api_key(secret, 'API key') }} {% endblock %} diff --git a/app/utils.py b/app/utils.py index 4c8750f39..66d787ce0 100644 --- a/app/utils.py +++ b/app/utils.py @@ -134,10 +134,10 @@ def generate_previous_next_dict(view, service_id, page, title, url_args): } -def email_safe(string): +def email_safe(string, whitespace='.'): return "".join([ - character.lower() if character.isalnum() or character == "." else "" - for character in re.sub(r"\s+", ".", string.strip()) + character.lower() if character.isalnum() or character == whitespace else "" + for character in re.sub(r"\s+", whitespace, string.strip()) ]) diff --git a/tests/app/main/views/test_api_keys.py b/tests/app/main/views/test_api_keys.py index 84789ac61..0de62599f 100644 --- a/tests/app/main/views/test_api_keys.py +++ b/tests/app/main/views/test_api_keys.py @@ -159,15 +159,23 @@ def test_should_create_api_key_with_type_normal(app_, response = client.post( url_for('main.create_api_key', service_id=service_id), data={ - 'key_name': 'some default key name', + 'key_name': 'Some default key name 1/2', 'key_type': 'normal' } ) assert response.status_code == 200 - assert 'some default key name' in response.get_data(as_text=True) + page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser') + keys = page.find_all('span', {'class': 'api-key-key'}) + for index, key in enumerate([ + 'some_default_key_name_12-{}-{}'.format(service_id, fake_uuid), + service_id, + fake_uuid + ]): + assert keys[index].text.strip() == key + post.assert_called_once_with(url='/service/{}/api-key'.format(service_id), data={ - 'name': 'some default key name', + 'name': 'Some default key name 1/2', 'key_type': 'normal', 'created_by': api_user_active.id })