From b7ecca275a35ccf2a8890ea777e5a4fcefeef287 Mon Sep 17 00:00:00 2001 From: git2060 Date: Thu, 24 Sep 2026 16:13:15 +0530 Subject: [PATCH] validation and invalidation --- core/api/auth/auth_helper.py | 21 +++++++++++++++++++-- core/api/user/views.py | 14 ++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/core/api/auth/auth_helper.py b/core/api/auth/auth_helper.py index 0e29e85..3d2fc16 100644 --- a/core/api/auth/auth_helper.py +++ b/core/api/auth/auth_helper.py @@ -132,7 +132,7 @@ def verify_token(token): # logger.error(e) # return None try: - payload = auth.verify_id_token(token) + payload = auth.verify_id_token(token, check_revoked=True) except ValueError as err: raise Exception( "Unable to verify token" @@ -151,7 +151,7 @@ def verify_token(token): times = times.strip().split("<") time_ = int(times[1].split('.')[0].strip()) - int(times[0].strip()) time.sleep(time_) - return auth.verify_id_token(token)['user_id'] + return auth.verify_id_token(token, check_revoked=True)['user_id'] raise Exception( err.default_message ) from err @@ -244,3 +244,20 @@ def wrapped(*args, **kwargs): else: disconnect() return wrapped + + +def invalidate_user_tokens(user_id): + try: + auth.revoke_refresh_tokens(user_id) + + logger.info( + f"Refresh tokens revoked for user: {user_id}" + ) + + return True + + except Exception as err: + logger.error( + f"Failed to revoke tokens for user {user_id}: {err}" + ) + return False \ No newline at end of file diff --git a/core/api/user/views.py b/core/api/user/views.py index 4217f3f..7ce55de 100644 --- a/core/api/user/views.py +++ b/core/api/user/views.py @@ -5,6 +5,7 @@ import sys from . import user +from core.api.auth.auth_helper import invalidate_user_tokens from core import db from utils import decode_id from models.user_models import ( @@ -172,6 +173,7 @@ def add_app_token(current_user): def fetch_user(current_user): """ checks if uid exists """ with db.session() as sess: + schema = UserSchema(session=sess) return gen_response( 200, @@ -358,3 +360,15 @@ def fetch_reviews(current_user): current_user, sess, per_page=per_page ) return gen_response(200, reviews) + + +@user.post('/logout') +@login_required +def logout(current_user): + + invalidate_user_tokens(current_user.user_id) + + return { + 'status': 'success', + 'msg': 'User logged out' + }, 200 \ No newline at end of file