Skip to content

Commit

Permalink
Merge pull request #195 from PnX-SI/develop
Browse files Browse the repository at this point in the history
Release 2.4.0
  • Loading branch information
jacquesfize authored Jan 30, 2024
2 parents bc3bcfb + f4f270f commit 2dadf77
Show file tree
Hide file tree
Showing 35 changed files with 582 additions and 572 deletions.
13 changes: 13 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
name: Lint

on: [push, pull_request]

jobs:
backend:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Backend code formatting check (Black)
uses: psf/black@stable
5 changes: 4 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ RUN --mount=type=cache,target=/root/.cache \
pip install --upgrade pip setuptools wheel

COPY /setup.py .
COPY --chmod=755 /docker_healthcheck.sh .
COPY /requirements-common.in .
COPY /requirements-dependencies.in .
COPY /VERSION .
Expand Down Expand Up @@ -113,6 +114,8 @@ ENV PYTHONPATH=/dist/config/
ENV USERSHUB_SETTINGS=config.py
ENV USERSHUB_STATIC_FOLDER=/dist/static

COPY --chmod=755 /docker_healthcheck.sh .

EXPOSE 5001

CMD ["gunicorn", "app.app:create_app()", "--bind=0.0.0.0:5001", "--access-logfile=-", "--error-logfile=-"]
CMD ["gunicorn", "app.app:create_app()", "--bind=0.0.0.0:5001", "--access-logfile=-", "--error-logfile=-", "--reload", "--reload-extra-file=config/config.py"]
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.3.4
2.3.5.dev0
20 changes: 9 additions & 11 deletions app/api/route.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,23 @@

from app.env import db
from app.utils.utilssqlalchemy import json_resp
from app.models import (
TProfils, CorProfilForApp
)
from app.models import TProfils, CorProfilForApp


route = Blueprint('api', __name__)
route = Blueprint("api", __name__)


@route.route('/profils', methods=["GET"])
@route.route("/profils", methods=["GET"])
@json_resp
def get_profils():
'''
Return the profils
'''
"""
Return the profils
"""
params = request.args
q = db.session.query(TProfils)
if 'id_application' in params:
if "id_application" in params:
q = q.join(
CorProfilForApp, CorProfilForApp.id_profil == TProfils.id_profil
).filter(CorProfilForApp.id_application == params['id_application'])
data = [data.as_dict(columns=['id_profil', 'nom_profil']) for data in q.all()]
).filter(CorProfilForApp.id_application == params["id_application"])
data = [data.as_dict(columns=["id_profil", "nom_profil"]) for data in q.all()]
return data
83 changes: 42 additions & 41 deletions app/api/route_register.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"""
Route permettant de manipuler les données de UsersHub via une API
"""

from datetime import datetime, timedelta

import hashlib
Expand All @@ -21,11 +22,11 @@


@route.route("/role/<id_role>", methods=["GET", "POST"])
@fnauth.check_auth(1, False, "/api_register/role_check_auth_error")
@fnauth.check_auth(1)
@json_resp
def get_one_t_roles(id_role):
"""
Fonction qui retourne les données concernant un utilisateur.
Fonction qui retourne les données concernant un utilisateur.
"""
role = TRoles.get_one(id_role)

Expand All @@ -37,7 +38,7 @@ def get_one_t_roles(id_role):
@json_resp
def test_connexion():
"""
Route pour tester la connexion.
Route pour tester la connexion.
"""
return {"msg": "connexion ok"}

Expand All @@ -47,14 +48,14 @@ def test_connexion():
@json_resp
def create_temp_user():
"""
Route pour créer un compte temporaire en attendant la confirmation de
l'adresse mail.
Nous stockons :
1. Les infos qui seront utilisées par la création de compte. Dont les
mots de passe qui sont stockés cryptés.
2. Les infos permettant d'appeler l'appli source si la création du
compte est confirmée (Appel d'une URL de callaback => confirmation_url).
Route pour créer un compte temporaire en attendant la confirmation de
l'adresse mail.
Nous stockons :
1. Les infos qui seront utilisées par la création de compte. Dont les
mots de passe qui sont stockés cryptés.
2. Les infos permettant d'appeler l'appli source si la création du
compte est confirmée (Appel d'une URL de callaback => confirmation_url).
"""

# Get data from JSON
Expand Down Expand Up @@ -110,8 +111,8 @@ def create_temp_user():
@json_resp
def valid_temp_user():
"""
Route pour valider un compte temporaire et en faire un utilisateur
(requete a usershub).
Route pour valider un compte temporaire et en faire un utilisateur
(requete a usershub).
"""

data_in = request.get_json()
Expand All @@ -122,12 +123,15 @@ def valid_temp_user():
# 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": f"""
return (
{
"msg": f"""
Il n'y a pas d'utilisateur temporaire correspondant au token fourni {token}.<br>
Il se peut que la demande de création de compte ai déjà été validée, ou bien que l'adresse de validation soit erronée.<br>
"""
}, 422
},
422,
)

req_data = temp_user.as_dict()
# Récupération du groupe par défaut
Expand Down Expand Up @@ -164,9 +168,10 @@ def valid_temp_user():

def set_cor_role_token(email):
"""
Fonction pour la création d'un token associé a un id_role
Parametres : email
Fonction pour la création d'un token associé a un id_role
Parametres : email
"""

if not email:
return {"msg": "Aucun email"}, 404

Expand All @@ -193,8 +198,8 @@ def set_cor_role_token(email):

def check_token(token):
"""
fonction permettant de vérifier la présence
d'un token et qui retourne l'id_role associé
fonction permettant de vérifier la présence
d'un token et qui retourne l'id_role associé
"""
res = (
db.session.query(CorRoleToken.id_role)
Expand All @@ -212,15 +217,14 @@ def check_token(token):
@json_resp
def create_cor_role_token():
"""
route pour la creation d'un token associé a un id_role
fait un appel de la fonction set_cor_role_token(email)
parametres post : email
route pour la creation d'un token associé a un id_role
fait un appel de la fonction set_cor_role_token(email)
parametres post : email
"""

data = request.get_json()

email = data["email"]

return set_cor_role_token(email)


Expand All @@ -229,8 +233,8 @@ def create_cor_role_token():
@json_resp
def change_password():
"""
Route permettant à un utilisateur de renouveller
son mot de passe
Route permettant à un utilisateur de renouveller
son mot de passe
"""
data = request.get_json()

Expand Down Expand Up @@ -270,7 +274,7 @@ def change_password():
@json_resp
def change_application_right():
"""
Change les droits d'un utilisateur pour une application
Change les droits d'un utilisateur pour une application
"""

req_data = request.get_json()
Expand Down Expand Up @@ -338,10 +342,10 @@ def change_application_right():
@json_resp
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"
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()
Expand Down Expand Up @@ -370,7 +374,6 @@ def add_application_right_to_role():
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
Expand All @@ -388,10 +391,10 @@ def add_application_right_to_role():
@json_resp
def login_recovery():
"""
route pour changer des paramètres d'utilisateur
FIXME : Route qui ne modifie rien du tout
devrait peut être transformée pour être plus générique
et retourner les informations d'un utilisateur donné
route pour changer des paramètres d'utilisateur
FIXME : Route qui ne modifie rien du tout
devrait peut être transformée pour être plus générique
et retourner les informations d'un utilisateur donné
"""
req_data = request.get_json()

Expand Down Expand Up @@ -429,14 +432,13 @@ def login_recovery():
@json_resp
def update_user():
"""
route pour changer des paramètres d'utilisateur
route pour changer des paramètres d'utilisateur
"""
req_data = request.get_json()

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

if not id_role:

return {"msg": "Pas d'id_role"}, 400

role_data = {}
Expand All @@ -455,8 +457,8 @@ def update_user():
@json_resp
def check_token_validity():
"""
route permettant de savoir si un token est toujours valide
parametres post : token
route permettant de savoir si un token est toujours valide
parametres post : token
"""

data = request.get_json()
Expand All @@ -466,4 +468,3 @@ def check_token_validity():
return {"msg": "valid token"}, 200

return {"msg": "invalid token"}, 500

Loading

0 comments on commit 2dadf77

Please sign in to comment.