This repository has been archived on 2023-02-21. You can view files and clone it, but cannot push or open issues or pull requests.
univnautes-old/virtualenv/pfidp/users_admin/forms.py

76 lines
4.1 KiB
Python

# -*- encoding: utf-8 -*-
from django import forms
from django.conf import settings
import datetime
import pfusers
class ConfirmForm(forms.Form):
pass
class UploadFileForm(forms.Form):
file = forms.FileField(label=u"Fichier", required=True)
class UserForm(forms.Form):
name = forms.RegexField(label=u"Nom d'utilisateur (login)", regex='^[a-z0-9\.\-_]+$', min_length=3, max_length=16, required=True,
widget=forms.TextInput(attrs={'readonly': True, 'size':'16', 'autocomplete':'off', 'class':'span2'}))
disabled = forms.BooleanField(label=u'Désactivé',required=False)
password = forms.CharField(label=u"Nouveau mot de passe", min_length=3, max_length=64, required=False,
widget=forms.PasswordInput(attrs={'size':'32', 'autocomplete':'off', 'class':'span3'}))
password2 = forms.CharField(label=u"Mot de passe (vérification)", min_length=3, max_length=64, required=False,
widget=forms.PasswordInput(attrs={'size':'32', 'autocomplete':'off', 'class':'span3'}))
expires = forms.DateField(label=u"Date d'expiration", required=False,
widget=forms.TextInput(attrs={'size':'16', 'class':'span2 datepicker'}))
descr = forms.CharField(label=u'Description (nom long)', max_length=256, required=False,
widget=forms.TextInput(attrs={'size':'256', 'class':'span6'}))
multiple = forms.BooleanField(label=u'Connexions multiples autorisées',required=False)
def is_valid(self):
valid = super(UserForm, self).is_valid()
if valid:
# check passwords
password = self.cleaned_data.get('password')
password2 = self.cleaned_data.get('password2')
if password != password2:
self.errors['password'] = [u'Les deux mots de passe doivent être identiques']
valid = False
return valid
class NewUserForm(UserForm):
name = forms.RegexField(label=u"Nom d'utilisateur (login)", regex='^[a-z0-9\.\-_]+$', min_length=3, max_length=16, required=True,
widget=forms.TextInput(attrs={'size':'16', 'autocomplete':'off', 'class':'span2'}),
help_text="""Uniquement lettres, chiffres, point, trait d'union et «_».
Si création de plusieurs utilisateurs (voir plus bas), leur login sera de la forme login-N.""")
# password and expire fields
password = forms.CharField(label=u"Mot de passe", min_length=3, max_length=64, required=False,
help_text="""Si vous n'indiquez pas de mot de passe, un mot de passe aléatoire sera
attribué à chaque utilisateur""",
widget=forms.PasswordInput(attrs={'size':'32', 'autocomplete':'off', 'class':'span3'}))
expires = forms.DateField(label=u"Date d'expiration", required=(settings.IDP_UA_MAX_EXPIRES > 0),
widget=forms.TextInput(attrs={'size':'16', 'class':'span2 datepicker'}))
userset_number = forms.IntegerField(label=u"Nombre d'utilisateur(s) à créer (login-N)",
widget=forms.TextInput(attrs={'size':'5', 'class':'span1'}),
required=True, min_value=1)
userset_start = forms.IntegerField(label=u"""En cas de création de plusieurs utilisateurs (login-N),
indiquer le premier numéro N""",
widget=forms.TextInput(attrs={'size':'5', 'class':'span1'}),
required=True)
def is_valid(self):
valid = super(NewUserForm, self).is_valid()
if valid:
name = self.cleaned_data.get('name')
all_pfusers = pfusers.get_all_pfusers()
userset_number = int(self.cleaned_data.get('userset_number'))
if userset_number == 1 and all_pfusers.get(name, None) is not None:
self.errors['name'] = [u'Un utilisateur avec ce login existe déjà.']
return False
if userset_number > 1:
userset_start = int(self.cleaned_data.get('userset_start'))
for n in range(userset_start, userset_start + userset_number):
if all_pfusers.get('%s-%d' % (name, n), None) is not None:
self.errors['name'] = [u"L'utilisateur %s-%d existe déjà." % (name, n)]
return False
return valid