feat: add bearer schema and get_current_user function
This commit is contained in:
parent
a31758192d
commit
c1d315d6e9
@ -1,7 +1,11 @@
|
|||||||
|
from fastapi.security import HTTPBearer
|
||||||
from pydantic import BaseModel, ConfigDict
|
from pydantic import BaseModel, ConfigDict
|
||||||
from pydantic.alias_generators import to_camel
|
from pydantic.alias_generators import to_camel
|
||||||
|
|
||||||
|
|
||||||
|
bearer_schema = HTTPBearer() # схема для авторизации в swagger
|
||||||
|
|
||||||
|
|
||||||
class Base(BaseModel):
|
class Base(BaseModel):
|
||||||
model_config = ConfigDict(
|
model_config = ConfigDict(
|
||||||
from_attributes=True,
|
from_attributes=True,
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
from fastapi import Request, HTTPException
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
from sqlalchemy.ext.asyncio import AsyncConnection
|
from sqlalchemy.ext.asyncio import AsyncConnection
|
||||||
from api.db.logic.auth import get_user
|
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
|
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]:
|
async def authenticate_user(connection: AsyncConnection, username: str, password: str) -> Optional[User]:
|
||||||
sql_user, sql_password = await get_user(connection, username)
|
sql_user, sql_password = await get_user(connection, username)
|
||||||
|
|
||||||
if not sql_user or sql_user.status != AccountStatus.ACTIVE :
|
if not sql_user or sql_user.status != AccountStatus.ACTIVE:
|
||||||
return None
|
return None
|
||||||
hasher = Hasher()
|
hasher = Hasher()
|
||||||
if not hasher.verify_data(password, sql_password.key_value):
|
if not hasher.verify_data(password, sql_password.key_value):
|
||||||
return None
|
return None
|
||||||
|
Loading…
Reference in New Issue
Block a user