26 lines
893 B
Python
26 lines
893 B
Python
from typing import Optional
|
|
|
|
from fastapi import HTTPException, Request
|
|
from sqlalchemy.ext.asyncio import AsyncConnection
|
|
|
|
from api.db.logic.auth import get_user
|
|
from api.db.tables.account import AccountStatus
|
|
from api.schemas.endpoints.account import AllUser
|
|
from api.utils.hasher import hasher
|
|
|
|
|
|
async def get_current_user(request: Request) -> str | HTTPException:
|
|
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[AllUser]:
|
|
sql_user, sql_password = await get_user(connection, username)
|
|
|
|
if not sql_user or sql_user.status != AccountStatus.ACTIVE:
|
|
return None
|
|
if not hasher.verify_data(password, sql_password.key_value):
|
|
return None
|
|
return sql_user
|