mirror of
https://github.com/DarkflameUniverse/NexusDashboard.git
synced 2025-10-11 09:38:02 +00:00
fix: Add correct restrictions to password field (#112)
This commit is contained in:
38
app/forms.py
38
app/forms.py
@@ -4,7 +4,8 @@ from flask import current_app
|
|||||||
from flask_user.forms import (
|
from flask_user.forms import (
|
||||||
unique_email_validator,
|
unique_email_validator,
|
||||||
LoginForm,
|
LoginForm,
|
||||||
RegisterForm
|
RegisterForm,
|
||||||
|
ChangePasswordForm
|
||||||
)
|
)
|
||||||
from flask_user import UserManager
|
from flask_user import UserManager
|
||||||
from wtforms.widgets import TextArea, NumberInput
|
from wtforms.widgets import TextArea, NumberInput
|
||||||
@@ -14,12 +15,34 @@ from wtforms import (
|
|||||||
SubmitField,
|
SubmitField,
|
||||||
validators,
|
validators,
|
||||||
IntegerField,
|
IntegerField,
|
||||||
SelectField
|
SelectField,
|
||||||
|
PasswordField
|
||||||
)
|
)
|
||||||
|
|
||||||
from wtforms.validators import DataRequired, Optional
|
from wtforms.validators import DataRequired, Optional
|
||||||
from app.models import PlayKey
|
from app.models import PlayKey
|
||||||
|
|
||||||
|
def password_check(form, field):
|
||||||
|
"""
|
||||||
|
Validates that the password does not contain a colon, is between 6 and 40 characters long and has an uppercase letter, lowercase letter and a number
|
||||||
|
"""
|
||||||
|
error_msg = "Password must be between 6 and 40 characters long, contain a lowercase letter, an uppercase letter, a number, and cannot contain a colon"
|
||||||
|
password = field.data
|
||||||
|
pass_len = len(password)
|
||||||
|
if pass_len < 6:
|
||||||
|
raise validators.ValidationError(error_msg)
|
||||||
|
if ':' in password:
|
||||||
|
raise validators.ValidationError(error_msg)
|
||||||
|
if not any(c.islower() for c in password):
|
||||||
|
raise validators.ValidationError(error_msg)
|
||||||
|
if not any(c.isupper() for c in password):
|
||||||
|
raise validators.ValidationError(error_msg)
|
||||||
|
if not any(c.isdigit() for c in password):
|
||||||
|
raise validators.ValidationError(error_msg)
|
||||||
|
if pass_len > 40:
|
||||||
|
raise validators.ValidationError(error_msg)
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
def validate_play_key(form, field):
|
def validate_play_key(form, field):
|
||||||
"""Validates a field for a valid play kyey
|
"""Validates a field for a valid play kyey
|
||||||
@@ -45,6 +68,7 @@ class CustomUserManager(UserManager):
|
|||||||
def customize(self, app):
|
def customize(self, app):
|
||||||
self.RegisterFormClass = CustomRegisterForm
|
self.RegisterFormClass = CustomRegisterForm
|
||||||
self.LoginFormClass = CustomLoginForm
|
self.LoginFormClass = CustomLoginForm
|
||||||
|
self.ChangePasswordFormClass = ColonlessChangePasswordForm
|
||||||
|
|
||||||
class CustomRegisterForm(RegisterForm):
|
class CustomRegisterForm(RegisterForm):
|
||||||
play_key_id = StringField(
|
play_key_id = StringField(
|
||||||
@@ -54,6 +78,10 @@ class CustomRegisterForm(RegisterForm):
|
|||||||
recaptcha = RecaptchaField(
|
recaptcha = RecaptchaField(
|
||||||
validators=[CustomRecaptcha()]
|
validators=[CustomRecaptcha()]
|
||||||
)
|
)
|
||||||
|
password=PasswordField(
|
||||||
|
'Password',
|
||||||
|
validators=[DataRequired(), password_check]
|
||||||
|
)
|
||||||
|
|
||||||
class CustomLoginForm(LoginForm):
|
class CustomLoginForm(LoginForm):
|
||||||
recaptcha = RecaptchaField(
|
recaptcha = RecaptchaField(
|
||||||
@@ -193,3 +221,9 @@ class CharXMLUploadForm(FlaskForm):
|
|||||||
)
|
)
|
||||||
|
|
||||||
submit = SubmitField('Submit')
|
submit = SubmitField('Submit')
|
||||||
|
|
||||||
|
class ColonlessChangePasswordForm(ChangePasswordForm):
|
||||||
|
new_password = PasswordField(
|
||||||
|
'New Password',
|
||||||
|
validators=[validators.DataRequired(), password_check]
|
||||||
|
)
|
||||||
|
Reference in New Issue
Block a user