/
ivanstrike
/
tasker
Обзор
Документация
Войти
/
ivanstrike
/
tasker
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
python_Sklyarenko/Lab2/app/security.py
38 строк
2 KB
ivanstrike
Lab3
13 дек 2025, 11:15
13 дек 2025, 11:15
15c0fa5
Код
Авторство
О чём код?
import os import time from datetime import datetime, timedelta from typing import Optional, Dict import jwt from fastapi import Depends, HTTPException, status, Header from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials JWT_SECRET = os.getenv("JWT_SECRET", "dev-secret-123") JWT_ALGORITHM = os.getenv("JWT_ALGORITHM", "HS256") ACCESS_TOKEN_EXPIRE_MINUTES = int(os.getenv("ACCESS_TOKEN_EXPIRE_MINUTES", "120")) API_KEY = os.getenv("API_KEY", "public-api-key-123") INTERNAL_API_KEY = os.getenv("INTERNAL_API_KEY", "internal-secret-key-321") bearer_scheme = HTTPBearer(auto_error=False) def create_access_token(sub: str) -> str: expire = datetime.utcnow() + timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES) payload = {"sub": sub, "exp": expire} return jwt.encode(payload, JWT_SECRET, algorithm=JWT_ALGORITHM) def get_current_user(credentials: Optional[HTTPAuthorizationCredentials] = Depends(bearer_scheme)) -> Optional[str]: if not credentials: return None token = credentials.credentials try: payload = jwt.decode(token, JWT_SECRET, algorithms=[JWT_ALGORITHM]) return payload.get("sub") except Exception: return None def verify_api_key(x_api_key: Optional[str] = Header(default=None, alias="X-API-Key")) -> bool: return x_api_key == API_KEY def verify_internal_key(x_internal_key: Optional[str] = Header(default=None, alias="X-Internal-Key")) -> None: if x_internal_key != INTERNAL_API_KEY: raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid internal key")