check_uniqueness sur les attributs de type mail corrigée

This commit is contained in:
Pierre-Elliott Bécue 2015-09-10 12:53:55 +02:00
parent c35878562a
commit d20fa54614

View file

@ -743,22 +743,27 @@ class mail(rightProtectedAttr):
if str(self) in liste_exclue: if str(self) in liste_exclue:
return return
if attr in ["mailAlias", "canonicalAlias", 'mail']: if attr in ["mailAlias", "canonicalAlias", 'mail']:
mail, end = str(self).split('@', 1) mail = str(self)
if end.startswith('crans'): # On commence par vérifier auprès du serveur SMTP
try: # si l'adresse email est prise sur le réseau. Cela permet
smtp = smtplib.SMTP(smtpserv) # de tester aussi les adresses statiquement écrites dans
smtp.putcmd("vrfy", mail) # aliases.db.
res = smtp.getreply()[0] in [250, 252] try:
smtp.close() smtp = smtplib.SMTP(smtpserv)
except: smtp.putcmd("vrfy", mail)
raise ValueError('Serveur de mail injoignable') res = smtp.getreply()[0] in [250, 252]
smtp.close()
if res: except:
raise ValueError("Le mail %s est déjà pris." % (str(self))) raise ValueError('Serveur de mail injoignable')
else: # Si le SMTP n'est pas joignable, on joue à la roulette
# russe en demandant à LDAP, sans vérifier les aliases
# statiques…
check = self.conn.search(u'mail=%s' % mail) check = self.conn.search(u'mail=%s' % mail)
if len(check) >= 1: if len(check) >= 1:
raise ValueError("Le mail %s est déjà pris." % (str(self))) res = True
if res:
raise ValueError("Le mail %s est déjà pris." % (str(self)))
def parse_value(self, mail): def parse_value(self, mail):
if not re.match(u'^[-_.0-9A-Za-z]+@([A-Za-z0-9]{1}[A-Za-z0-9-_]+[.])+[a-z]{2,6}$', mail): if not re.match(u'^[-_.0-9A-Za-z]+@([A-Za-z0-9]{1}[A-Za-z0-9-_]+[.])+[a-z]{2,6}$', mail):