/
ivanstrike
/
tasker
Обзор
Документация
Войти
/
ivanstrike
/
tasker
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
python_Sklyarenko/Lab1/app/deps.py
42 строки
2 KB
ivanstrike
Lab3
13 дек 2025, 11:15
13 дек 2025, 11:15
15c0fa5
Код
Авторство
О чём код?
from fastapi import Depends, HTTPException, status, Request from sqlalchemy.orm import Session import jwt, os from .database import get_db from .models import User JWT_SECRET = os.getenv("JWT_SECRET", "change_me_in_production") JWT_ALGORITHM = os.getenv("JWT_ALGORITHM", "HS256") def get_current_user(request: Request, db: Session = Depends(get_db)) -> User: auth = request.headers.get("Authorization") if not auth or not auth.lower().startswith("bearer "): raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Not authenticated", headers={"WWW-Authenticate": "Bearer"}, ) token = auth.split()[1] try: payload = jwt.decode(token, JWT_SECRET, algorithms=[JWT_ALGORITHM]) user_id = int(payload.get("sub")) except Exception: raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid token") user = db.get(User, user_id) if not user: raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="User not found") return user API_KEY = os.getenv("API_KEY", None) def verify_api_key(request: Request): """ Optional API-key based access. If API_KEY is set, require X-API-Key to match for unauthenticated requests (e.g., service-to-service or read-only). """ if API_KEY is None: return None key = request.headers.get("X-API-Key") if key != API_KEY: raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid API key") return True