From 921cbdb156db8ecb827cd4916b7af7a688a0cc05 Mon Sep 17 00:00:00 2001 From: Agzamus Date: Mon, 12 Oct 2026 17:01:18 +0300 Subject: [PATCH] =?UTF-8?q?9.3.=20=D0=9A=D0=BE=D0=BD=D1=82=D0=B5=D0=BA?= =?UTF-8?q?=D1=81=D1=82=20=D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/graphql/__init__.py | 0 app/graphql/context.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 app/graphql/__init__.py create mode 100644 app/graphql/context.py diff --git a/app/graphql/__init__.py b/app/graphql/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/graphql/context.py b/app/graphql/context.py new file mode 100644 index 0000000..3ccf352 --- /dev/null +++ b/app/graphql/context.py @@ -0,0 +1,28 @@ +from typing import Any + +from app.core.jwt import decode_token +from app.db import SessionLocal +from app.models import User + + +def get_context_value(request: Any, data: Any = None) -> dict[str, Any]: + # создать сессию SQLAlchemy (`SessionLocal()`); + db = SessionLocal() + user = None + + # извлечь заголовок `Authorization`; + authorization = request.headers.get("authorization") + if authorization and authorization.lower().startswith("bearer "): + # если токен передан и валиден – найти пользователя и положить его в контекст; + try: + payload = decode_token(authorization.split(" ", 1)[1]) + sub = payload.get("sub") + if isinstance(sub, str) and sub.isdigit(): + candidate = db.get(User, int(sub)) + if candidate is not None and candidate.is_active: + user = candidate + except ValueError: + user = None + + # вернуть словарь `{"request": ..., "db": ..., "user": ...}`. + return {"request": request, "db": db, "user": user}