forked from Github-Mirrors/canaille
74 lines
2.4 KiB
Python
74 lines
2.4 KiB
Python
import wtforms.form
|
|
import wtforms.validators
|
|
from flask import current_app
|
|
|
|
from canaille.app import models
|
|
from canaille.app.i18n import gettext
|
|
from canaille.app.i18n import lazy_gettext as _
|
|
from canaille.backends import Backend
|
|
|
|
|
|
def unique_user_name(form, field):
|
|
if Backend.instance.get(models.User, user_name=field.data) and (
|
|
not getattr(form, "user", None) or form.user.user_name != field.data
|
|
):
|
|
raise wtforms.ValidationError(
|
|
_("The user name '{user_name}' already exists").format(user_name=field.data)
|
|
)
|
|
|
|
|
|
def unique_email(form, field):
|
|
if Backend.instance.get(models.User, emails=field.data) and (
|
|
not getattr(form, "user", None) or field.data not in form.user.emails
|
|
):
|
|
raise wtforms.ValidationError(
|
|
_("The email '{email}' is already used").format(email=field.data)
|
|
)
|
|
|
|
|
|
def unique_group(form, field):
|
|
if Backend.instance.get(models.Group, display_name=field.data):
|
|
raise wtforms.ValidationError(
|
|
_("The group '{group}' already exists").format(group=field.data)
|
|
)
|
|
|
|
|
|
def existing_login(form, field):
|
|
if not current_app.config["CANAILLE"][
|
|
"HIDE_INVALID_LOGINS"
|
|
] and not Backend.instance.get_user_from_login(field.data):
|
|
raise wtforms.ValidationError(
|
|
_("The login '{login}' does not exist").format(login=field.data)
|
|
)
|
|
|
|
|
|
def existing_group_member(form, field):
|
|
if field.data is None:
|
|
raise wtforms.ValidationError(
|
|
gettext("The user you are trying to remove does not exist.")
|
|
)
|
|
|
|
if field.data not in form.group.members:
|
|
raise wtforms.ValidationError(
|
|
gettext(
|
|
"The user '{user}' has already been removed from the group '{group}'"
|
|
).format(user=field.data.formatted_name, group=form.group.display_name)
|
|
)
|
|
|
|
|
|
def non_empty_groups(form, field):
|
|
"""LDAP groups cannot be empty because groupOfNames.member is a MUST
|
|
attribute.
|
|
|
|
https://www.rfc-editor.org/rfc/rfc2256.html#section-7.10
|
|
"""
|
|
if not form.user:
|
|
return
|
|
|
|
for group in form.user.groups:
|
|
if len(group.members) == 1 and group not in field.data:
|
|
raise wtforms.ValidationError(
|
|
_(
|
|
"The group '{group}' cannot be removed, because it must have at least one user left."
|
|
).format(group=group.display_name)
|
|
)
|