Skip to content

Commit cb674ac

Browse files
committed
Updated username validation rules
1 parent 59d5528 commit cb674ac

File tree

4 files changed

+16
-21
lines changed

4 files changed

+16
-21
lines changed

spongeauth/accounts/models.py

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,28 +23,22 @@ def validate_username(username):
2323
errs.append(ValidationError(
2424
_('Username must be at least 3 characters long.'),
2525
code='username_min_length'))
26-
if re.search(r'[^\w.-]', username):
26+
if re.search(r'[^\w-]', username):
2727
errs.append(ValidationError(
28-
_('Username must only include numbers, letters, and underscores.'),
28+
_('Username must only include numbers, letters, underscores and dashes.'),
2929
code='username_charset'))
3030
if re.search(r'\W', username[0]):
3131
errs.append(ValidationError(
32-
_('Username must begin with a number, letter or underscore.'),
32+
_('Username must begin with a letter, number or underscore.'),
3333
code='username_initial_charset'))
34-
if re.search(r'[^A-Za-z0-9]', username[-1]):
34+
if re.search(r'\W', username[-1]):
3535
errs.append(ValidationError(
36-
_('Username must end with a letter or number.'),
36+
_('Username must end with a letter, number or underscore.'),
3737
code='username_ending_charset'))
38-
if re.search(r'[-_.]{2,}', username):
38+
if re.search(r'[^A-Za-z0-9]{2,}', username):
3939
errs.append(ValidationError(
4040
_('Username must not contain two special characters in a row.'),
4141
code='username_double_special'))
42-
if re.search(
43-
r'\.(js|json|css|htm|html|xml|jpg|jpeg|png|gif|bmp|ico|tif|tiff|woff)$',
44-
username):
45-
errs.append(ValidationError(
46-
_('Username must not end with a confusing file suffix.'),
47-
code='username_file_suffix'))
4842
if errs:
4943
raise ValidationError(errs)
5044

spongeauth/accounts/tests/test_admin.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def make_post_data(self, user, **kwargs):
2828
return post_data
2929

3030
def test_does_not_validate_username_if_it_is_unchanged(self):
31-
user = factories.UserFactory.create(username='ewoutvs_')
31+
user = factories.UserFactory.create(username='ewoutvs__')
3232
post_data = self.make_post_data(user)
3333
form = admin.AdminUserChangeForm(post_data, instance=user)
3434
form.save()
@@ -42,7 +42,7 @@ def test_does_validate_username_if_it_changes(self):
4242

4343
def test_validates_username(self):
4444
user = factories.UserFactory.create()
45-
post_data = self.make_post_data(user, username='ewoutvs_')
45+
post_data = self.make_post_data(user, username='ewoutvs__')
4646
form = admin.AdminUserChangeForm(post_data, instance=user)
4747
with pytest.raises(ValueError):
4848
form.save()

spongeauth/accounts/tests/test_username_validation.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,16 @@
99
BAD_EXAMPLES = [
1010
("lukegb", []),
1111
("_lukegb", []),
12+
("_lukegb_", []),
1213
("a", ['username_min_length']),
13-
("__", ['username_double_special', 'username_min_length', 'username_ending_charset']),
14-
("._", ['username_double_special', 'username_min_length', 'username_ending_charset', 'username_initial_charset']),
14+
("__", ['username_double_special', 'username_min_length']),
15+
("._", ['username_double_special', 'username_min_length', 'username_charset', 'username_initial_charset']),
1516
("\N{SNOWMAN}", ['username_charset', 'username_min_length', 'username_ending_charset', 'username_initial_charset']),
16-
(".png", ['username_file_suffix', 'username_initial_charset']),
17-
("lukegb.png", ['username_file_suffix']),
17+
(".png", ['username_charset', 'username_initial_charset']),
18+
("lukegb.png", ['username_charset']),
1819
("luke__gb", ['username_double_special']),
19-
("luke_.gb", ['username_double_special']),
20-
("lukegb_", ['username_ending_charset']),
20+
("luke_.gb", ['username_charset', 'username_double_special']),
21+
("lukegb-", ['username_ending_charset']),
2122
("-lukegb", ['username_initial_charset']),
2223
]
2324

spongeauth/spongeauth/urls.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
url(r'^admin/', admin.site.urls),
3535
url(r'^accounts/', include(accounts.urls, 'accounts')),
3636
url(r'^2fa/', include(twofa.urls, 'twofa')),
37-
url(r'^avatar/(?P<username>[A-Za-z_0-9]+)/?$', avatar_for_user, name='avatar-for-user'),
37+
url(r'^avatar/(?P<username>[^/]+)/?$', avatar_for_user, name='avatar-for-user'),
3838
url(r'^sso/', include(sso.urls, 'sso')),
3939
url(r'^$', index, name='index'),
4040
url(r'^api/', include(api.urls, 'api')),

0 commit comments

Comments
 (0)