scripts/admin/confmail/conf_mail.py
bos ea07b8ec00 Utilisation d'un service
darcs-hash:20070521212446-c992d-3a8b22000f2b15c9502b82c200e5855629ab1935.gz
2007-05-21 23:24:46 +02:00

80 lines
2.6 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()
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