32 lines
977 B
Python
32 lines
977 B
Python
|
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
|