Fonctions por la vrification des mails
darcs-hash:20070303033626-c992d-92a484bac0db416acaa0e669992ce8d93c02eb7a.gz
This commit is contained in:
parent
187e2f1669
commit
66ae6a4918
1 changed files with 86 additions and 0 deletions
86
admin/confmail/conf_mail.py
Executable file
86
admin/confmail/conf_mail.py
Executable file
|
@ -0,0 +1,86 @@
|
|||
#!/usr/bin/env python
|
||||
""" 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
|
||||
|
||||
<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]
|
||||
adherent.mail_invalide(False)
|
||||
adherent.save()
|
||||
print modele % "L'adresse a ete marquee valide. 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=604800):
|
||||
""" Envoie un mail de confirmation de l'adresse valable par defaut
|
||||
une semaine """
|
||||
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
|
Loading…
Add table
Add a link
Reference in a new issue