Spaces:
Sleeping
Sleeping
| # 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). | |
| """ | |
| 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. | |
| """ | |
| 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 |