Files
ENI-PythonAdvanced_14/src/app/graphql/context.py
2025-12-18 14:54:37 +01:00

29 lines
1.0 KiB
Python

from fastapi import Request
from typing import Any, Dict, Optional
from app.repositories import fake_db_repo
from app.models.usermodel import UserModel
async def get_context(request: Request) -> Dict[str, Any]:
"""
Crée le contexte pour chaque requête GraphQL.
C'est ici que nous gérons l'authentification (AuthN).
Nous lisons l'en-tête HTTP Authorization, validons le "token" (simulé ici),
et injectons 'current_user' dans le contexte.
"""
current_user: Optional[UserModel] = None
auth_header = request.headers.get("Authorization")
# Simulation de validation de token
if auth_header == "Bearer admin-token":
current_user = await fake_db_repo.get_user_by_id(3) # Admin
elif auth_header == "Bearer alice-token":
current_user = await fake_db_repo.get_user_by_id(1) # Alice
elif auth_header == "Bearer bob-token":
current_user = await fake_db_repo.get_user_by_id(2) # Bob
return {
"request": request,
"current_user": current_user # Injecté pour tous les resolvers
}