diff --git a/admin/confmail/conf_mail.py b/admin/confmail/conf_mail.py new file mode 100755 index 00000000..4eb700bb --- /dev/null +++ b/admin/confmail/conf_mail.py @@ -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 + + +
+%s
+ + +""" + + + +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