[admin/mail_invalide,gestion/] Modification du systeme de mail_invalide

Maintenant tout est gere par des blacklistes mail_invalide, ce qui est
beaucoup plus simple ...
(Le champ mailInvalide de la base LDAP peut maintenant etre supprime ...)

darcs-hash:20100318014002-ddb99-d7e616f0b5040fba54c55d49fcaad25dc55a5665.gz
This commit is contained in:
Michel Blockelet 2010-03-18 02:40:02 +01:00
parent 9e78235eff
commit b1239e1291
5 changed files with 42 additions and 75 deletions

View file

@ -95,11 +95,14 @@ if __name__ == "__main__":
print adh.Nom() print adh.Nom()
a_verifier.append(adresse) a_verifier.append(adresse)
else: else:
print "Génération de la fiche pour %s :" % res[0].Nom().encode('utf-8') adherent = res[0]
fiche = generate_ps(res[0]) print "Génération de la fiche pour %s :" % adherent.Nom().encode('utf-8')
fiche = generate_ps(adherent)
print fiche print fiche
a_imprimer.append(fiche) a_imprimer.append(fiche)
db.services_to_restart('mail_invalide_expire', ['%s$%s' % (res[0].id(), res[0].mail())], time.time()+14*86400) adherent.blacklist([time.time() + 14 * 24 * 3600,
'-', 'mail_invalide', "Mail invalide"])
adherent.save()
if len(a_verifier) + len(a_imprimer) > 0: if len(a_verifier) + len(a_imprimer) > 0:
print '' print ''

View file

@ -199,26 +199,6 @@ class mail_ajout_droits:
traceback.print_exc() traceback.print_exc()
class mail_invalide_expire:
# Passage d'un mail en invalide 2 semaines après notification
debug = True
def __init__(self, args):
self.args = args
def reconfigure(self):
cprint(u'Passage en mail invalide', 'gras')
db = crans_ldap()
for arg in self.args:
aid, old_mail = arg.split('$')
adhl = db.search("aid=%s" % aid, 'w')['adherent']
if len(adhl) > 0:
adh = adhl[0]
if adh.mail() == old_mail:
adh.mail_invalide(True)
adh.save()
class ML_ens: class ML_ens:
debug = True debug = True
@ -242,22 +222,3 @@ class ML_ens:
print OK print OK
mlist.Save() mlist.Save()
mlist.Unlock() mlist.Unlock()
class mail_valide:
debug = True
def __init__(self,aids):
self.aids = aids
def reconfigure(self):
db = crans_ldap()
cprint(u'Validation d\'adresses', 'gras')
for aid in self.aids:
adh = db.search(("aid=%s" %aid), 'w')['adherent'][0]
if not adh._modifiable:
db.services_to_restart('mail_valide',aid)
print "echec pour le mail de %s" %adh.nom()
else:
adh.mail_invalide(False)
adh.save()
print "mail de %s marque valide" % adh.nom()

View file

@ -166,14 +166,6 @@ class rouge(base_reconfigure):
from adherents import del_user from adherents import del_user
self._do(del_user(args)) self._do(del_user(args))
def mail_valide(self, args):
from adherents import mail_valide
self._do(mail_valide(args))
def mail_invalide_expire(self, args):
from adherents import mail_invalide_expire
self._do(mail_invalide_expire(args))
def mail_ajout_droits(self, args): def mail_ajout_droits(self, args):
from adherents import mail_ajout_droits from adherents import mail_ajout_droits
self._do(mail_ajout_droits(args)) self._do(mail_ajout_droits(args))

View file

@ -111,4 +111,4 @@ class squid_chbre(squid) :
class squid_mail(squid) : class squid_mail(squid) :
""" Génère le fichier blacklist-mail pour squid """ """ Génère le fichier blacklist-mail pour squid """
FICHIER = "/etc/squid3/blacklist_mail" FICHIER = "/etc/squid3/blacklist_mail"
chaine = "mailInvalide=TRUE&uid!=*" chaine = "mail_invalide"

View file

@ -97,7 +97,9 @@ blacklist_items = { u'bloq': u'Bloquage total de tous les services',
u'autodisc_virus': u'Autodisconnect pour virus', u'autodisc_virus': u'Autodisconnect pour virus',
u'autodisc_upload': u'Autodisconnect pour upload', u'autodisc_upload': u'Autodisconnect pour upload',
u'autodisc_p2p': u'Autodisconnect pour P2P', u'autodisc_p2p': u'Autodisconnect pour P2P',
u'ipv6_ra': u'Isolement pour RA' } u'ipv6_ra': u'Isolement pour RA',
u'mail_invalide': u'Bloquage sur squid',
}
################################################################################## ##################################################################################
### Droits possibles ### Droits possibles
@ -306,7 +308,7 @@ class CransLdap:
['etudes', 'paiement', 'carteEtudiant', 'aid', 'postalAddress', ['etudes', 'paiement', 'carteEtudiant', 'aid', 'postalAddress',
'historique', 'blacklist', 'droits', 'uidNumber', 'uid', 'info', 'historique', 'blacklist', 'droits', 'uidNumber', 'uid', 'info',
'solde', 'controle', 'contourneGreylist', 'rewriteMailHeaders', 'solde', 'controle', 'contourneGreylist', 'rewriteMailHeaders',
'ablacklist', 'homepageAlias', 'mailInvalide', 'charteMA', 'ablacklist', 'homepageAlias', 'charteMA',
'adherentPayant'], \ 'adherentPayant'], \
'club': \ 'club': \
['cid', 'responsable', 'paiement', 'historique', 'blacklist', ['cid', 'responsable', 'paiement', 'historique', 'blacklist',
@ -1999,27 +2001,27 @@ class Adherent(BaseProprietaire):
# Les tests : # Les tests :
# exactement un @ # exactement un @
# 2 ou 3 caractères après le . final # 2 à 4 caractères après le . final
# @ pas en premier ni juste avant le dernier . # @ pas en premier ni juste avant le dernier .
if new.count('@') != 1 \ if new.count('@') != 1 \
or not ( l-b == 4 or l-b == 3) \ or not ( l-b >= 2 and l-b <= 4) \
or a<1 or b-a<2: or a < 1 or b-a < 2:
raise ValueError(u"Adresse mail incorrecte.") raise ValueError(u"Adresse mail incorrecte.")
# Pas de caractèrs bizarres # Pas de caractèrs bizarres
for l in new[:]: for l in new[:]:
if not l in (string.lowercase + string.digits + '-_.@'): if not l in (string.lowercase + string.digits + '-_.@'):
raise ValueError(u"Caractère interdits dans l'adresse mail (%s)." % l) raise ValueError(u"Caractère interdit dans l'adresse mail (%s)." % l)
# Pour les vicieux # Pour les vicieux
if re.match('.*crans.(org|ens-cachan.fr)$', new): if re.match('.*crans.(org|ens-cachan.fr)$', new):
raise ValueError(u"Adresse mail @crans interdite ici") 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()
self._set('mail', [new]) self._set('mail', [new])
# L'adresse est supposée valide avant l'envoi du mail de bienvenue # On enlève les blacklistes mail_invalide
self.mail_invalide(False) self.mail_invalide(False)
# on renvoie le mail de bienvenue # on renvoie le mail de bienvenue
@ -2042,23 +2044,32 @@ class Adherent(BaseProprietaire):
def mail_invalide(self, valeur=None): def mail_invalide(self, valeur=None):
u""" u"""
L'adresse est invalide. L'adresse est invalide.
Au niveau de la base, on considère l'absence ou la présence Au niveau de la base, on considère l'absence ou la présence d'une
de mailInvalide=TRUE. blackliste mail_invalide.
""" """
if valeur == False:
# tente de modifier la valeur # On enlève les blacklistes
if valeur == True: bl_mail_list = [x for x in self.blacklist() if 'mail_invalide' in x]
self._set('mailInvalide', ['TRUE']) now = time.time()
elif valeur == False: for bl_mail in bl_mail_list:
self._set('mailInvalide', []) bl_data = bl_mail.split('$')
elif valeur != None: if int(bl_data[0]) <= now and bl_data[1] == '-':
raise ValueError, u"mail_invalide prend un booléen comme argument" self.blacklist((self.blacklist().index(bl_mail),
[bl_data[0], 'now', 'mail_invalide', bl_data[3]]))
# on met à jour la blackliste sur sable elif int(bl_data[0]) >= now:
self.services_to_restart('bl_mail_invalide') self.blacklist((self.blacklist().index(bl_mail),
[str(now-2), str(now-1), 'mail_invalide', bl_data[3]]))
# renvoie la valeur trouvée dans la base elif valeur == None:
return bool(self._data.get('mailInvalide', [])) # On retourne l'existence d'une blackliste active ou future
bl_mail_list = [x for x in self.blacklist() if 'mail_invalide' in x]
now = time.time()
for bl_mail in bl_mail_list:
bl_data = bl_mail.split('$')
if (int(bl_data[0]) <= now and bl_data[1] == '-') or int(bl_data[0]) >= now:
return True
return False
else:
raise ValueError, u'mail_invalide ne peut prendre que None ou False en argument'
def charteMA(self, valeur=None): def charteMA(self, valeur=None):
u""" u"""