From 6a6665ede69742a50b939cff50a92cd37eef2700 Mon Sep 17 00:00:00 2001 From: Nicolas Dandrimont Date: Mon, 30 Aug 2010 16:07:15 +0200 Subject: [PATCH] [ldap_crans] Ajout du champ mailExt (email_exterieur) darcs-hash:20100830140715-ffbb2-82d7ca3623aaa50f2b6b050c8b941f6a98762ede.gz --- gestion/ldap_crans.py | 73 ++++++++++++++++++++++++++++--------------- 1 file changed, 47 insertions(+), 26 deletions(-) diff --git a/gestion/ldap_crans.py b/gestion/ldap_crans.py index f5904568..93093c73 100644 --- a/gestion/ldap_crans.py +++ b/gestion/ldap_crans.py @@ -229,6 +229,37 @@ def format_mac(mac): return mac +def validate_mail(mail, crans_allowed=False): + """Valide une adresse e-mail""" + l, mail = preattr(mail) + mail = mail.lower() + + #Emplacement de l'@ + a = mail.find('@') + #Emplacement du . final + b = mail.rfind('.') + + # Les tests : + # exactement un @ + # 2 à 4 caractères après le . final + # @ pas en premier ni juste avant le dernier . + if mail.count('@') != 1 \ + or not ( l-b >= 2 and l-b <= 4) \ + or a < 1 or b-a < 2: + raise ValueError(u"Adresse mail incorrecte.") + + # Pas de caractèrs bizarres + for l in mail[:]: + if not l in (string.lowercase + string.digits + '-_.@'): + raise ValueError(u"Caractère interdit dans l'adresse mail (%s)." % l) + + # Pour les vicieux + if crans_allowed and mail.endswith(('crans.org','crans.ens-cachan.fr')): + raise ValueError(u"Adresse mail @crans interdite ici !") + + # On enlève les blacklistes mail_invalide + return mail + ################################################################################## ### Définition des classes @@ -290,7 +321,7 @@ class CransLdap: auto_search_champs = { \ 'adherent': \ - ['nom', 'prenom', 'tel', 'mail', 'chbre', 'mailAlias', 'canonicalAlias'], + ['nom', 'prenom', 'tel', 'mail', 'chbre', 'mailAlias', 'canonicalAlias', 'mailExt'], 'club': ['nom', 'chbre', 'uid'], 'machineFixe': auto_search_machines_champs, 'machineWifi': auto_search_machines_champs, @@ -1992,31 +2023,7 @@ class Adherent(BaseProprietaire): if new == None: return decode(self._data.get('mail', [''])[0]) - l, new = preattr(new) - new = new.lower() - - #Emplacement de l'@ - a = new.find('@') - #Emplacement du . final - b = new.rfind('.') - - # Les tests : - # exactement un @ - # 2 à 4 caractères après le . final - # @ pas en premier ni juste avant le dernier . - if new.count('@') != 1 \ - or not ( l-b >= 2 and l-b <= 4) \ - or a < 1 or b-a < 2: - raise ValueError(u"Adresse mail incorrecte.") - - # Pas de caractèrs bizarres - for l in new[:]: - if not l in (string.lowercase + string.digits + '-_.@'): - raise ValueError(u"Caractère interdit dans l'adresse mail (%s)." % l) - - # Pour les vicieux - if re.match('.*crans.(org|ens-cachan.fr)$', new): - raise ValueError(u"Adresse mail @crans interdite ici !") + new = validate_mail(new) # Il ne doit pas y avoir de compte self.supprimer_compte() @@ -2042,6 +2049,20 @@ class Adherent(BaseProprietaire): mail += '@crans.org' return mail + def email_exterieur(self, new=None): + """Retourne ou paramètre l'adresse mail extérieure de l'adhérent""" + if not new: + return decode(self._data.get('mailExt', [''])[0]) + + new = validate_mail(new) + + self._set('mailExt', [new]) + + # On enlève les blacklistes mail_invalide + self.mail_invalide(False) + + return new + def mail_invalide(self, valeur=None): """ L'adresse est invalide.