# -*- 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
%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() 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