Implementing django password validators for edX. This involves removing
the old validate password method and configuration values in favor of AUTH_PASSWORD_VALIDATORS, a list of validators to use to check a password. These include some that come straight from Django and some that were written according to Django's specifications. This work also included maintaining the current messaging as instruction text and passing along restrictions for the password field.
This commit is contained in:
@@ -27,7 +27,7 @@ from openedx.core.djangoapps.user_api import accounts as accounts_settings
|
||||
from openedx.core.djangoapps.user_api.preferences.api import get_user_preference
|
||||
from student.message_types import PasswordReset
|
||||
from student.models import CourseEnrollmentAllowed, email_exists_or_retired
|
||||
from util.password_policy_validators import password_max_length, password_min_length, validate_password
|
||||
from util.password_policy_validators import edX_validate_password
|
||||
|
||||
|
||||
def send_password_reset_email_for_user(user, request):
|
||||
@@ -193,7 +193,6 @@ class AccountCreationForm(forms.Form):
|
||||
"""
|
||||
|
||||
_EMAIL_INVALID_MSG = _("A properly formatted e-mail is required")
|
||||
_PASSWORD_INVALID_MSG = _("A valid password is required")
|
||||
_NAME_TOO_SHORT_MSG = _("Your legal name must be a minimum of two characters long")
|
||||
|
||||
# TODO: Resolve repetition
|
||||
@@ -209,15 +208,9 @@ class AccountCreationForm(forms.Form):
|
||||
"max_length": _("Email cannot be more than %(limit_value)s characters long"),
|
||||
}
|
||||
)
|
||||
password = forms.CharField(
|
||||
min_length=password_min_length(),
|
||||
max_length=password_max_length(),
|
||||
error_messages={
|
||||
"required": _PASSWORD_INVALID_MSG,
|
||||
"min_length": _PASSWORD_INVALID_MSG,
|
||||
"max_length": _PASSWORD_INVALID_MSG,
|
||||
}
|
||||
)
|
||||
|
||||
password = forms.CharField()
|
||||
|
||||
name = forms.CharField(
|
||||
min_length=accounts_settings.NAME_MIN_LENGTH,
|
||||
error_messages={
|
||||
@@ -288,7 +281,12 @@ class AccountCreationForm(forms.Form):
|
||||
"""Enforce password policies (if applicable)"""
|
||||
password = self.cleaned_data["password"]
|
||||
if self.enforce_password_policy:
|
||||
validate_password(password, username=self.cleaned_data.get('username'))
|
||||
# Creating a temporary user object to test password against username
|
||||
# This user should NOT be saved
|
||||
username = self.cleaned_data.get('username')
|
||||
email = self.cleaned_data.get('email')
|
||||
temp_user = User(username=username, email=email) if username else None
|
||||
edX_validate_password(password, temp_user)
|
||||
return password
|
||||
|
||||
def clean_email(self):
|
||||
|
||||
Reference in New Issue
Block a user