[MediaWiki-commits] [Gerrit] labs/striker[master]: Update client side validation for username and shellname

2016-11-30 Thread jenkins-bot (Code Review)
jenkins-bot has submitted this change and it was merged.

Change subject: Update client side validation for username and shellname
..


Update client side validation for username and shellname

* Add client side regex validation for shellname
* Check username for invalid characters in ajax callback. This makes the
  error message a little more vague, but it improves feedback generally
  so I think it's ok.

Change-Id: I312ae6ba3e33806778e1a95f0b7116262f274d22
---
M striker/register/forms.py
M striker/register/utils.py
M striker/register/views.py
3 files changed, 61 insertions(+), 27 deletions(-)

Approvals:
  Andrew Bogott: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/striker/register/forms.py b/striker/register/forms.py
index 8f62a9b..8781da9 100644
--- a/striker/register/forms.py
+++ b/striker/register/forms.py
@@ -35,7 +35,6 @@
 
 @parsleyfy
 class LDAPUsername(forms.Form):
-IN_USE = _('Username is already in use.')
 username = forms.CharField(
 label=_('Username'),
 widget=forms.TextInput(
@@ -51,7 +50,8 @@
 'data-parsley-remote': mark_safe(
 '/register/api/username/{value}'),
 'data-parsley-trigger': 'focusin focusout input',
-'data-parsley-remote-message': IN_USE,
+'data-parsley-remote-message':  _(
+'Username is already in use or invalid.'),
 }
 ),
 max_length=255,
@@ -68,19 +68,8 @@
 regex='\S$',
 message=_('Must not end with whitespace')
 ),
-# See MediaWikiTitleCodec::getTitleInvalidRegex()
 validators.RegexValidator(
-regex=(
-# Any char that is not in $wgLegalTitleChars
-r'[^'
-r''' %!"$&'()*,\-./0-9:;=?@A-Z\^_`a-z~'''
-'\x80-\xFF'
-r'+]'
-# URL percent encoding sequences
-r'|%[0-9A-Fa-f]{2}'
-# XML/HTML entities
-'|&([A-Za-z0-9\x80-\xff]+|#([0-9]+|x[0-9A-Fa-f]+));'
-),
+regex=utils.get_username_invalid_regex(),
 inverse_match=True,
 message=_(
 'Value contains illegal characters or character sequences.'
@@ -97,7 +86,7 @@
 username = self.cleaned_data['username'].strip()
 username = username[0].upper() + username[1:]
 if not utils.username_available(username):
-raise forms.ValidationError(self.IN_USE)
+raise forms.ValidationError(_('Username is already in use.'))
 
 # Check that it isn't banned by some abusefilter type rule
 user = utils.check_username_create(username)
@@ -110,7 +99,14 @@
 
 @parsleyfy
 class ShellUsername(forms.Form):
-IN_USE = _('Shell username is already in use.')
+# Unix username regex suggested by useradd(8).
+# We don't allow a leading '_' or trailing '$' however.
+RE_NAME = r'^[a-z][a-z0-9_-]{0,31}$'
+NAME_ERR_MSG = _(
+'Must start with a-z, and can only contain '
+'lowercase a-z, 0-9, _, and - characters.'
+)
+
 shellname = forms.CharField(
 label=_('Shell username'),
 widget=forms.TextInput(
@@ -126,19 +122,15 @@
 'data-parsley-remote': mark_safe(
 '/register/api/shellname/{value}'),
 'data-parsley-trigger': 'focusin focusout input',
-'data-parsley-remote-message': IN_USE,
+'data-parsley-remote-message': _(
+'Shell username is already in use or invalid.'),
+'data-parsley-pattern': RE_NAME,
+'data-parsley-pattern-message': NAME_ERR_MSG,
 }
 ),
 max_length=32,
 validators=[
-validators.RegexValidator(
-# Unix username regex suggested by useradd(8).
-# We don't allow a leading '_' or trailing '$' however.
-regex=r'^[a-z][a-z0-9_-]{0,31}$',
-message=_(
-'Must start with a-z, and can only contain '
-'lowercase a-z, 0-9, _, and - characters.')
-)
+validators.RegexValidator(regex=RE_NAME, message=NAME_ERR_MSG),
 ]
 )
 
@@ -146,7 +138,7 @@
 """Validate that shellname is available."""
 shellname = self.cleaned_data['shellname']
 if not utils.shellname_available(shellname):
-raise forms.ValidationError(self.IN_USE)
+raise forms.ValidationError(_('Shell username is already in use.'))
 
 # Check that it isn't banned by some abusefilter type rule
 user = utils.check_username_create(shellname)
diff --git a/striker/register/utils.py b/striker/register/utils.py
index 4c3aa27..cd411e2 100644
--- 

[MediaWiki-commits] [Gerrit] labs/striker[master]: Update client side validation for username and shellname

2016-10-15 Thread BryanDavis (Code Review)
BryanDavis has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/316205

Change subject: Update client side validation for username and shellname
..

Update client side validation for username and shellname

* Add client side regex validation for shellname
* Check username for invalid characters in ajax callback. This makes the
  error message a little more vague, but it improves feedback generally
  so I think it's ok.

Change-Id: I312ae6ba3e33806778e1a95f0b7116262f274d22
---
M striker/register/forms.py
M striker/register/utils.py
M striker/register/views.py
3 files changed, 61 insertions(+), 27 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/labs/striker 
refs/changes/05/316205/1

diff --git a/striker/register/forms.py b/striker/register/forms.py
index 8f62a9b..8781da9 100644
--- a/striker/register/forms.py
+++ b/striker/register/forms.py
@@ -35,7 +35,6 @@
 
 @parsleyfy
 class LDAPUsername(forms.Form):
-IN_USE = _('Username is already in use.')
 username = forms.CharField(
 label=_('Username'),
 widget=forms.TextInput(
@@ -51,7 +50,8 @@
 'data-parsley-remote': mark_safe(
 '/register/api/username/{value}'),
 'data-parsley-trigger': 'focusin focusout input',
-'data-parsley-remote-message': IN_USE,
+'data-parsley-remote-message':  _(
+'Username is already in use or invalid.'),
 }
 ),
 max_length=255,
@@ -68,19 +68,8 @@
 regex='\S$',
 message=_('Must not end with whitespace')
 ),
-# See MediaWikiTitleCodec::getTitleInvalidRegex()
 validators.RegexValidator(
-regex=(
-# Any char that is not in $wgLegalTitleChars
-r'[^'
-r''' %!"$&'()*,\-./0-9:;=?@A-Z\^_`a-z~'''
-'\x80-\xFF'
-r'+]'
-# URL percent encoding sequences
-r'|%[0-9A-Fa-f]{2}'
-# XML/HTML entities
-'|&([A-Za-z0-9\x80-\xff]+|#([0-9]+|x[0-9A-Fa-f]+));'
-),
+regex=utils.get_username_invalid_regex(),
 inverse_match=True,
 message=_(
 'Value contains illegal characters or character sequences.'
@@ -97,7 +86,7 @@
 username = self.cleaned_data['username'].strip()
 username = username[0].upper() + username[1:]
 if not utils.username_available(username):
-raise forms.ValidationError(self.IN_USE)
+raise forms.ValidationError(_('Username is already in use.'))
 
 # Check that it isn't banned by some abusefilter type rule
 user = utils.check_username_create(username)
@@ -110,7 +99,14 @@
 
 @parsleyfy
 class ShellUsername(forms.Form):
-IN_USE = _('Shell username is already in use.')
+# Unix username regex suggested by useradd(8).
+# We don't allow a leading '_' or trailing '$' however.
+RE_NAME = r'^[a-z][a-z0-9_-]{0,31}$'
+NAME_ERR_MSG = _(
+'Must start with a-z, and can only contain '
+'lowercase a-z, 0-9, _, and - characters.'
+)
+
 shellname = forms.CharField(
 label=_('Shell username'),
 widget=forms.TextInput(
@@ -126,19 +122,15 @@
 'data-parsley-remote': mark_safe(
 '/register/api/shellname/{value}'),
 'data-parsley-trigger': 'focusin focusout input',
-'data-parsley-remote-message': IN_USE,
+'data-parsley-remote-message': _(
+'Shell username is already in use or invalid.'),
+'data-parsley-pattern': RE_NAME,
+'data-parsley-pattern-message': NAME_ERR_MSG,
 }
 ),
 max_length=32,
 validators=[
-validators.RegexValidator(
-# Unix username regex suggested by useradd(8).
-# We don't allow a leading '_' or trailing '$' however.
-regex=r'^[a-z][a-z0-9_-]{0,31}$',
-message=_(
-'Must start with a-z, and can only contain '
-'lowercase a-z, 0-9, _, and - characters.')
-)
+validators.RegexValidator(regex=RE_NAME, message=NAME_ERR_MSG),
 ]
 )
 
@@ -146,7 +138,7 @@
 """Validate that shellname is available."""
 shellname = self.cleaned_data['shellname']
 if not utils.shellname_available(shellname):
-raise forms.ValidationError(self.IN_USE)
+raise forms.ValidationError(_('Shell username is already in use.'))
 
 # Check that it isn't banned by some abusefilter type rule
 user = utils.check_username_create(shellname)
diff --git a/striker/register/utils.py b/striker/register/utils.py