from typing import Tuple, Union import app.messages.api_responses.user_responses as response from app.db import user_db from app.models.user_model import User from app.mail.mail import send_mail from app.services.user import user_helper as helper from app.messages.mail_responses.user_email import USER_EMAIL_SUCCESSFULLY_LOGGED_OUT def logout(jwt_token, user_id, send_notif: bool) -> Tuple[Union[dict, str], int]: """ Logs out a user by invalidating the provided JWT. :param jti: JWT ID. :type jti: str :param exp: JWT expiration timestamp. :type exp: int :return: Tuple containing a dictionary and an HTTP status code. :rtype: Tuple[Union[dict, str], int] """ jti = jwt_token["jti"] exp = jwt_token["exp"] user: User = user_db.fetch_by_id(user_id) helper.invalidate_token(jti, exp) if send_notif: send_mail(USER_EMAIL_SUCCESSFULLY_LOGGED_OUT, user.email) return response.USER_LOGGED_OUT_SUCCESSFULLY