Esempio n. 1
0
def update_password():
    """
    Mettre à jour son mot de passe.

    Lors de la mise à jour, on vérifie que l'utilisateur connait bien le mot de passe actuel,
    afin d'éviter les reset par des tierces personnes sur des sessions ouvertes.

    POST : "commit" les données
    """

    res = {}
    res["content"] = None
    res["csrf_token"] = generate_csrf_token()
    res["success"] = False


    # Confirmer
    form = user.change_password_form(request.form)
    form_confirmed = form.validate()

    # verifier que l'ancien mot de passe est le bon
    password_confirmed = user.confirm_password(current_user.id, form.old_password.data)
    if not password_confirmed:
        app.logger.warning("UPDATE PASS - wrong password for user with id %s", current_user.id)
        form.old_password.errors = ['Ancien mot de passe incorrect']

    # si tout va bien, mettre a jour.
    if form_confirmed and password_confirmed:
        result = user.update_password_by_id(current_user.id, form.old_password.data, form.new_password.data)
        if result:
            app.logger.info("UPDATE PASS - successfully changed password  for user with id %s", current_user.id)
            flash("Mot de passe correctement mis à jour", "success")

            res["success"] = True
            return json.dumps(res)

        else:
            app.logger.error("UPDATE PASS - error changing password  for user with id %s", current_user.id)
            flash("Problème à la mise à jour, contacter l'administrateur", "danger")

    res["content"] = render_template('annuaire/profile/_password.html', password_form = form)


    return json.dumps(res)
Esempio n. 2
0
def ancien(id_ancien):
    """
    Afficher le profil d'un ancien.

    Si l'ancien est l'ancien associé à l'utilisateur, alors on affiche des formulaires d'update pour :
    - Les infos perso
    - L'adresse perso
    - Les expériences pros
    - Le mot de passe

    On affiche également les fonctionnalités linkedin :
    - Associer / dissocier mon compte
    - Importer des expériences

    :param int id_ancien: L'id de l'ancien étudié
    :return:
    """

    is_this_me =  current_user is not None and current_user.id_ancien == id_ancien

    kwargs = { "actif" : True, "bloque" : False }
    if is_this_me or current_user.admin:
        kwargs = { "actif" : None, "bloque" : None }

    # Chargement de l'ancien
    ancien = annuaire.find_ancien_by_id(id_ancien, **kwargs)


    # Cas 1 : il n'existe pas
    if ancien is None:
        abort(404, "Il semblerait que la page n'existe pas ...")

    # cas 2 : il est bloqué
    # (donc normalement ici c'est l'utilisateur concerné qui consulte la fiche)
    elif is_this_me and ancien['bloque']:
        flash(
            "Ton compte a été désactivé par les administrateurs."
            "Nous t'invitons à les contacter pour le débloquer.",
            "danger"
        )
        return redirect(url_for("annuaire_view"))

    # Cas 3 : cas nominal !
    else:
        ancien_form = user.update_ancien_form()
        adresse_form = user.update_adresse_form()
        adresse_form.set_pays(PAYS)
        experience_forms = {}
        new_experience_form = None
        linkedin_url = None
        import_linkedin_url = None
        password_form = user.change_password_form()


        # get data by id ancien
        adresse = annuaire.find_adresse_by_id_ancien(id_ancien)
        experiences = annuaire.find_experience_by_id_ancien(id_ancien).fetchall()

        for exp in experiences:
            form = user.update_experience_form()
            form.set_pays(PAYS)
            form.load_experience(exp)
            experience_forms[exp['experience_id_experience']] = form

        # Ici on regarde si il s'agit bien de l'utilisateur
        if is_this_me:

            #~~~~~~~~~#
            # ADRESSE #
            #~~~~~~~~~#
            adresse = annuaire.find_adresse_by_id_ancien(current_user.id_ancien)
            if adresse is not None:
                adresse_form.load_adresse(adresse)

            #~~~~~~~~~~~~~#
            # INFOS PERSO #
            #~~~~~~~~~~~~~#
            ancien_form = user.update_ancien_form()
            ancien_form.load_ancien(ancien)

            #~~~~~~~~~~~~~~~~~~#
            # AJOUT EXPERIENCE #
            #~~~~~~~~~~~~~~~~~~#
            new_experience_form = user.update_experience_form()
            new_experience_form.set_pays(PAYS)


            #~~~~~~~~~~~~~~~~~~#
            # Gestion LinkedIn #
            #~~~~~~~~~~~~~~~~~~#
            # Connexion à LinkedIn
            if ancien['url_linkedin'] is None:
                linkedin_url = ("https://www.linkedin.com/uas/oauth2/authorization?"
                                    "response_type=code&"
                                    "client_id=%s&"
                                    "scope=r_basicprofile"
                                    "&state=%s"
                                    "&redirect_uri=%s" %
                                    (app.config['LINKEDIN_KEY'],
                                     #app.config['LINKEDIN_SCOPE'],
                                     generate_csrf_token(),
                                     url_for('linkedin_associer', _external=True)))

            # import des expériences pro linkeding
            import_linkedin_url = ("https://www.linkedin.com/uas/oauth2/authorization?"
                                "response_type=code&"
                                "client_id=%s&"
                                "scope=r_basicprofile"
                                "&state=%s"
                                "&redirect_uri=%s" %
                                (app.config['LINKEDIN_KEY'],
                                 #app.config['LINKEDIN_SCOPE'],
                                 generate_csrf_token(),
                                 url_for('linkedin_importer', _external=True)))

            print import_linkedin_url



        # load page
        return render_template(
            'annuaire/ancien.html',
            admin=current_user.admin,
            ancien=ancien,
            adresse=adresse,
            ancien_form=ancien_form,
            adresse_form=adresse_form,
            experiences=experiences,
            utilisateur=current_user,
            editable=is_this_me,
            experience_forms=experience_forms,
            new_experience_form = new_experience_form,
            linkedin_url = linkedin_url,
            import_linkedin_url= import_linkedin_url,
            password_form = password_form
        )