chat_back/app/users/dependencies.py

36 lines
1.1 KiB
Python

from datetime import datetime
from fastapi import Depends, Request
from jose import JWTError, jwt
from app.config import settings
from app.exceptions import (IncorrectTokenFormatException,
TokenAbsentException, TokenExpiredException,
UserIsNotPresentException)
from app.users.dao import UserDAO
def get_token(request: Request):
token = request.cookies.get("booking_access_token")
if not token:
raise TokenAbsentException
return token
async def get_current_user(token: str = Depends(get_token)):
try:
payload = jwt.decode(
token, settings.SECRET_KEY, settings.ALGORITHM
)
except JWTError:
raise IncorrectTokenFormatException
expire: str = payload.get("exp")
if not expire or int(expire) < datetime.utcnow().timestamp():
raise TokenExpiredException
user_id: str = payload.get("sub")
if not user_id:
raise UserIsNotPresentException
user = await UserDAO.find_one_or_none(id=int(user_id))
if not user:
raise UserIsNotPresentException
return user