mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-09-02 17:48:50 -04:00
Added a validator so that the key name is unique per service.
This commit is contained in:
@@ -238,4 +238,14 @@ class ConfirmMobileNumberForm(Form):
|
|||||||
|
|
||||||
|
|
||||||
class CreateKeyForm(Form):
|
class CreateKeyForm(Form):
|
||||||
key_name = StringField(u'Description of key')
|
def __init__(self, existing_key_names=[], *args, **kwargs):
|
||||||
|
self.existing_key_names = existing_key_names
|
||||||
|
super(CreateKeyForm, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
key_name = StringField(u'Description of key', validators=[
|
||||||
|
DataRequired(message='You need to give the key a name')
|
||||||
|
])
|
||||||
|
|
||||||
|
def validate_key_name(self, key_name):
|
||||||
|
if key_name.data in self.existing_key_names:
|
||||||
|
raise ValidationError('A key with this name already exists')
|
||||||
|
|||||||
@@ -24,7 +24,10 @@ def api_keys(service_id):
|
|||||||
@main.route("/services/<int:service_id>/api-keys/create", methods=['GET', 'POST'])
|
@main.route("/services/<int:service_id>/api-keys/create", methods=['GET', 'POST'])
|
||||||
@login_required
|
@login_required
|
||||||
def create_api_key(service_id):
|
def create_api_key(service_id):
|
||||||
form = CreateKeyForm()
|
key_names = [
|
||||||
|
key['name'] for key in api_key_api_client.get_api_keys(service_id=service_id)['apiKeys']
|
||||||
|
]
|
||||||
|
form = CreateKeyForm(key_names)
|
||||||
if form.validate_on_submit():
|
if form.validate_on_submit():
|
||||||
secret = api_key_api_client.create_api_key(service_id=service_id, key_name=form.key_name.data)
|
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,
|
return render_template('views/api-keys/show.html', service_id=service_id, secret=secret,
|
||||||
|
|||||||
16
tests/app/main/test_create_api_key_form.py
Normal file
16
tests/app/main/test_create_api_key_form.py
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
from werkzeug.datastructures import MultiDict
|
||||||
|
|
||||||
|
from app.main.forms import CreateKeyForm
|
||||||
|
|
||||||
|
|
||||||
|
def test_return_validation_error_when_key_name_exists(app_,
|
||||||
|
db_,
|
||||||
|
db_session):
|
||||||
|
def _get_names():
|
||||||
|
return ['some key', 'another key']
|
||||||
|
|
||||||
|
with app_.test_request_context():
|
||||||
|
form = CreateKeyForm(_get_names(),
|
||||||
|
formdata=MultiDict([('key_name', 'some key')]))
|
||||||
|
form.validate()
|
||||||
|
assert {'key_name': ['A key with this name already exists']} == form.errors
|
||||||
@@ -62,7 +62,8 @@ def test_should_show_name_api_key_page(app_,
|
|||||||
active_user,
|
active_user,
|
||||||
mock_get_service,
|
mock_get_service,
|
||||||
mock_get_services,
|
mock_get_services,
|
||||||
mock_user_loader):
|
mock_user_loader,
|
||||||
|
mock_get_api_keys):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
client.login(active_user)
|
client.login(active_user)
|
||||||
@@ -78,7 +79,8 @@ def test_should_render_show_api_key(app_,
|
|||||||
mock_get_service,
|
mock_get_service,
|
||||||
mock_get_services,
|
mock_get_services,
|
||||||
mock_user_loader,
|
mock_user_loader,
|
||||||
mock_create_api_key):
|
mock_create_api_key,
|
||||||
|
mock_get_api_keys):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
client.login(active_user)
|
client.login(active_user)
|
||||||
|
|||||||
Reference in New Issue
Block a user