2020-08-19 14:20:57 +00:00
|
|
|
import wtforms
|
2020-11-26 14:29:14 +00:00
|
|
|
import wtforms.form
|
2020-12-31 18:55:30 +00:00
|
|
|
from flask import current_app
|
2020-10-28 14:49:14 +00:00
|
|
|
from flask_babel import lazy_gettext as _
|
2020-08-19 14:20:57 +00:00
|
|
|
from flask_wtf import FlaskForm
|
2020-12-31 17:16:35 +00:00
|
|
|
from flask_wtf.file import FileField, FileRequired
|
2021-04-08 19:08:49 +00:00
|
|
|
from .models import User, Group
|
2020-08-19 14:20:57 +00:00
|
|
|
|
|
|
|
|
|
|
|
class LoginForm(FlaskForm):
|
|
|
|
login = wtforms.StringField(
|
2020-10-20 09:44:45 +00:00
|
|
|
_("Login"),
|
2020-08-19 14:20:57 +00:00
|
|
|
validators=[wtforms.validators.DataRequired()],
|
2020-10-21 10:05:21 +00:00
|
|
|
render_kw={
|
2020-10-22 15:37:01 +00:00
|
|
|
"placeholder": _("jane@doe.com"),
|
2020-10-21 10:05:21 +00:00
|
|
|
"spellcheck": "false",
|
|
|
|
"autocorrect": "off",
|
|
|
|
"inputmode": "email",
|
|
|
|
},
|
2020-08-19 14:20:57 +00:00
|
|
|
)
|
2020-10-20 09:44:45 +00:00
|
|
|
|
2020-12-31 18:55:30 +00:00
|
|
|
def validate_login(self, field):
|
|
|
|
if current_app.config.get("HIDE_INVALID_LOGINS", False) and not User.get(
|
|
|
|
field.data
|
|
|
|
):
|
|
|
|
raise wtforms.ValidationError(
|
|
|
|
_("The login '{login}' does not exist").format(login=field.data)
|
|
|
|
)
|
|
|
|
|
2020-10-20 09:44:45 +00:00
|
|
|
|
2021-01-23 21:30:43 +00:00
|
|
|
class PasswordForm(FlaskForm):
|
|
|
|
password = wtforms.PasswordField(
|
2021-05-24 15:43:15 +00:00
|
|
|
_("Password"),
|
|
|
|
validators=[wtforms.validators.DataRequired()],
|
2021-01-23 21:30:43 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
class FullLoginForm(LoginForm, PasswordForm):
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
2020-10-22 15:37:01 +00:00
|
|
|
class ForgottenPasswordForm(FlaskForm):
|
|
|
|
login = wtforms.StringField(
|
|
|
|
_("Login"),
|
|
|
|
validators=[wtforms.validators.DataRequired()],
|
|
|
|
render_kw={
|
|
|
|
"placeholder": _("jane@doe.com"),
|
|
|
|
"spellcheck": "false",
|
|
|
|
"autocorrect": "off",
|
|
|
|
},
|
|
|
|
)
|
|
|
|
|
2021-01-01 12:55:20 +00:00
|
|
|
def validate_login(self, field):
|
|
|
|
if current_app.config.get("HIDE_INVALID_LOGINS", False) and not User.get(
|
|
|
|
field.data
|
|
|
|
):
|
|
|
|
raise wtforms.ValidationError(
|
|
|
|
_("The login '{login}' does not exist").format(login=field.data)
|
|
|
|
)
|
|
|
|
|
2020-10-22 15:37:01 +00:00
|
|
|
|
|
|
|
class PasswordResetForm(FlaskForm):
|
|
|
|
password = wtforms.PasswordField(
|
|
|
|
_("Password"), validators=[wtforms.validators.DataRequired()]
|
|
|
|
)
|
|
|
|
confirmation = wtforms.PasswordField(
|
|
|
|
_("Password confirmation"),
|
|
|
|
validators=[
|
|
|
|
wtforms.validators.EqualTo(
|
|
|
|
"password", _("Password and confirmation do not match.")
|
|
|
|
),
|
|
|
|
],
|
|
|
|
)
|
|
|
|
|
|
|
|
|
2020-11-26 14:29:14 +00:00
|
|
|
PROFILE_FORM_FIELDS = dict(
|
|
|
|
uid=wtforms.StringField(
|
2020-10-20 09:44:45 +00:00
|
|
|
_("Username"),
|
2020-10-30 19:22:31 +00:00
|
|
|
render_kw={"placeholder": _("jdoe")},
|
2020-11-01 10:33:56 +00:00
|
|
|
validators=[wtforms.validators.DataRequired()],
|
2020-11-26 14:29:14 +00:00
|
|
|
),
|
|
|
|
cn=wtforms.StringField(_("Name")),
|
|
|
|
givenName=wtforms.StringField(
|
2020-10-21 10:05:21 +00:00
|
|
|
_("Given name"),
|
|
|
|
render_kw={
|
|
|
|
"placeholder": _("John"),
|
|
|
|
"spellcheck": "false",
|
|
|
|
"autocorrect": "off",
|
|
|
|
},
|
2020-11-26 14:29:14 +00:00
|
|
|
),
|
|
|
|
sn=wtforms.StringField(
|
2020-10-21 10:05:21 +00:00
|
|
|
_("Family Name"),
|
|
|
|
render_kw={
|
|
|
|
"placeholder": _("Doe"),
|
|
|
|
"spellcheck": "false",
|
|
|
|
"autocorrect": "off",
|
|
|
|
},
|
2020-11-26 14:29:14 +00:00
|
|
|
),
|
|
|
|
mail=wtforms.EmailField(
|
2020-10-21 07:52:02 +00:00
|
|
|
_("Email address"),
|
|
|
|
validators=[wtforms.validators.DataRequired(), wtforms.validators.Email()],
|
2020-10-21 10:05:21 +00:00
|
|
|
render_kw={
|
|
|
|
"placeholder": _("jane@doe.com"),
|
|
|
|
"spellcheck": "false",
|
|
|
|
"autocorrect": "off",
|
|
|
|
},
|
2020-11-26 14:29:14 +00:00
|
|
|
),
|
|
|
|
telephoneNumber=wtforms.TelField(
|
2020-10-21 07:52:02 +00:00
|
|
|
_("Phone number"), render_kw={"placeholder": _("555-000-555")}
|
2020-11-26 14:29:14 +00:00
|
|
|
),
|
2020-12-31 17:16:35 +00:00
|
|
|
jpegPhoto=FileField(_("Photo"), validators=[FileRequired()]),
|
2020-11-26 14:29:14 +00:00
|
|
|
password1=wtforms.PasswordField(
|
2020-10-21 08:26:31 +00:00
|
|
|
_("Password"),
|
|
|
|
validators=[wtforms.validators.Optional(), wtforms.validators.Length(min=8)],
|
2020-11-26 14:29:14 +00:00
|
|
|
),
|
|
|
|
password2=wtforms.PasswordField(
|
2020-10-21 08:26:31 +00:00
|
|
|
_("Password confirmation"),
|
2020-11-25 19:21:18 +00:00
|
|
|
validators=[
|
|
|
|
wtforms.validators.EqualTo(
|
|
|
|
"password1", message=_("Password and confirmation do not match.")
|
|
|
|
)
|
|
|
|
],
|
2020-11-26 14:29:14 +00:00
|
|
|
),
|
|
|
|
employeeNumber=wtforms.StringField(
|
2021-05-24 15:43:15 +00:00
|
|
|
_("Number"),
|
|
|
|
render_kw={
|
|
|
|
"placeholder": _("1234"),
|
|
|
|
},
|
2020-11-26 14:29:14 +00:00
|
|
|
),
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
def profile_form(field_names):
|
|
|
|
if "userPassword" in field_names:
|
|
|
|
field_names += ["password1", "password2"]
|
|
|
|
fields = {
|
|
|
|
name: PROFILE_FORM_FIELDS.get(name)
|
|
|
|
for name in field_names
|
|
|
|
if PROFILE_FORM_FIELDS.get(name)
|
|
|
|
}
|
2021-04-08 19:08:49 +00:00
|
|
|
if "groups" in field_names:
|
2021-05-06 15:09:34 +00:00
|
|
|
fields["groups"] = wtforms.SelectMultipleField(_("Groups"), choices=[(group[1], group[0]) for group in Group.available_groups()])
|
2020-11-26 14:29:14 +00:00
|
|
|
return wtforms.form.BaseForm(fields)
|