def activation(code_activation): """ Valider la préinscription d'un utilisateur, puis rediriger vers la page de login :param code_activation: le code d'activation :return: """ if code_activation is not None and code_activation != "": try: mail = helper.unsing_string(code_activation)["mail"] utilisateur = user.find_user_by_mail(mail, actif_only=False) if utilisateur is not None and not utilisateur.actif: if user.activate_user(utilisateur.id): flash(("Bienvenue %s ! Tu peux maintenant t'identifier" % utilisateur.mail), "success") app.logger.info("ACTIVATION - activated the account for utilisateur with id %s", utilisateur.id) else: flash(("Oups ... Erreur d'activation. Merci de contacter l'adminsitrateur."), "success") app.logger.info("ACTIVATION - error activating the account for user with id %s", utilisateur.id) except Exception, e: flash("URL incorrecte, merci de relancer la procédure d'inscription ou de " "contacter un admnistrateur si le problème persiste", "danger") app.logger.error( "ACTIVATION - critical error decoding activation_code. Exception : %s", e.__class__.__name__ )
def reset_password_activate(activation): """ Vue qui correspond au lien envoyé dans l'e-mail de reset du password. Méthodes : - GET : Afficher le formulaire - POST : Submit et traitement du formulaire Dans tous les cas, on vérifie la validité de la signature : - On arrive à la lire - On arrive à extraire mail et date - Le mail existe dans notre user base - La date est inférieure à datetime.utcnow() Une fois la signature validée, on affiche ou on submit le formulaire. Si pas de code d'activation, le routing de Flask devrait rediriger vers :func:`reset_password()`, mais au cas où, on pète :param str activation: Le code d'activation. Est créé + signé avec itsdangerous. Contient les données de la forme suivante : { "mail" : "*****@*****.**", "date" : "yyyyMMddhhmm" } """ form = user.create_new_password_form() if activation is not None and activation != "": app.logger.info("RESET PASS - Start") try: mail = helper.unsing_string(activation)["mail"] date = dt.datetime.strptime(helper.unsing_string(activation)["date"], DATETIME_FORMAT) utilisateur = user.find_user_by_mail(mail, actif_only=True) app.logger.info("RESET PASS - Trying reset for user : %s, with date (utc) : %s", mail, date) if utilisateur is not None and date > dt.datetime.utcnow(): if request.method == "POST": form = user.create_new_password_form(request.form) if form.validate(): success = user.reset_password_by_id(utilisateur.id, form.new_password.data) if not success: flash("Oops ! Une erreur a eu lieu lors de la mise à jour de ton mot de passe... <br>" "Merci de relancer la procédure, ou de contacter un administrateur " "si le problème persiste", "danger") app.logger.error("RESET PASS - FAIL - update fail fur user with id : %s", utilisateur.id) else: flash("Succès ! Ton mot de passe a été modifié.", "success") app.logger.warning("RESET PASS - FAIL - update fail fur user with id : %s", utilisateur.id) return redirect(url_for('login')) return render_template( "user/password/create_new_password.html", activation=activation, form=form ) elif utilisateur is None: flash("Oops ! Ce code ne correspond à aucun utilisateur... <br>" "Merci de relancer la procédure, ou de contacter un administrateur " "si le problème persiste", "danger") app.logger.error("RESET PASS - FAIL - user does not exist, mail : %s", mail) elif date > dt.datetime.utcnow(): flash("Oops ! Ce code est périmé... " "Pour rappel, les codes ne sont valables que 12h. <br>" "Merci de renvoyer une demande de mot de passe !", "warning") app.logger.error( "RESET PASS - FAIL - The token is too old, for user %s ; " "mail is %s ; max date (utc) is %s", utilisateur.id, mail, date ) else: raise Exception("Strange exception, you shouldn't be here ....") except Exception, e: flash("URL incorrecte, merci de relancer la procédure de changement de mot de passe, " "ou de contacter un admnistrateur si le problème persiste", "danger") app.logger.error( "RESET PASS - critical error decoding activation_code. Exception : %s", e.__class__.__name__ ) return redirect(url_for("reset_password"))