Make whitespace stripping work for whitelists too

It’s a bit hacky, but it fixes a potential issue for users.

Code adapted from:
2c34f678ab
This commit is contained in:
Chris Hill-Scott
2017-12-11 16:22:37 +00:00
parent d0d230f119
commit a8829cd154
2 changed files with 24 additions and 4 deletions

View File

@@ -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()