Merge lp:~maxiberta/canonical-identity-provider/improve-password-validation-ascii into lp:canonical-identity-provider/release

Proposed by Maximiliano Bertacchini
Status: Merged
Approved by: Maximiliano Bertacchini
Approved revision: no longer in the source branch.
Merge reported by: Otto Co-Pilot
Merged at revision: not available
Proposed branch: lp:~maxiberta/canonical-identity-provider/improve-password-validation-ascii
Merge into: lp:canonical-identity-provider/release
Diff against target: 82 lines (+10/-9)
3 files modified
src/api/v10/tests/test_forms.py (+2/-2)
src/identityprovider/tests/test_forms.py (+3/-5)
src/identityprovider/validators.py (+5/-2)
To merge this branch: bzr merge lp:~maxiberta/canonical-identity-provider/improve-password-validation-ascii
Reviewer Review Type Date Requested Status
Jonathan Hartley (community) Approve
Review via email: mp+374104@code.launchpad.net

Commit message

Improve password placeholder and validation message to include the requirement of ascii encoding.

To post a comment you must log in.
Revision history for this message
Jonathan Hartley (tartley) wrote :

Looks good to me. One suggestion about wording of the error message, but approved regardless.

review: Approve
Revision history for this message
Maximiliano Bertacchini (maxiberta) :

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/api/v10/tests/test_forms.py'
--- src/api/v10/tests/test_forms.py 2018-10-16 21:41:53 +0000
+++ src/api/v10/tests/test_forms.py 2019-10-16 14:01:58 +0000
@@ -7,6 +7,7 @@
77
8from api.v10.forms import WebserviceCreateAccountForm8from api.v10.forms import WebserviceCreateAccountForm
9from identityprovider.tests.utils import SSOBaseTestCase9from identityprovider.tests.utils import SSOBaseTestCase
10from identityprovider.validators import PASSWORD_ENCODING_ERROR
1011
1112
12class WebServiceCreateAccountFormTestCase(SSOBaseTestCase):13class WebServiceCreateAccountFormTestCase(SSOBaseTestCase):
@@ -16,8 +17,7 @@
16 'remote_ip': '127.0.0.1'}17 'remote_ip': '127.0.0.1'}
17 form = WebserviceCreateAccountForm(data=data)18 form = WebserviceCreateAccountForm(data=data)
18 self.assertFalse(form.is_valid())19 self.assertFalse(form.is_valid())
19 self.assertEqual(form.errors['password'][0],20 self.assertEqual(form.errors['password'], [PASSWORD_ENCODING_ERROR])
20 'Invalid characters in password')
2121
22 def test_default_platform(self):22 def test_default_platform(self):
23 form = WebserviceCreateAccountForm()23 form = WebserviceCreateAccountForm()
2424
=== modified file 'src/identityprovider/tests/test_forms.py'
--- src/identityprovider/tests/test_forms.py 2019-06-18 20:13:31 +0000
+++ src/identityprovider/tests/test_forms.py 2019-10-16 14:01:58 +0000
@@ -57,7 +57,7 @@
57from identityprovider.models.const import AccountStatus, EmailStatus57from identityprovider.models.const import AccountStatus, EmailStatus
58from identityprovider.tests import DEFAULT_USER_PASSWORD58from identityprovider.tests import DEFAULT_USER_PASSWORD
59from identityprovider.tests.utils import SSOBaseTestCase59from identityprovider.tests.utils import SSOBaseTestCase
60from identityprovider.validators import BasicValidator60from identityprovider.validators import PASSWORD_ENCODING_ERROR, BasicValidator
6161
6262
63class ValidNameTestCase(TestCase):63class ValidNameTestCase(TestCase):
@@ -261,8 +261,7 @@
261 data = {'password': u'Ñandú'}261 data = {'password': u'Ñandú'}
262 form = self.get_form(data=data)262 form = self.get_form(data=data)
263 self.assertFalse(form.is_valid())263 self.assertFalse(form.is_valid())
264 self.assertEqual(form.errors['password'][0],264 self.assertEqual(form.errors['password'], [PASSWORD_ENCODING_ERROR])
265 'Invalid characters in password')
266265
267 def test_short_password(self):266 def test_short_password(self):
268 data = {'password': u'abcdef'}267 data = {'password': u'abcdef'}
@@ -551,8 +550,7 @@
551 data = {'password': u'changüí'}550 data = {'password': u'changüí'}
552 form = self.get_form(data=data)551 form = self.get_form(data=data)
553 self.assertFalse(form.is_valid())552 self.assertFalse(form.is_valid())
554 self.assertEqual(form.errors['password'][0],553 self.assertEqual(form.errors['password'], [PASSWORD_ENCODING_ERROR])
555 'Invalid characters in password')
556554
557 def test_no_preferredemail(self):555 def test_no_preferredemail(self):
558 # replace preferredemail property556 # replace preferredemail property
559557
=== modified file 'src/identityprovider/validators.py'
--- src/identityprovider/validators.py 2018-02-09 20:56:16 +0000
+++ src/identityprovider/validators.py 2019-10-16 14:01:58 +0000
@@ -7,10 +7,13 @@
7from identityprovider.timeline_helpers import get_request_timing_function7from identityprovider.timeline_helpers import get_request_timing_function
8from identityprovider.utils import password_is_blacklisted8from identityprovider.utils import password_is_blacklisted
99
10PASSWORD_ENCODING_ERROR = _(
11 'Password must consist of lower or upper-case characters, digits, '
12 'spaces, or symbols in the ASCII encoding.')
10PASSWORD_POLICY_ERROR = _(13PASSWORD_POLICY_ERROR = _(
11 'Password must be at least {min_length} characters long')14 'Password must be at least {min_length} characters long')
12PASSWORD_POLICY_HELP_TEXT = _(15PASSWORD_POLICY_HELP_TEXT = _(
13 'Password with at least {min_length} characters')16 'Password with at least {min_length} characters (ASCII only)')
14CANONICAL_PASSWORD_POLICY_ERROR = _(17CANONICAL_PASSWORD_POLICY_ERROR = _(
15 "Password must consist of lower- and upper-case characters, and at "18 "Password must consist of lower- and upper-case characters, and at "
16 "least one digit."19 "least one digit."
@@ -62,7 +65,7 @@
62 # ascii only!65 # ascii only!
63 str(password)66 str(password)
64 except UnicodeEncodeError:67 except UnicodeEncodeError:
65 raise ValidationError(_("Invalid characters in password"))68 raise ValidationError(PASSWORD_ENCODING_ERROR)
66 if password is None or len(password) < self.MIN_LENGTH:69 if password is None or len(password) < self.MIN_LENGTH:
67 raise ValidationError(70 raise ValidationError(
68 PASSWORD_POLICY_ERROR.format(min_length=self.MIN_LENGTH))71 PASSWORD_POLICY_ERROR.format(min_length=self.MIN_LENGTH))