39 lines
1.1 KiB
Python
39 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
|
|
from app.users.models import Users
|
|
|
|
|
|
def get_token(request: Request):
|
|
token = request.cookies.get("black_phoenix_access_token")
|
|
if not token:
|
|
raise TokenAbsentException
|
|
return token
|
|
|
|
|
|
async def get_current_user(token: str = Depends(get_token)) -> Users:
|
|
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
|
|
|
|
|