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:
Pierre-Elliott Bécue 2013-01-21 02:19:26 +01:00
parent ffb1b94144
commit c805146ab5
2 changed files with 24 additions and 23 deletions

View file

@ -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):

View file

@ -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())