chat_back/chat_test/app/users/dependencies.py

49 lines
1.6 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, UserDontHavePermissionException)
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)):
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
async def get_user_allowed_chats(user_id: int):
user_allowed_chats = await UserDAO.get_user_allowed_chats(user_id)
return user_allowed_chats
async def validate_user_access_to_chat(user_id: int, chat_id: int):
user_allowed_chats = await get_user_allowed_chats(user_id=user_id)
if not chat_id in user_allowed_chats:
raise UserDontHavePermissionException
return True