Nexus / decorators.py
ernestmindres's picture
Upload 11 files
883d8a2 verified
# decorators.py
from functools import wraps
from flask import session, redirect, url_for, flash, request, jsonify # <-- AJOUT de request, jsonify
# Import nécessaire pour le décorateur API (Importation paresseuse pour éviter les problèmes d'importation circulaire)
import auth_backend
def login_required(f):
"""
Décorateur pour les routes nécessitant une connexion (Web UI).
"""
@wraps(f)
def decorated_function(*args, **kwargs):
# Vérifie si l'ID utilisateur est dans la session
if session.get('user_id') is None:
flash("Vous devez être connecté pour accéder à cette page.", "error")
# Rediriger vers la route de connexion (qui est dans user_bp)
return redirect(url_for('user_bp.connexion'))
return f(*args, **kwargs)
return decorated_function
def api_key_required(f):
"""
Décorateur pour les routes d'API nécessitant une clé API valide.
Récupère la clé API de l'en-tête 'X-API-Key' ou du paramètre de requête 'api_key'.
Injecte les données de l'utilisateur principal (client) dans la fonction décorée.
"""
@wraps(f)
def decorated_function(*args, **kwargs):
# 1. Récupérer la clé depuis l'en-tête ou les paramètres de requête
api_key = request.headers.get('X-API-Key')
if not api_key:
api_key = request.args.get('api_key')
if not api_key:
return jsonify({
"message": "Authentification requise. Clé API manquante dans l'en-tête X-API-Key ou le paramètre api_key.",
"status": "Unauthorized"
}), 401
# 2. Valider la clé et récupérer l'utilisateur principal
# NOTE: Utilise l'import paresseux 'auth_backend.get_client_user_by_api_key'
client_user = auth_backend.get_client_user_by_api_key(api_key)
if not client_user:
return jsonify({
"message": "Clé API invalide ou non reconnue.",
"status": "Forbidden"
}), 403
# 3. Injecter les données de l'utilisateur principal (le client)
kwargs['client_user'] = client_user
return f(*args, **kwargs)
return decorated_function