From a8829cd15449634ea3790abf0e6c8d5f69b96d3a Mon Sep 17 00:00:00 2001 From: Chris Hill-Scott Date: Mon, 11 Dec 2017 16:22:37 +0000 Subject: [PATCH] Make whitespace stripping work for whitelists too MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It’s a bit hacky, but it fixes a potential issue for users. Code adapted from: https://github.com/alphagov/digitalmarketplace-utils/commit/2c34f678ab4a34eaa1c510c91dacfc210343f389 --- app/main/forms.py | 24 ++++++++++++++++++++++-- tests/app/main/views/test_api_keys.py | 4 ++-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/app/main/forms.py b/app/main/forms.py index 5555f8506..ea89af61d 100644 --- a/app/main/forms.py +++ b/app/main/forms.py @@ -4,6 +4,7 @@ import weakref from flask_wtf import FlaskForm as Form from datetime import datetime, timedelta +from itertools import chain from notifications_utils.recipients import ( validate_phone_number, @@ -174,6 +175,17 @@ class StripWhitespaceForm(Form): return bound +class StripWhitespaceStringField(StringField): + def __init__(self, label=None, **kwargs): + kwargs['filters'] = tuple(chain( + kwargs.get('filters', ()), + ( + strip_whitespace, + ), + )) + super(StringField, self).__init__(label, **kwargs) + + class LoginForm(StripWhitespaceForm): email_address = StringField('Email address', validators=[ Length(min=5, max=255), @@ -641,6 +653,14 @@ class LetterBranding(StripWhitespaceForm): ) +class EmailFieldInWhitelist(EmailField, StripWhitespaceStringField): + pass + + +class InternationalPhoneNumberInWhitelist(InternationalPhoneNumber, StripWhitespaceStringField): + pass + + class Whitelist(StripWhitespaceForm): def populate(self, email_addresses, phone_numbers): @@ -652,7 +672,7 @@ class Whitelist(StripWhitespaceForm): form_field[index].data = value email_addresses = FieldList( - EmailField( + EmailFieldInWhitelist( '', validators=[ Optional(), @@ -666,7 +686,7 @@ class Whitelist(StripWhitespaceForm): ) phone_numbers = FieldList( - InternationalPhoneNumber( + InternationalPhoneNumberInWhitelist( '', validators=[ Optional() diff --git a/tests/app/main/views/test_api_keys.py b/tests/app/main/views/test_api_keys.py index b5e11f251..a874eacad 100644 --- a/tests/app/main/views/test_api_keys.py +++ b/tests/app/main/views/test_api_keys.py @@ -351,8 +351,8 @@ def test_should_update_whitelist( service_id = str(uuid.uuid4()) data = OrderedDict([ ('email_addresses-1', 'test@example.com'), - ('email_addresses-3', 'test@example.com'), - ('phone_numbers-0', '07900900000'), + ('email_addresses-3', ' test@example.com '), + ('phone_numbers-0', '07900900000 '), ('phone_numbers-2', '+1800-555-555'), ])