scripts/admin/confmail/conf_mail.py
bobot d04f1d6203 Ajout d'un titre
Ajout du test du lock

darcs-hash:20070329083030-9e428-880986b57535719fe9d0c54f9aaf6cdacdb72ebe.gz
2007-03-29 10:30:30 +02:00

89 lines
3.2 KiB
Python
Executable file

# -*- coding: utf-8 -*-
""" Confirmation des adresses electroniques.
Par Alexandre Bos
Encore en test
Licence GPL v2 """
""" ATTENTION : CE SCRIPT EST ENCORE EN TEST !"""
import sha, sys, re
from time import time
sys.path.append('/usr/scripts/gestion')
from email_tools import send_email
from ldap_crans import crans_ldap
sys.path.append('/usr/scripts/gestion/secrets')
from secrets import secretConfirmMail
modele = """Content-Type: text/html
<head><title>Page de confirmation de mail</title></head>
<html>
<body>
<h1>Page de confirmation d'email du crans.</h1>
<p>%s</p>
</body>
</html>
"""
re_aid = re.compile ('^\d{1,5}$')
""" Expression rationnelle pour tester les numeros de 0 a 99999 """
re_date = re.compile ('^\d{8,12}$')
""" Expression rationnelle pour tester un entier represantant une date
C'est le resultat d'un time() tronque"""
base_lien = 'http://mailconf.crans.org/confirm.py?'
def gen_code(aid, date_limite):
""" Donne le code de connfirmation en fonction
de l'aid et de la date limite du lien de confirmation"""
chaine = aid + date_limite + secretConfirmMail
hash = sha.new(chaine)
# Ok, on ruine les qualites cryptographiques de sha. Et apres ?
return (hash.hexdigest())[1:15];
def confirmer(aid, date_limite, code):
""" Verifie que les donnes du lien de confirmation sont
correctes et, si tout est bon, marque l'adresse
comme valide"""
code2 = gen_code(aid, date_limite)
if (code <> code2) or (not re_aid.match(aid)) or (not re_date.match(date_limite)):
print modele % ("Lien de confirmation mal formate.")
elif int(date_limite) < time():
print modele % "Lien de confirmation expire."
else:
db = crans_ldap()
resultat = db.search("aid="+aid, "w")
adherent = resultat['adherent'][0]
if adherent._modifiable:
adherent.mail_invalide(False)
adherent.save()
print modele % "L'adresse a ete marquee valide. Merci !"
else:
print modele % "Un autre programme modifie votre compte en ce moment meme.Cette demarche de confirmation d'adresse mail etant en test nous n'avons pas encore bien pris en compte cette eventualite. Nous somme desoles de ce derangement, pourriez vous reessayer plus tard. Merci."
# La ligne suivante est bidon. Pour commencer,
# on peut faire a la main les deconnexions.
# db.services_to_restart(new='bl_mail_invailde')
def envoyer_mail(aid, validite=1209600):
""" Envoie un mail de confirmation de l'adresse valable par defaut
deux semaines """
date_limite = str(int(time() + validite))
code = gen_code(str(aid),date_limite)
db = crans_ldap()
adh = db.search('aid='+str(aid))['adherent'][0]
lien = base_lien + 'aid=' + str(aid) + '&date=' + str(date_limite) + '&conf=' + str(code)
corps = """Bonjour,\n Ce mail t'est envoye afin de confirmer ton adresse electronique. Pour ce faire, clique sur le lien ci-dessous.\n\n%s\n\nMerci !\n\n--\n\nL'equipe technique du Crans""" % lien
send_email('disconnect@crans.org', str(adh._data['mail'][0])+'@crans.org', 'Mail de confirmation d\'adresse electronique', corps, actual_sender='bulk+mailConf@crans.org')
# e finita la comedia