
Ajout du test du lock darcs-hash:20070329083030-9e428-880986b57535719fe9d0c54f9aaf6cdacdb72ebe.gz
89 lines
3.2 KiB
Python
Executable file
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
|