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