forked from ScoDoc/ScoDoc
API: user_info via cas_id
This commit is contained in:
parent
eef00649de
commit
695024cce2
@ -9,15 +9,15 @@
|
||||
from flask_login import current_user
|
||||
from sqlalchemy import desc, or_
|
||||
|
||||
from app import models
|
||||
from app.models import Departement, Identite, Admission
|
||||
from app.auth.models import User
|
||||
from app.scodoc.sco_exceptions import ScoValueError
|
||||
from app.scodoc.sco_permissions import Permission
|
||||
|
||||
|
||||
def get_etud(
|
||||
etudid: int | None = None, nip: str | None = None, ine: str | None = None
|
||||
) -> models.Identite | None:
|
||||
) -> Identite | None:
|
||||
"""
|
||||
L'instance d'étudiant la plus récente en fonction de l'etudid,
|
||||
ou du code nip ou code ine.
|
||||
@ -53,3 +53,33 @@ def get_etud(
|
||||
if etud is None:
|
||||
etud = query.first()
|
||||
return etud
|
||||
|
||||
|
||||
def get_user(uid: int | None = None, casid: str | None = None) -> User | None:
|
||||
"""
|
||||
L'instance d'utilisateur en fonction de l'uid ou de l'id cas.
|
||||
|
||||
uid : None ou un int uid
|
||||
casid : None ou un str casid
|
||||
|
||||
Return None si utilisateur inexistant.
|
||||
"""
|
||||
allowed_depts = current_user.get_depts_with_permission(Permission.UsersView)
|
||||
|
||||
if uid is not None:
|
||||
try:
|
||||
uid = int(uid)
|
||||
except ValueError as exc:
|
||||
raise ScoValueError("uid invalide") from exc
|
||||
query: User = User.query.filter_by(id=uid)
|
||||
elif casid is not None:
|
||||
query = User.query.filter_by(cas_id=casid)
|
||||
else:
|
||||
raise ScoValueError("parametre manquant")
|
||||
|
||||
if None not in allowed_depts:
|
||||
# restreint aux départements autorisés:
|
||||
query = query.join(Departement).filter(
|
||||
or_(Departement.acronym == acronym for acronym in allowed_depts)
|
||||
)
|
||||
return query.first()
|
||||
|
@ -17,7 +17,7 @@ from flask_json import as_json
|
||||
from flask_login import current_user, login_required
|
||||
|
||||
from app import db, log
|
||||
from app.api import api_bp as bp, api_web_bp, API_CLIENT_ERROR
|
||||
from app.api import api_bp as bp, api_web_bp, API_CLIENT_ERROR, tools
|
||||
from app.api import api_permission_required as permission_required
|
||||
from app.auth.models import User, Role, UserRole
|
||||
from app.auth.models import is_valid_password
|
||||
@ -34,13 +34,10 @@ from app.scodoc.sco_utils import json_error
|
||||
@scodoc
|
||||
@permission_required(Permission.UsersView)
|
||||
@as_json
|
||||
def user_info(uid: int):
|
||||
def user_info_deprecated(uid: int):
|
||||
"""
|
||||
Info sur un compte utilisateur ScoDoc.
|
||||
|
||||
SAMPLES
|
||||
-------
|
||||
/user/2
|
||||
Déprécié, utiliser /user/uid/<int:uid> à la place.
|
||||
"""
|
||||
user: User = db.session.get(User, uid)
|
||||
if user is None:
|
||||
@ -53,6 +50,39 @@ def user_info(uid: int):
|
||||
return user.to_dict()
|
||||
|
||||
|
||||
@bp.route("/user/uid/<int:uid>")
|
||||
@bp.route("/user/casid/<string:casid>")
|
||||
@api_web_bp.route("/user/uid/<int:uid>")
|
||||
@api_web_bp.route("/user/casid/<string:casid>")
|
||||
@login_required
|
||||
@scodoc
|
||||
@permission_required(Permission.UsersView)
|
||||
@as_json
|
||||
def user_info(uid: int = None, casid: str = None):
|
||||
"""
|
||||
Retourne les informations de l'utilisateur correspondant, ou 404 si non trouvé.
|
||||
|
||||
PARAMS
|
||||
------
|
||||
uid : l'id de l'utilisateur
|
||||
casid : l'identifiant CAS de l'utilisateur
|
||||
|
||||
`uid` et `casid` sont uniques dans la base (tous départements).
|
||||
|
||||
SAMPLES
|
||||
-------
|
||||
/user/uid/2
|
||||
"""
|
||||
user = tools.get_user(uid, casid)
|
||||
|
||||
if user is None:
|
||||
return json_error(
|
||||
404,
|
||||
message="utilisateur inconnu",
|
||||
)
|
||||
return user.to_dict()
|
||||
|
||||
|
||||
@bp.route("/users/query")
|
||||
@api_web_bp.route("/users/query")
|
||||
@login_required
|
||||
|
Loading…
x
Reference in New Issue
Block a user