Merge pull request #422 from alphagov/commas-in-placeholders

Don’t allow commas in placeholders
This commit is contained in:
Chris Hill-Scott
2016-04-12 10:06:08 +01:00
4 changed files with 30 additions and 6 deletions

View File

@@ -46,9 +46,10 @@
this.initialHeight = this.$textbox.height(); this.initialHeight = this.$textbox.height();
this.$backgroundMaskForeground.width( this.$backgroundMaskForeground.css({
this.$textbox.width() 'width': this.$textbox.width(),
); 'border-width': this.$textbox.css('border-width')
});
this.$textbox this.$textbox
.trigger("input"); .trigger("input");

View File

@@ -15,7 +15,7 @@ from wtforms import (
from wtforms.fields.html5 import EmailField, TelField from wtforms.fields.html5 import EmailField, TelField
from wtforms.validators import (DataRequired, Email, Length, Regexp) from wtforms.validators import (DataRequired, Email, Length, Regexp)
from app.main.validators import (Blacklist, CsvFileValidator, ValidEmailDomainRegex) from app.main.validators import (Blacklist, CsvFileValidator, ValidEmailDomainRegex, NoCommasInPlaceHolders)
def email_address(label='Email address'): def email_address(label='Email address'):
@@ -203,7 +203,11 @@ class SMSTemplateForm(Form):
template_content = TextAreaField( template_content = TextAreaField(
u'Message content', u'Message content',
validators=[DataRequired(message="Cant be empty")]) validators=[
DataRequired(message="Cant be empty"),
NoCommasInPlaceHolders()
]
)
class EmailTemplateForm(SMSTemplateForm): class EmailTemplateForm(SMSTemplateForm):

View File

@@ -2,6 +2,7 @@ import re
from wtforms import ValidationError from wtforms import ValidationError
from datetime import datetime from datetime import datetime
from app.main.encryption import check_hash from app.main.encryption import check_hash
from utils.template import Template
class Blacklist(object): class Blacklist(object):
@@ -38,3 +39,13 @@ class ValidEmailDomainRegex(object):
email_regex = "[^\@^\s]+@([^@^\\.^\\s]+\.)*({})$".format("|".join(valid_domains)) email_regex = "[^\@^\s]+@([^@^\\.^\\s]+\.)*({})$".format("|".join(valid_domains))
if not re.match(email_regex, field.data.lower()): if not re.match(email_regex, field.data.lower()):
raise ValidationError(message) raise ValidationError(message)
class NoCommasInPlaceHolders():
def __init__(self, message='You cant have commas in your fields'):
self.message = message
def __call__(self, form, field):
if ',' in ''.join(Template({'content': field.data}).placeholders):
raise ValidationError(self.message)

View File

@@ -1,6 +1,6 @@
import pytest import pytest
from app.main.forms import RegisterUserForm from app.main.forms import RegisterUserForm
from app.main.validators import ValidEmailDomainRegex from app.main.validators import ValidEmailDomainRegex, NoCommasInPlaceHolders
from wtforms import ValidationError from wtforms import ValidationError
from unittest.mock import Mock from unittest.mock import Mock
@@ -112,3 +112,11 @@ def test_invalid_list_of_white_list_email_domains(app_, email):
email_domain_validators = ValidEmailDomainRegex() email_domain_validators = ValidEmailDomainRegex()
with pytest.raises(ValidationError): with pytest.raises(ValidationError):
email_domain_validators(None, _gen_mock_field(email)) email_domain_validators(None, _gen_mock_field(email))
def test_for_commas_in_placeholders(app_):
with app_.test_request_context():
with pytest.raises(ValidationError) as error:
NoCommasInPlaceHolders()(None, _gen_mock_field('Hello ((name,date))'))
assert str(error.value) == 'You cant have commas in your fields'
NoCommasInPlaceHolders()(None, _gen_mock_field('Hello ((name))'))