mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-07-13 09:50:08 -04:00
Merge pull request #1012 from alphagov/keys-and-trial-mode
Make relationship between keys, whitelist, trial mode and team clearer
This commit is contained in:
@@ -35,6 +35,10 @@
|
||||
margin-bottom: $gutter-half;
|
||||
}
|
||||
|
||||
.bottom-gutter-3-2 {
|
||||
margin-bottom: $gutter * 3/2;
|
||||
}
|
||||
|
||||
.bottom-gutter-2 {
|
||||
margin-bottom: $gutter * 2;
|
||||
}
|
||||
|
||||
@@ -214,3 +214,12 @@ summary::-webkit-details-marker {
|
||||
details .arrow {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.block-label-hint {
|
||||
@include core-16;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.block-label input[disabled] {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
@@ -391,8 +391,8 @@ class RequestToGoLiveForm(Form):
|
||||
),
|
||||
choices=[
|
||||
('yes', 'Yes'),
|
||||
('no', 'No – we’ll send you a copy'),
|
||||
('don’t know', 'I don’t know – we’ll check for you')
|
||||
('no', 'No'),
|
||||
('don’t know', 'I don’t know')
|
||||
],
|
||||
validators=[DataRequired()]
|
||||
)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from flask import request, render_template, redirect, url_for, flash
|
||||
from flask import request, render_template, redirect, url_for, flash, Markup, abort
|
||||
from flask_login import login_required
|
||||
from app.main import main
|
||||
from app.main.forms import CreateKeyForm, Whitelist
|
||||
@@ -68,13 +68,22 @@ def create_api_key(service_id):
|
||||
key['name'] for key in api_key_api_client.get_api_keys(service_id=service_id)['apiKeys']
|
||||
]
|
||||
form = CreateKeyForm(key_names)
|
||||
form.key_type.choices = filter(None, [
|
||||
(KEY_TYPE_NORMAL, 'Send messages to anyone')
|
||||
if not current_service['restricted'] else None,
|
||||
(KEY_TYPE_TEST, 'Simulate sending messages to anyone'),
|
||||
(KEY_TYPE_TEAM, 'Only send messages to your team or whitelist')
|
||||
])
|
||||
form.key_type.choices = [
|
||||
(KEY_TYPE_NORMAL, 'Send messages to anyone'),
|
||||
(KEY_TYPE_TEAM, 'Send messages to anyone on my whitelist'),
|
||||
(KEY_TYPE_TEST, 'Pretend to send messages to anyone'),
|
||||
]
|
||||
if current_service['restricted']:
|
||||
disabled_options = [KEY_TYPE_NORMAL]
|
||||
option_hints = {KEY_TYPE_NORMAL: Markup(
|
||||
'This option is not available because your service is in '
|
||||
'<a href="{}">trial mode</a>'.format(url_for(".trial_mode"))
|
||||
)}
|
||||
else:
|
||||
disabled_options, option_hints = [], {}
|
||||
if form.validate_on_submit():
|
||||
if form.key_type.data in disabled_options:
|
||||
abort(400)
|
||||
secret = api_key_api_client.create_api_key(
|
||||
service_id=service_id,
|
||||
key_name=form.key_name.data,
|
||||
@@ -88,7 +97,9 @@ def create_api_key(service_id):
|
||||
)
|
||||
return render_template(
|
||||
'views/api/keys/create.html',
|
||||
form=form
|
||||
form=form,
|
||||
disabled_options=disabled_options,
|
||||
option_hints=option_hints
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
{% macro radios(
|
||||
field,
|
||||
hint=None
|
||||
hint=None,
|
||||
disable=[],
|
||||
option_hints={}
|
||||
) %}
|
||||
<div class="form-group {% if field.errors %} error{% endif %}">
|
||||
<fieldset>
|
||||
@@ -14,8 +16,21 @@
|
||||
</legend>
|
||||
{% for option in field %}
|
||||
<label class="block-label" for="{{ option.id }}">
|
||||
{{ option }}
|
||||
<input
|
||||
id="{{ option.id }}" name="{{ option.name }}" type="radio" value="{{ option.data }}"
|
||||
{% if option.data in disable %}
|
||||
disabled
|
||||
{% endif %}
|
||||
{% if option.checked %}
|
||||
checked
|
||||
{% endif %}
|
||||
>
|
||||
{{ option.label.text }}
|
||||
{% if option_hints[option.data] %}
|
||||
<div class="block-label-hint">
|
||||
{{ option_hints[option.data] }}
|
||||
</div>
|
||||
{% endif %}
|
||||
</label>
|
||||
{% endfor %}
|
||||
</fieldset>
|
||||
|
||||
@@ -13,15 +13,6 @@
|
||||
API integration
|
||||
</h1>
|
||||
|
||||
{% if current_service.restricted %}
|
||||
{% call banner_wrapper(type='warning') %}
|
||||
<h2 class="heading-medium">Your service is in trial mode</h2>
|
||||
<p>
|
||||
You can only send messages to people in your team or whitelist.
|
||||
</p>
|
||||
{% endcall %}
|
||||
{% endif %}
|
||||
|
||||
<nav class="grid-row bottom-gutter-1-2">
|
||||
<div class="column-one-third">
|
||||
<a class="pill-separate-item" href="{{ url_for('.api_keys', service_id=current_service.id) }}">API keys</a>
|
||||
|
||||
@@ -37,9 +37,9 @@
|
||||
{% if item.key_type == 'normal' %}
|
||||
<span class="visually-hidden">Normal</span>
|
||||
{% elif item.key_type == 'team' %}
|
||||
Only sends to team members or whitelist
|
||||
Sends to anyone on your whitelist
|
||||
{% elif item.key_type == 'test' %}
|
||||
Simulates sending messages
|
||||
Pretends to send messages
|
||||
{% endif %}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
{% from "components/page-footer.html" import page_footer %}
|
||||
{% from "components/textbox.html" import textbox %}
|
||||
{% from "components/radios.html" import radios %}
|
||||
{% from "components/banner.html" import banner_wrapper %}
|
||||
|
||||
{% block page_title %}
|
||||
Add a new API key – GOV.UK Notify
|
||||
Create an API key – GOV.UK Notify
|
||||
{% endblock %}
|
||||
|
||||
{% block maincolumn_content %}
|
||||
@@ -14,8 +15,8 @@
|
||||
</h1>
|
||||
|
||||
<form method="post">
|
||||
{{ radios(form.key_type) }}
|
||||
{{ textbox(form.key_name, label='Name for this key') }}
|
||||
{{ radios(form.key_type, disable=disabled_options, option_hints=option_hints) }}
|
||||
{{ page_footer('Continue') }}
|
||||
</form>
|
||||
|
||||
|
||||
@@ -14,6 +14,12 @@
|
||||
Whitelist
|
||||
</h1>
|
||||
|
||||
<p>
|
||||
You and members of
|
||||
<a href="{{ url_for('main.manage_users', service_id=current_service.id) }}">your team</a>
|
||||
are included in the whitelist automatically.
|
||||
</p>
|
||||
|
||||
<form method="post">
|
||||
|
||||
<div class="grid-row">
|
||||
|
||||
@@ -11,24 +11,7 @@
|
||||
|
||||
<h1 class="heading-large">Settings</h1>
|
||||
|
||||
{% if current_service.restricted %}
|
||||
{% call banner_wrapper(type='warning') %}
|
||||
<h2 class="heading-medium">Your service is in trial mode</h2>
|
||||
|
||||
<ul class='list list-bullet'>
|
||||
<li>you can only send messages to yourself</li>
|
||||
<li>you can add people to your team, then you can send messages to them too</li>
|
||||
<li>you can only send 50 messages per day</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
To remove these restrictions
|
||||
<a href="{{ url_for('.service_request_to_go_live', service_id=current_service.id) }}">request to go live</a>.
|
||||
</p>
|
||||
{% endcall %}
|
||||
{% endif %}
|
||||
|
||||
<div class="bottom-gutter-2">
|
||||
<div class="bottom-gutter-3-2">
|
||||
|
||||
{% call mapping_table(
|
||||
caption='Settings',
|
||||
@@ -57,6 +40,34 @@
|
||||
{% endcall %}
|
||||
</div>
|
||||
|
||||
{% if current_service.restricted %}
|
||||
<h2 class="heading-medium">Your service is in trial mode</h2>
|
||||
|
||||
<ul class='list list-bullet'>
|
||||
<li>you can only send messages to yourself</li>
|
||||
<li>you can add people to your team, then you can send messages to them too</li>
|
||||
<li>you can only send 50 messages per day</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
To remove these restrictions
|
||||
<a href="{{ url_for('.service_request_to_go_live', service_id=current_service.id) }}">request to go live</a>.
|
||||
</p>
|
||||
{% else %}
|
||||
<h2 class="heading-medium">Your service is live</h2>
|
||||
|
||||
<p>
|
||||
You can send up to
|
||||
{{ "{:,}".format(current_service.message_limit) }} messages
|
||||
per day.
|
||||
</p>
|
||||
<p>
|
||||
Problems or comments?
|
||||
<a href="{{ url_for('main.feedback') }}">Give feedback</a>.
|
||||
</p>
|
||||
|
||||
{% endif %}
|
||||
|
||||
{% if current_user.has_permissions([], admin_override=True) %}
|
||||
|
||||
<h2 class="heading-medium">Platform admin settings</h2>
|
||||
|
||||
@@ -33,7 +33,10 @@
|
||||
<form method="post">
|
||||
<div class="form-group">
|
||||
<p>We need permission to process your data before we can make your service live.</p>
|
||||
{{ radios(form.mou) }}
|
||||
{{ radios(form.mou, option_hints={
|
||||
'no': 'We’ll send you a copy',
|
||||
'don’t know': 'We’ll check for you',
|
||||
}) }}
|
||||
</div>
|
||||
<div class="form-group">
|
||||
{{ radios(form.channel) }}
|
||||
|
||||
@@ -21,7 +21,6 @@ def test_should_show_api_page(
|
||||
assert response.status_code == 200
|
||||
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
|
||||
assert page.h1.string.strip() == 'API integration'
|
||||
assert 'Your service is in trial mode' in page.find('div', {'class': 'banner-warning'}).text
|
||||
rows = page.find_all('details')
|
||||
assert len(rows) == 5
|
||||
for index, row in enumerate(rows):
|
||||
@@ -201,10 +200,7 @@ def test_cant_create_normal_api_key_in_trial_mode(
|
||||
'key_type': 'normal'
|
||||
}
|
||||
)
|
||||
assert response.status_code == 200
|
||||
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
|
||||
assert page.find('span', {'class': 'error-message'}).text.strip() == 'Not a valid choice'
|
||||
|
||||
assert response.status_code == 400
|
||||
mock_post.assert_not_called()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user