[attributs] On vérifie via le serveur smtp que les adresses mail sont libres.
C'est bien plus efficace, car les alias hardcodés dans /etc/postfix/aliases sont compris dans ce test là.
This commit is contained in:
parent
c31735913e
commit
83198b6bf6
1 changed files with 23 additions and 5 deletions
28
attributs.py
28
attributs.py
|
@ -43,6 +43,10 @@ from crans_utils import format_tel, format_mac, mailexist, validate_name, ip4_of
|
||||||
sys.path.append("/usr/scripts/gestion")
|
sys.path.append("/usr/scripts/gestion")
|
||||||
import config
|
import config
|
||||||
import annuaires_pg
|
import annuaires_pg
|
||||||
|
import smtplib
|
||||||
|
|
||||||
|
### SMTP
|
||||||
|
smtpserv = "smtp.crans.org"
|
||||||
|
|
||||||
### Les droits
|
### Les droits
|
||||||
# en cas de typo, l'appel d'une variable plante, on préfèrera donc les utiliser en lieu et place
|
# en cas de typo, l'appel d'une variable plante, on préfèrera donc les utiliser en lieu et place
|
||||||
|
@ -119,7 +123,9 @@ class Attr(object):
|
||||||
self.validate(ldif)
|
self.validate(ldif)
|
||||||
|
|
||||||
def parse_value(self, val, ldif):
|
def parse_value(self, val, ldif):
|
||||||
"""Transforme l'attribut pour travailler avec notre validateur"""
|
"""Transforme l'attribut pour travailler avec notre validateur
|
||||||
|
Le ldif est en dépendance car à certains endroits, il peut servir
|
||||||
|
(par exemple, pour l'ipv6, ou l'ipv4..."""
|
||||||
self.value = val
|
self.value = val
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
|
@ -135,6 +141,10 @@ class Attr(object):
|
||||||
vérifie déjà que ce qu'on a rentré est parsable"""
|
vérifie déjà que ce qu'on a rentré est parsable"""
|
||||||
if not self.__class__.__name__ in CRANS_ATTRIBUTES:
|
if not self.__class__.__name__ in CRANS_ATTRIBUTES:
|
||||||
raise ValueError('Attribut %s inconnu' % self.__class__.__name__)
|
raise ValueError('Attribut %s inconnu' % self.__class__.__name__)
|
||||||
|
|
||||||
|
# On utilise un ldif parce qu'il faut avoir un contexte
|
||||||
|
# pour savoir si l'attribut qu'on est en train de créer
|
||||||
|
# est légitime.
|
||||||
own_values = ldif.get(self.__class__.__name__, [])
|
own_values = ldif.get(self.__class__.__name__, [])
|
||||||
self._check_cardinality(own_values)
|
self._check_cardinality(own_values)
|
||||||
self._check_uniqueness()
|
self._check_uniqueness()
|
||||||
|
@ -282,7 +292,6 @@ class tel(Attr):
|
||||||
if len(self.value) == 0:
|
if len(self.value) == 0:
|
||||||
raise ValueError("Numéro de téléphone invalide (%r)" % val)
|
raise ValueError("Numéro de téléphone invalide (%r)" % val)
|
||||||
|
|
||||||
|
|
||||||
class yearAttr(intAttr):
|
class yearAttr(intAttr):
|
||||||
singlevalue = False
|
singlevalue = False
|
||||||
optional= True
|
optional= True
|
||||||
|
@ -317,13 +326,22 @@ class mail(Attr):
|
||||||
def _check_uniqueness(self):
|
def _check_uniqueness(self):
|
||||||
attr = self.__class__.__name__
|
attr = self.__class__.__name__
|
||||||
if attr in ["mailAlias", "canonicalAlias", 'mail']:
|
if attr in ["mailAlias", "canonicalAlias", 'mail']:
|
||||||
res = self.conn.search('(|(mail=%s)(mailAlias=%s)(canonicalAlias=%s))' % ((str(self),)*3))
|
mail = str(self).split('@', 1)[0]
|
||||||
|
|
||||||
|
try:
|
||||||
|
smtp = smtplib.SMTP(smtpserv)
|
||||||
|
smtp.putcmd("vrfy", mail)
|
||||||
|
res = smtp.getreply()[0] in [250, 252]
|
||||||
|
smtp.close()
|
||||||
|
except:
|
||||||
|
raise ValueError(u'Serveur de mail injoignable')
|
||||||
|
|
||||||
if res:
|
if res:
|
||||||
raise ValueError("Mail déjà existant", [r.dn for r in res])
|
raise ValueError("Le mail %s est déjà pris." % (str(self)))
|
||||||
|
|
||||||
def parse_value(self, mail, ldif):
|
def parse_value(self, mail, ldif):
|
||||||
if not re.match('^[-_.0-9A-Za-z]+@([A-Za-z0-9]{1}[A-Za-z0-9-_]+[.])+[a-z]{2,6}$', mail):
|
if not re.match('^[-_.0-9A-Za-z]+@([A-Za-z0-9]{1}[A-Za-z0-9-_]+[.])+[a-z]{2,6}$', mail):
|
||||||
raise ValueError("Adresse mail invalide (%s)" % ldif)
|
raise ValueError("Adresse mail invalide (%s)" % mail)
|
||||||
self.value = mail
|
self.value = mail
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue