From c1d315d6e978b0d8c4218150921256dd081b6c1c Mon Sep 17 00:00:00 2001 From: Vladislav Date: Mon, 9 Jun 2025 11:51:13 +0500 Subject: [PATCH] feat: add bearer schema and get_current_user function --- api/api/schemas/base.py | 4 ++++ api/api/services/auth.py | 11 +++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/api/api/schemas/base.py b/api/api/schemas/base.py index 5fcc034..6ca542b 100644 --- a/api/api/schemas/base.py +++ b/api/api/schemas/base.py @@ -1,7 +1,11 @@ +from fastapi.security import HTTPBearer from pydantic import BaseModel, ConfigDict from pydantic.alias_generators import to_camel +bearer_schema = HTTPBearer() # схема для авторизации в swagger + + class Base(BaseModel): model_config = ConfigDict( from_attributes=True, diff --git a/api/api/services/auth.py b/api/api/services/auth.py index e0b1b6f..761949a 100644 --- a/api/api/services/auth.py +++ b/api/api/services/auth.py @@ -1,3 +1,4 @@ +from fastapi import Request, HTTPException from typing import Optional from sqlalchemy.ext.asyncio import AsyncConnection from api.db.logic.auth import get_user @@ -9,11 +10,17 @@ from api.db.tables.account import AccountStatus from api.utils.hasher import Hasher +async def get_current_user(request: Request) -> Optional[User]: + if not hasattr(request.state, "current_user"): + return HTTPException(status_code=401, detail="Unauthorized") + return request.state.current_user + + async def authenticate_user(connection: AsyncConnection, username: str, password: str) -> Optional[User]: sql_user, sql_password = await get_user(connection, username) - if not sql_user or sql_user.status != AccountStatus.ACTIVE : - return None + if not sql_user or sql_user.status != AccountStatus.ACTIVE: + return None hasher = Hasher() if not hasher.verify_data(password, sql_password.key_value): return None