Added a validator so that the key name is unique per service.

This commit is contained in:
Rebecca Law
2016-01-21 14:15:36 +00:00
parent 2b24909ca6
commit e7713a8b7f
4 changed files with 35 additions and 4 deletions

View File

@@ -238,4 +238,14 @@ class ConfirmMobileNumberForm(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')

View File

@@ -24,7 +24,10 @@ def api_keys(service_id):
@main.route("/services/<int:service_id>/api-keys/create", methods=['GET', 'POST'])
@login_required
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():
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,

View 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

View File

@@ -62,7 +62,8 @@ def test_should_show_name_api_key_page(app_,
active_user,
mock_get_service,
mock_get_services,
mock_user_loader):
mock_user_loader,
mock_get_api_keys):
with app_.test_request_context():
with app_.test_client() as client:
client.login(active_user)
@@ -78,7 +79,8 @@ def test_should_render_show_api_key(app_,
mock_get_service,
mock_get_services,
mock_user_loader,
mock_create_api_key):
mock_create_api_key,
mock_get_api_keys):
with app_.test_request_context():
with app_.test_client() as client:
client.login(active_user)