[ldap_crans] Ajout du champ mailExt (email_exterieur)

darcs-hash:20100830140715-ffbb2-82d7ca3623aaa50f2b6b050c8b941f6a98762ede.gz
This commit is contained in:
Nicolas Dandrimont 2010-08-30 16:07:15 +02:00
parent 575f926856
commit 6a6665ede6

View file

@ -229,6 +229,37 @@ def format_mac(mac):
return 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 ### Définition des classes
@ -290,7 +321,7 @@ class CransLdap:
auto_search_champs = { \ auto_search_champs = { \
'adherent': \ 'adherent': \
['nom', 'prenom', 'tel', 'mail', 'chbre', 'mailAlias', 'canonicalAlias'], ['nom', 'prenom', 'tel', 'mail', 'chbre', 'mailAlias', 'canonicalAlias', 'mailExt'],
'club': ['nom', 'chbre', 'uid'], 'club': ['nom', 'chbre', 'uid'],
'machineFixe': auto_search_machines_champs, 'machineFixe': auto_search_machines_champs,
'machineWifi': auto_search_machines_champs, 'machineWifi': auto_search_machines_champs,
@ -1992,31 +2023,7 @@ class Adherent(BaseProprietaire):
if new == None: if new == None:
return decode(self._data.get('mail', [''])[0]) return decode(self._data.get('mail', [''])[0])
l, new = preattr(new) new = validate_mail(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 !")
# Il ne doit pas y avoir de compte # Il ne doit pas y avoir de compte
self.supprimer_compte() self.supprimer_compte()
@ -2042,6 +2049,20 @@ class Adherent(BaseProprietaire):
mail += '@crans.org' mail += '@crans.org'
return mail 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): def mail_invalide(self, valeur=None):
""" """
L'adresse est invalide. L'adresse est invalide.