Mise en place du parsage des adresses mail, et on utilise aussi config pour la plage
des ip filaires. À venir, la rationalisation de mitdools pour avoir un équivalent de ip_of_mid dans l'autre sens (genre, si une nounou veut fixer l'ip d'une machine)
This commit is contained in:
parent
ffb1b94144
commit
c805146ab5
2 changed files with 24 additions and 23 deletions
39
attributs.py
39
attributs.py
|
@ -44,17 +44,17 @@ from midtools import Mid
|
|||
### Les droits
|
||||
# en cas de typo, l'appel d'une variable plante, on préfèrera donc les utiliser en lieu et place
|
||||
# des chaînes de caractères
|
||||
nounou = "Nounou"
|
||||
cableur = "Cableur"
|
||||
apprenti = "Apprenti"
|
||||
tresorier = "Tresorier"
|
||||
bureau = "Bureau"
|
||||
imprimeur = "Imprimeur"
|
||||
moderateur = "Moderateur"
|
||||
multimachines = "Multimachines"
|
||||
parent = "parent"
|
||||
soi = "soi"
|
||||
responsable = "responsable"
|
||||
nounou = u"Nounou"
|
||||
cableur = u"Cableur"
|
||||
apprenti = u"Apprenti"
|
||||
tresorier = u"Tresorier"
|
||||
bureau = u"Bureau"
|
||||
imprimeur = u"Imprimeur"
|
||||
moderateur = u"Moderateur"
|
||||
multimachines = u"Multimachines"
|
||||
parent = u"parent"
|
||||
soi = u"soi"
|
||||
responsable = u"responsable"
|
||||
|
||||
TOUS_DROITS = [nounou, apprenti, bureau, tresorier, imprimeur, moderateur, multimachines, cableur]
|
||||
DROITS_ELEVES = [nounou, bureau]
|
||||
|
@ -285,9 +285,11 @@ class mail(Attr):
|
|||
if res:
|
||||
raise ValueError("Mail déjà existant", [r.dn for r in res])
|
||||
|
||||
# XXX - to be implemented
|
||||
#def parse_value(self, mail, ldif):
|
||||
# pass
|
||||
def parse_value(self, mail, ldif):
|
||||
if not re.match('^[A-Za-z][-_.0-9A-Za-z]+@([A-Za-z0-9]{2}[A-Za-z0-9-_]*[.])+[a-z]{2,6}$', val):
|
||||
raise ValueError("Adresse mail invalide (%s)" % val)
|
||||
self.value = val
|
||||
|
||||
|
||||
class canonicalAlias(mail):
|
||||
singlevalue = True
|
||||
|
@ -298,7 +300,8 @@ class canonicalAlias(mail):
|
|||
|
||||
def parse_value(self, val, ldif):
|
||||
val = u".".join([ a.capitalize() for a in val.split(u'.', 1) ])
|
||||
if not re.match('[A-Za-z][-_.0-9A-Za-z]+', val):
|
||||
val = u"-".join([ a.capitalize() for a in val.split(u'-', 1) ])
|
||||
if not re.match('^[A-Za-z][-_.0-9A-Za-z]+@([A-Za-z0-9]{2}[A-Za-z0-9-_]*[.])+[a-z]{2,6}$', val):
|
||||
raise ValueError("Alias mail invalide (%s)" % val)
|
||||
self.value = val
|
||||
|
||||
|
@ -312,7 +315,7 @@ class mailAlias(mail):
|
|||
|
||||
def parse_value(self, val, ldif):
|
||||
val = val.lower()
|
||||
if not re.match('[a-z][-_.0-9a-z]+', val):
|
||||
if not re.match('^[A-Za-z][-_.0-9A-Za-z]+@([A-Za-z0-9]{2}[A-Za-z0-9-_]*[.])+[a-z]{2,6}$', val):
|
||||
raise ValueError("Alias mail invalide (%r)" % val)
|
||||
self.value = val
|
||||
|
||||
|
@ -365,8 +368,8 @@ class droits(Attr):
|
|||
category = 'perso'
|
||||
|
||||
def parse_value(self, val, ldif):
|
||||
if val.lower() not in [i.lower() for i in TOUS_DROITS]:
|
||||
raise ValueError("Ces droits n'existent pas (%r)" % val)
|
||||
# if val.lower() not in [i.lower() for i in TOUS_DROITS]:
|
||||
# raise ValueError("Ces droits n'existent pas (%r)" % val)
|
||||
self.value = val.capitalize()
|
||||
|
||||
def is_modifiable(self, liste_droits):
|
||||
|
|
|
@ -48,6 +48,7 @@ sys.path.append('/usr/scripts/gestion')
|
|||
import config, crans_utils
|
||||
from attributs import attrify, blacklist
|
||||
from ldap_locks import CransLock
|
||||
import midtools
|
||||
|
||||
uri = 'ldap://ldap.adm.crans.org/'
|
||||
base_dn = 'ou=data,dc=crans,dc=org'
|
||||
|
@ -230,14 +231,10 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
|
|||
elif realm in ["fil", "fil-v6", "gratuit", "personnel-ens"]:
|
||||
uldif['objectClass'] = [u'machineFixe']
|
||||
assert isinstance(owner, adherent) or isinstance(owner, club)
|
||||
# XXX - Vérifier les droits
|
||||
|
||||
else: raise ValueError("Realm inconnu: %r" % realm)
|
||||
|
||||
# On récupère la plage des mids
|
||||
if realm == 'fil':
|
||||
plage = xrange(256, 2047)
|
||||
else:
|
||||
plage = xrange( *(config.mid[realm]))
|
||||
# On récupère le premier id libre dans la plages s'il n'est pas
|
||||
# déjà précisé dans le ldiff
|
||||
|
@ -673,6 +670,7 @@ class adherent(proprio):
|
|||
|
||||
if u'posixAccount' in self.attrs['objectClass']:
|
||||
return self.attrs['uid'][0]
|
||||
|
||||
elif login:
|
||||
fn = crans_utils.strip_accents(unicode(self.attrs['prenom'][0]).capitalize())
|
||||
ln = crans_utils.strip_accents(unicode(self.attrs['nom'][0]).capitalize())
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue