mirror of
https://gitlab2.federez.net/re2o/re2o
synced 2024-11-26 22:52:26 +00:00
Doc et grosse review pep8
This commit is contained in:
parent
51a8b66cd4
commit
e9855c7867
2 changed files with 665 additions and 200 deletions
215
users/forms.py
215
users/forms.py
|
@ -20,8 +20,16 @@
|
|||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
"""
|
||||
Definition des forms pour l'application users.
|
||||
|
||||
# -*- coding: utf-8 -*-
|
||||
Modification, creation de :
|
||||
- un user (informations personnelles)
|
||||
- un bannissement
|
||||
- le mot de passe d'un user
|
||||
- une whiteliste
|
||||
- un user de service
|
||||
"""
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
|
@ -29,17 +37,34 @@ from django import forms
|
|||
from django.forms import ModelForm, Form
|
||||
from django.contrib.auth.forms import ReadOnlyPasswordHashField
|
||||
from django.core.validators import MinLengthValidator
|
||||
from preferences.models import OptionalUser
|
||||
from django.utils import timezone
|
||||
from .models import User, ServiceUser, Right, School, ListRight, Whitelist, Ban, Request, remove_user_room
|
||||
|
||||
from .models import get_admin_right
|
||||
from preferences.models import OptionalUser
|
||||
from .models import User, ServiceUser, Right, School, ListRight, Whitelist
|
||||
from .models import Ban, remove_user_room
|
||||
|
||||
NOW = timezone.now()
|
||||
|
||||
|
||||
class PassForm(forms.Form):
|
||||
passwd1 = forms.CharField(label=u'Nouveau mot de passe', max_length=255, validators=[MinLengthValidator(8)], widget=forms.PasswordInput)
|
||||
passwd2 = forms.CharField(label=u'Saisir à nouveau le mot de passe', max_length=255, validators=[MinLengthValidator(8)], widget=forms.PasswordInput)
|
||||
"""Formulaire de changement de mot de passe. Verifie que les 2
|
||||
nouveaux mots de passe renseignés sont identiques et respectent
|
||||
une norme"""
|
||||
passwd1 = forms.CharField(
|
||||
label=u'Nouveau mot de passe',
|
||||
max_length=255,
|
||||
validators=[MinLengthValidator(8)],
|
||||
widget=forms.PasswordInput
|
||||
)
|
||||
passwd2 = forms.CharField(
|
||||
label=u'Saisir à nouveau le mot de passe',
|
||||
max_length=255,
|
||||
validators=[MinLengthValidator(8)],
|
||||
widget=forms.PasswordInput
|
||||
)
|
||||
|
||||
def clean_passwd2(self):
|
||||
"""Verifie que passwd1 et 2 sont identiques"""
|
||||
# Check that the two password entries match
|
||||
password1 = self.cleaned_data.get("passwd1")
|
||||
password2 = self.cleaned_data.get("passwd2")
|
||||
|
@ -47,11 +72,26 @@ class PassForm(forms.Form):
|
|||
raise forms.ValidationError("Passwords don't match")
|
||||
return password2
|
||||
|
||||
|
||||
class UserCreationForm(forms.ModelForm):
|
||||
"""A form for creating new users. Includes all the required
|
||||
fields, plus a repeated password."""
|
||||
password1 = forms.CharField(label='Password', widget=forms.PasswordInput, validators=[MinLengthValidator(8)], max_length=255)
|
||||
password2 = forms.CharField(label='Password confirmation', widget=forms.PasswordInput, validators=[MinLengthValidator(8)], max_length=255)
|
||||
fields, plus a repeated password.
|
||||
|
||||
Formulaire pour la création d'un user. N'est utilisé que pour
|
||||
l'admin, lors de la creation d'un user par admin. Inclu tous les
|
||||
champs obligatoires"""
|
||||
password1 = forms.CharField(
|
||||
label='Password',
|
||||
widget=forms.PasswordInput,
|
||||
validators=[MinLengthValidator(8)],
|
||||
max_length=255
|
||||
)
|
||||
password2 = forms.CharField(
|
||||
label='Password confirmation',
|
||||
widget=forms.PasswordInput,
|
||||
validators=[MinLengthValidator(8)],
|
||||
max_length=255
|
||||
)
|
||||
is_admin = forms.BooleanField(label='is admin')
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
|
@ -63,6 +103,7 @@ class UserCreationForm(forms.ModelForm):
|
|||
fields = ('pseudo', 'name', 'surname', 'email')
|
||||
|
||||
def clean_password2(self):
|
||||
"""Verifie que password1 et 2 sont identiques"""
|
||||
# Check that the two password entries match
|
||||
password1 = self.cleaned_data.get("password1")
|
||||
password2 = self.cleaned_data.get("password2")
|
||||
|
@ -78,21 +119,40 @@ class UserCreationForm(forms.ModelForm):
|
|||
user.is_admin = self.cleaned_data.get("is_admin")
|
||||
return user
|
||||
|
||||
|
||||
class ServiceUserCreationForm(forms.ModelForm):
|
||||
"""A form for creating new users. Includes all the required
|
||||
fields, plus a repeated password."""
|
||||
password1 = forms.CharField(label='Password', widget=forms.PasswordInput, min_length=8, max_length=255)
|
||||
password2 = forms.CharField(label='Password confirmation', widget=forms.PasswordInput, min_length=8, max_length=255)
|
||||
fields, plus a repeated password.
|
||||
|
||||
Formulaire pour la creation de nouveaux serviceusers.
|
||||
Requiert seulement un mot de passe; et un pseudo"""
|
||||
password1 = forms.CharField(
|
||||
label='Password',
|
||||
widget=forms.PasswordInput,
|
||||
min_length=8,
|
||||
max_length=255
|
||||
)
|
||||
password2 = forms.CharField(
|
||||
label='Password confirmation',
|
||||
widget=forms.PasswordInput,
|
||||
min_length=8,
|
||||
max_length=255
|
||||
)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
prefix = kwargs.pop('prefix', self.Meta.model.__name__)
|
||||
super(ServiceUserCreationForm, self).__init__(*args, prefix=prefix, **kwargs)
|
||||
super(ServiceUserCreationForm, self).__init__(
|
||||
*args,
|
||||
prefix=prefix,
|
||||
**kwargs
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = ServiceUser
|
||||
fields = ('pseudo',)
|
||||
|
||||
def clean_password2(self):
|
||||
"""Verifie que password1 et 2 sont indentiques"""
|
||||
# Check that the two password entries match
|
||||
password1 = self.cleaned_data.get("password1")
|
||||
password2 = self.cleaned_data.get("password2")
|
||||
|
@ -107,10 +167,13 @@ class ServiceUserCreationForm(forms.ModelForm):
|
|||
user.save()
|
||||
return user
|
||||
|
||||
|
||||
class UserChangeForm(forms.ModelForm):
|
||||
"""A form for updating users. Includes all the fields on
|
||||
the user, but replaces the password field with admin's
|
||||
password hash display field.
|
||||
|
||||
Formulaire pour la modification d'un user coté admin
|
||||
"""
|
||||
password = ReadOnlyPasswordHashField()
|
||||
is_admin = forms.BooleanField(label='is admin', required=False)
|
||||
|
@ -126,6 +189,7 @@ class UserChangeForm(forms.ModelForm):
|
|||
self.initial['is_admin'] = kwargs['instance'].is_admin
|
||||
|
||||
def clean_password(self):
|
||||
"""Dummy fun"""
|
||||
# Regardless of what the user provides, return the initial value.
|
||||
# This is done here, rather than on the field, because the
|
||||
# field does not have access to the initial value
|
||||
|
@ -139,42 +203,59 @@ class UserChangeForm(forms.ModelForm):
|
|||
user.save()
|
||||
return user
|
||||
|
||||
|
||||
class ServiceUserChangeForm(forms.ModelForm):
|
||||
"""A form for updating users. Includes all the fields on
|
||||
the user, but replaces the password field with admin's
|
||||
password hash display field.
|
||||
|
||||
Formulaire pour l'edition des service users coté admin
|
||||
"""
|
||||
password = ReadOnlyPasswordHashField()
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
prefix = kwargs.pop('prefix', self.Meta.model.__name__)
|
||||
super(ServiceUserChangeForm, self).__init__(*args, prefix=prefix, **kwargs)
|
||||
super(ServiceUserChangeForm, self).__init__(
|
||||
*args,
|
||||
prefix=prefix,
|
||||
**kwargs
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = ServiceUser
|
||||
fields = ('pseudo',)
|
||||
|
||||
def clean_password(self):
|
||||
# Regardless of what the user provides, return the initial value.
|
||||
# This is done here, rather than on the field, because the
|
||||
# field does not have access to the initial value
|
||||
"""Dummy fun"""
|
||||
return self.initial["password"]
|
||||
|
||||
|
||||
class ResetPasswordForm(forms.Form):
|
||||
"""Formulaire de demande de reinitialisation de mot de passe,
|
||||
mdp oublié"""
|
||||
pseudo = forms.CharField(label=u'Pseudo', max_length=255)
|
||||
email = forms.EmailField(max_length=255)
|
||||
|
||||
|
||||
class MassArchiveForm(forms.Form):
|
||||
"""Formulaire d'archivage des users inactif. Prend en argument
|
||||
du formulaire la date de depart avant laquelle archiver les
|
||||
users"""
|
||||
date = forms.DateTimeField(help_text='%d/%m/%y')
|
||||
|
||||
def clean(self):
|
||||
cleaned_data=super(MassArchiveForm, self).clean()
|
||||
cleaned_data = super(MassArchiveForm, self).clean()
|
||||
date = cleaned_data.get("date")
|
||||
if date:
|
||||
if date>timezone.now():
|
||||
raise forms.ValidationError("Impossible d'archiver des utilisateurs dont la fin d'accès se situe dans le futur !")
|
||||
if date > NOW:
|
||||
raise forms.ValidationError("Impossible d'archiver des\
|
||||
utilisateurs dont la fin d'accès se situe dans le futur !")
|
||||
|
||||
|
||||
class BaseInfoForm(ModelForm):
|
||||
"""Formulaire de base d'edition d'un user. Formulaire de base, utilisé
|
||||
pour l'edition de self par self ou un cableur. On formate les champs
|
||||
avec des label plus jolis"""
|
||||
def __init__(self, *args, **kwargs):
|
||||
prefix = kwargs.pop('prefix', self.Meta.model.__name__)
|
||||
super(BaseInfoForm, self).__init__(*args, prefix=prefix, **kwargs)
|
||||
|
@ -200,13 +281,21 @@ class BaseInfoForm(ModelForm):
|
|||
]
|
||||
|
||||
def clean_telephone(self):
|
||||
"""Verifie que le tel est présent si 'option est validée
|
||||
dans preferences"""
|
||||
telephone = self.cleaned_data['telephone']
|
||||
preferences, created = OptionalUser.objects.get_or_create()
|
||||
preferences, _created = OptionalUser.objects.get_or_create()
|
||||
if not telephone and preferences.is_tel_mandatory:
|
||||
raise forms.ValidationError("Un numéro de téléphone valide est requis")
|
||||
raise forms.ValidationError(
|
||||
"Un numéro de téléphone valide est requis"
|
||||
)
|
||||
return telephone
|
||||
|
||||
|
||||
class EditInfoForm(BaseInfoForm):
|
||||
"""Edition complète d'un user. Utilisé par admin,
|
||||
permet d'editer normalement la chambre, ou le shell
|
||||
Herite de la base"""
|
||||
class Meta(BaseInfoForm.Meta):
|
||||
fields = [
|
||||
'name',
|
||||
|
@ -220,22 +309,33 @@ class EditInfoForm(BaseInfoForm):
|
|||
'telephone',
|
||||
]
|
||||
|
||||
|
||||
class InfoForm(EditInfoForm):
|
||||
""" Utile pour forcer un déménagement quand il y a déjà un user en place"""
|
||||
force = forms.BooleanField(label="Forcer le déménagement ?", initial=False, required=False)
|
||||
""" Utile pour forcer un déménagement quand il y a déjà un user en place
|
||||
Formuaire utilisé pour la creation initiale"""
|
||||
force = forms.BooleanField(
|
||||
label="Forcer le déménagement ?",
|
||||
initial=False,
|
||||
required=False
|
||||
)
|
||||
|
||||
def clean_force(self):
|
||||
"""On supprime l'ancien user de la chambre si et seulement si la
|
||||
case est cochée"""
|
||||
if self.cleaned_data.get('force', False):
|
||||
remove_user_room(self.cleaned_data.get('room'))
|
||||
return
|
||||
|
||||
|
||||
class UserForm(InfoForm):
|
||||
""" Model form general"""
|
||||
class Meta(InfoForm.Meta):
|
||||
fields = '__all__'
|
||||
|
||||
|
||||
class PasswordForm(ModelForm):
|
||||
""" Formulaire de changement brut de mot de passe. Ne pas utiliser sans traitement"""
|
||||
""" Formulaire de changement brut de mot de passe.
|
||||
Ne pas utiliser sans traitement"""
|
||||
class Meta:
|
||||
model = User
|
||||
fields = ['password', 'pwd_ntlm']
|
||||
|
@ -244,21 +344,32 @@ class PasswordForm(ModelForm):
|
|||
prefix = kwargs.pop('prefix', self.Meta.model.__name__)
|
||||
super(PasswordForm, self).__init__(*args, prefix=prefix, **kwargs)
|
||||
|
||||
|
||||
class ServiceUserForm(ModelForm):
|
||||
""" Modification d'un service user"""
|
||||
password = forms.CharField(label=u'Nouveau mot de passe', max_length=255, validators=[MinLengthValidator(8)], widget=forms.PasswordInput, required=False)
|
||||
password = forms.CharField(
|
||||
label=u'Nouveau mot de passe',
|
||||
max_length=255,
|
||||
validators=[MinLengthValidator(8)],
|
||||
widget=forms.PasswordInput,
|
||||
required=False
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = ServiceUser
|
||||
fields = ('pseudo','access_group')
|
||||
fields = ('pseudo', 'access_group')
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
prefix = kwargs.pop('prefix', self.Meta.model.__name__)
|
||||
super(ServiceUserForm, self).__init__(*args, prefix=prefix, **kwargs)
|
||||
|
||||
|
||||
class EditServiceUserForm(ServiceUserForm):
|
||||
"""Formulaire d'edition de base d'un service user. Ne permet
|
||||
d'editer que son group d'acl et son commentaire"""
|
||||
class Meta(ServiceUserForm.Meta):
|
||||
fields = ['access_group','comment']
|
||||
fields = ['access_group', 'comment']
|
||||
|
||||
|
||||
class StateForm(ModelForm):
|
||||
""" Changement de l'état d'un user"""
|
||||
|
@ -272,6 +383,7 @@ class StateForm(ModelForm):
|
|||
|
||||
|
||||
class SchoolForm(ModelForm):
|
||||
"""Edition, creation d'un école"""
|
||||
class Meta:
|
||||
model = School
|
||||
fields = ['name']
|
||||
|
@ -281,7 +393,10 @@ class SchoolForm(ModelForm):
|
|||
super(SchoolForm, self).__init__(*args, prefix=prefix, **kwargs)
|
||||
self.fields['name'].label = 'Établissement'
|
||||
|
||||
|
||||
class ListRightForm(ModelForm):
|
||||
"""Edition, d'un groupe , équivalent à un droit
|
||||
Ne peremet pas d'editer le gid, car il sert de primary key"""
|
||||
class Meta:
|
||||
model = ListRight
|
||||
fields = ['listright', 'details']
|
||||
|
@ -291,21 +406,38 @@ class ListRightForm(ModelForm):
|
|||
super(ListRightForm, self).__init__(*args, prefix=prefix, **kwargs)
|
||||
self.fields['listright'].label = 'Nom du droit/groupe'
|
||||
|
||||
|
||||
class NewListRightForm(ListRightForm):
|
||||
"""Ajout d'un groupe/list de droit """
|
||||
class Meta(ListRightForm.Meta):
|
||||
fields = '__all__'
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(NewListRightForm, self).__init__(*args, **kwargs)
|
||||
self.fields['gid'].label = 'Gid, attention, cet attribut ne doit pas être modifié après création'
|
||||
self.fields['gid'].label = 'Gid, attention, cet attribut ne doit\
|
||||
pas être modifié après création'
|
||||
|
||||
|
||||
class DelListRightForm(Form):
|
||||
listrights = forms.ModelMultipleChoiceField(queryset=ListRight.objects.all(), label="Droits actuels", widget=forms.CheckboxSelectMultiple)
|
||||
"""Suppression d'un ou plusieurs groupes"""
|
||||
listrights = forms.ModelMultipleChoiceField(
|
||||
queryset=ListRight.objects.all(),
|
||||
label="Droits actuels",
|
||||
widget=forms.CheckboxSelectMultiple
|
||||
)
|
||||
|
||||
|
||||
class DelSchoolForm(Form):
|
||||
schools = forms.ModelMultipleChoiceField(queryset=School.objects.all(), label="Etablissements actuels", widget=forms.CheckboxSelectMultiple)
|
||||
"""Suppression d'une ou plusieurs écoles"""
|
||||
schools = forms.ModelMultipleChoiceField(
|
||||
queryset=School.objects.all(),
|
||||
label="Etablissements actuels",
|
||||
widget=forms.CheckboxSelectMultiple
|
||||
)
|
||||
|
||||
|
||||
class RightForm(ModelForm):
|
||||
"""Assignation d'un droit à un user"""
|
||||
def __init__(self, *args, **kwargs):
|
||||
prefix = kwargs.pop('prefix', self.Meta.model.__name__)
|
||||
super(RightForm, self).__init__(*args, prefix=prefix, **kwargs)
|
||||
|
@ -318,13 +450,19 @@ class RightForm(ModelForm):
|
|||
|
||||
|
||||
class DelRightForm(Form):
|
||||
rights = forms.ModelMultipleChoiceField(queryset=Right.objects.all(), widget=forms.CheckboxSelectMultiple)
|
||||
"""Suppression d'un droit d'un user"""
|
||||
rights = forms.ModelMultipleChoiceField(
|
||||
queryset=Right.objects.all(),
|
||||
widget=forms.CheckboxSelectMultiple
|
||||
)
|
||||
|
||||
def __init__(self, right, *args, **kwargs):
|
||||
super(DelRightForm, self).__init__(*args, **kwargs)
|
||||
self.fields['rights'].queryset = Right.objects.filter(right=right)
|
||||
|
||||
|
||||
class BanForm(ModelForm):
|
||||
"""Creation, edition d'un objet bannissement"""
|
||||
def __init__(self, *args, **kwargs):
|
||||
prefix = kwargs.pop('prefix', self.Meta.model.__name__)
|
||||
super(BanForm, self).__init__(*args, prefix=prefix, **kwargs)
|
||||
|
@ -335,13 +473,16 @@ class BanForm(ModelForm):
|
|||
exclude = ['user']
|
||||
|
||||
def clean_date_end(self):
|
||||
"""Verification que date_end est après now"""
|
||||
date_end = self.cleaned_data['date_end']
|
||||
if date_end < timezone.now():
|
||||
raise forms.ValidationError("Triple buse, la date de fin ne peut pas être avant maintenant... Re2o ne voyage pas dans le temps")
|
||||
if date_end < NOW:
|
||||
raise forms.ValidationError("Triple buse, la date de fin ne peut\
|
||||
pas être avant maintenant... Re2o ne voyage pas dans le temps")
|
||||
return date_end
|
||||
|
||||
|
||||
class WhitelistForm(ModelForm):
|
||||
"""Creation, edition d'un objet whitelist"""
|
||||
def __init__(self, *args, **kwargs):
|
||||
prefix = kwargs.pop('prefix', self.Meta.model.__name__)
|
||||
super(WhitelistForm, self).__init__(*args, prefix=prefix, **kwargs)
|
||||
|
@ -352,7 +493,9 @@ class WhitelistForm(ModelForm):
|
|||
exclude = ['user']
|
||||
|
||||
def clean_date_end(self):
|
||||
"""Verification que la date_end est posterieur à now"""
|
||||
date_end = self.cleaned_data['date_end']
|
||||
if date_end < timezone.now():
|
||||
raise forms.ValidationError("Triple buse, la date de fin ne peut pas être avant maintenant... Re2o ne voyage pas dans le temps")
|
||||
if date_end < NOW:
|
||||
raise forms.ValidationError("Triple buse, la date de fin ne peut pas\
|
||||
être avant maintenant... Re2o ne voyage pas dans le temps")
|
||||
return date_end
|
||||
|
|
650
users/models.py
650
users/models.py
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue