Ejemplo n.º 1
0
def change_application_right():
    """
        Change les droits d'un utilisateur pour une application
    """

    req_data = request.get_json()

    id_application = req_data.get("id_application", None)

    # Test assurant une rétrocompatibilité (à l'époque des niveaux de droits)
    if req_data.get("id_droit", None):
        code_profil = req_data.get("id_droit", None)
    else:
        code_profil = req_data.get("id_profil", None)

    # Récupération de l'identifiant du profil à partir de son code
    profil = TProfils.get_profil_in_app_with_code(id_application,
                                                  str(code_profil))
    if not profil:
        return (
            {
                "msg":
                "pas de profil " + str(code_profil) +
                "corespondant pour l'application"  # noqa
            },
            500,
        )

    id_profil = profil.id_profil

    id_role = req_data.get("id_role", None)

    role = db.session.query(TRoles).filter(TRoles.id_role == id_role).first()

    if not id_application or not id_role or not code_profil:
        return {"msg": "Problème de paramètres POST"}, 400

    cor = (db.session.query(CorRoleAppProfil).filter(
        id_role == CorRoleAppProfil.id_role).filter(
            id_application == CorRoleAppProfil.id_application).first())

    if not cor:
        cor = CorRoleAppProfil(
            **{
                "id_role": id_role,
                "id_application": id_application,
                "id_profil": id_profil,
            })
    else:
        cor.id_profil = id_profil

    db.session.commit()

    return {
        "id_role": id_role,
        "id_profil": code_profil,
        "id_droit": code_profil,  # Retrocompatiblité pour l'OEASC
        "id_application": id_application,
        "role": role.as_dict(),
    }
Ejemplo n.º 2
0
def delete_cor_role_app_profil(id_role, id_application):
    try:
        CorRoleAppProfil.delete(id_role, id_application)
    except Exception:
        flash("Une erreur s'est produite", "error")
    flash("Profil supprimé avec succès")
    return redirect(
        url_for("application.profils_in_app", id_application=id_application))
Ejemplo n.º 3
0
def add_or_update_profil_for_role_in_app(id_application, id_role=None):
    """
        add or update un profil sur une application
        on part du principe qu'un role ne peut avoir qu'un profil dans une application
        TODO: pour mettre plusieurs profil a un role dans une appli: 
        rajouter une clé primaire a cor_role_app_profil pour gérer l'update
    """
    form = t_applicationsforms.AppProfil(id_application)
    application = TApplications.get_one(id_application)
    role = None
    title = "Ajouter un profil l'application {}".format(
        application["nom_application"])
    if id_role:
        role = TRoles.get_one(id_role, as_model=True).as_dict_full_name()
        title = "Editer le profil de {} dans l'application {}".format(
            role["full_name"], application["nom_application"])
        # preremplissage du formulaire
        profil_in_app = CorRoleAppProfil.get_one(id_role, id_application)
        form.profil.process_data(profil_in_app.id_profil)
        form.role.process_data(str(id_role))
        # HACK ajout de l'utilisateur courant dans la liste déroulante
        # sinon le formulaire ne passe pas
        form.role.choices.append((id_role, role["full_name"]))

    if request.method == "POST":
        # set new id__profil
        form.profil.process_data(request.form["profil"])
        if form.validate() and form.validate_on_submit():
            try:
                if id_role:
                    # on supprime d'abbord le profil pour une app
                    CorRoleAppProfil.delete(id_role=id_role,
                                            id_application=id_application)
                # et on post
                CorRoleAppProfil.post({
                    "id_role": form.data["role"],
                    "id_profil": form.data["profil"],
                    "id_application": id_application,
                })
            except Exception as e:
                redirect(
                    url_for(
                        "application.add_or_update_profil_for_role_in_app",
                        id_application=id_application,
                    ))
                flash("Une erreur s'est produite, {}".format(e), "error")
            flash("Profil ajouté/edité avec succès")
            return redirect(
                url_for("application.profils_in_app",
                        id_application=id_application))

    return render_template(
        "application_role_profil_form.html",
        title=title,
        form=form,
        application=application,
        id_role=id_role,
    )
Ejemplo n.º 4
0
def valid_temp_user():
    """
        route pour valider un compte temporaire
        et en faire un utilisateur (requete a usershub)
    """

    data_in = request.get_json()

    token = data_in["token"]
    id_application = data_in["id_application"]

    # recherche de l'utilisateur temporaire correspondant au token
    temp_user = db.session.query(TempUser).filter(
        token == TempUser.token_role).first()
    if not temp_user:
        return {
            "msg": "pas d'utilisateur trouvé avec le token user demandé"
        }, 422

    req_data = temp_user.as_dict()
    # Récupération du groupe par défaut
    id_grp = CorRoleAppProfil.get_default_for_app(id_application)
    if not id_grp:
        return {"msg": "pas de groupe par défaut pour l'application"}, 500

    # set password correctly
    req_data["pass_plus"] = req_data["password"]
    req_data["pass"] = req_data["pass_md5"]
    role_data = {"active": True}
    for att in req_data:
        if hasattr(TRoles, att):
            # Patch pas beau pour corriger le db.Unicode de TRole pour id_organisme
            if att == "id_organisme" and req_data[att] == "None":
                role_data[att] = None
            else:
                role_data[att] = req_data[att]

    role = TRoles(**role_data)

    db.session.add(role)
    db.session.commit()

    # Ajout du role au profil
    cor = CorRoles(id_role_groupe=id_grp.id_role,
                   id_role_utilisateur=role.id_role)
    db.session.add(cor)

    db.session.delete(temp_user)
    db.session.commit()

    return role.as_dict(recursif=True)
Ejemplo n.º 5
0
def add_application_right_to_role():
    """
        Route permettant de d'ajouter des droits
        pour une application a un utilisateur
        soit en l'associant à un groupe
        soit en lui affectant le profil "1"
    """

    req_data = request.get_json()

    identifiant = req_data.get("login", None)
    pwd = req_data.get("password", None)

    id_application = req_data.get("id_application", None)

    if not identifiant or not pwd or not id_application:
        return {"msg": "les parametres sont mal renseignés"}, 500

    # Récupération du groupe par défaut
    id_grp = CorRoleAppProfil.get_default_for_app(id_application)
    if not id_grp:
        return {"msg": "pas de groupe par défaut pour l'application"}, 500

    role = db.session.query(TRoles).filter(
        TRoles.identifiant == identifiant).first()

    if not role:
        return {
            "msg": "pas d'user pour l'identifiant " + str(identifiant)
        }, 500

    id_role = role.id_role

    # check pwd
    pwd_hash = hashlib.md5(pwd.encode("utf-8")).hexdigest()

    if not role.pass_md5 == pwd_hash:

        return {"msg": "password false"}, 500

    # Test si l'utilisateur n'est pas déjà associé au groupe
    # par défaut
    if not CorRoles.test_role_in_grp(id_role, id_grp.id_role):
        cor = CorRoles(id_role_groupe=id_grp.id_role,
                       id_role_utilisateur=role.id_role)
        db.session.add(cor)
        db.session.commit()

    return role.as_dict(recursif=True)
Ejemplo n.º 6
0
def insert_one_t_role():
    '''
        Route permettant de créer un utilisateur

        curl --header "Content-Type: application/json" \
        --request POST \
        --data '{"email": "*****@*****.**", "groupe": false, "pn": true, "remarques": "utilisateur test api", "desc_role": null, "prenom_role": "test", "identifiant": "test_api", "id_unite": -1, "id_organisme": -1, "uuid_role": "c8f63c2d-e606-49c5-8865-edb0953c496f", "nom_role": "API", "password": "******", "password_confirmation": "123456", "applications":[{"id_app":2, "id_droit":1}]}' \
        http://localhost:5001/api_register/role
    '''
    req_data = request.get_json()

    role_data = {}
    for att in req_data:
        if hasattr(TRoles, att):
            role_data[att] = req_data[att]

    # Validation email
    if re.search("[@.]", req_data['email']) is None:
        return "email not valid", 500

    role = TRoles(**role_data)

    if req_data['password']:
        role.fill_password(req_data['password'],
                           req_data['password_confirmation'])

    db.session.add(role)
    db.session.commit()

    for app in req_data['applications']:
        cor = CorRoleAppProfil(id_role=role.id_role,
                               id_profil=app['id_profil'],
                               id_application=app['id_app'])
        db.session.add(cor)
        db.session.commit()

    return role.as_dict(recursif=True)