80 lines
2.6 KiB
Python
80 lines
2.6 KiB
Python
# -*- 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()
|
|
db.services_to_restart('mail_valide',str(aid))
|
|
print modele % "L'adresse a ete marquee valide. Merci !"
|
|
|
|
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
|