Пример #1
0
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__
            )
Пример #2
0
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 &agrave; jour de ton mot de passe... <br>"
                                  "Merci de relancer la proc&eacute;dure, ou de contacter un administrateur "
                                  "si le probl&egrave;me persiste", "danger")
                            app.logger.error("RESET PASS - FAIL - update fail fur user with id : %s", utilisateur.id)

                        else:
                            flash("Succ&egrave;s ! Ton mot de passe a &eacute;t&eacute; modifi&eacute;.",
                                  "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&eacute;dure, ou de contacter un administrateur "
                      "si le probl&egrave;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&eacute;rim&eacute;... "
                      "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&eacute;dure de changement de mot de passe, "
                  "ou de contacter un admnistrateur si le probl&egrave;me persiste", "danger")
            app.logger.error(
                "RESET PASS - critical error decoding activation_code. Exception : %s",
                e.__class__.__name__
            )

        return redirect(url_for("reset_password"))