def check_if_token_is_valid(decrypted_token): jti = decrypted_token['jti'] logging.debug('verifying token [%s] in redis-store' % (jti)) try: revoked_store = redis.StrictRedis(host=AppConfig.get_redis_hostname(), port=AppConfig.get_redis_port(), db=0, decode_responses=True) entry = revoked_store.get(jti) logging.debug('token found %r' % (entry)) if entry is None: return True if entry: return False return True except Exception as e: logging.error('connection redis failed with :%s' % (e))
def post(self): args = login_parser.parse_args() user = UserServiceProvider(args, ignore_username=True) user.role = user.get_role() status, service_provider = UserServiceProviderRepositories.match(user) if status: logging.debug( 'username [%s] app_key [%s] with role [%s] is now logged-in successfully' % (service_provider['username'], user.app_key, user.role)) access_token = create_access_token({ 'role': user.role, 'username': service_provider['username'], 'app_key': user.app_key }) refresh_token = create_access_token({ 'role': user.role, 'username': service_provider['username'], 'app_key': user.app_key }) access_jti = get_jti(encoded_token=access_token) refresh_jti = get_jti(encoded_token=refresh_token) try: revoked_store = redis.StrictRedis( host=AppConfig.get_redis_hostname(), port=AppConfig.get_redis_port(), db=0, decode_responses=True) revoked_store.set( access_jti, 'true', timedelta(minutes=AppConfig. get_jwt_access_token_expiry_in_mins()) * 1.2) revoked_store.set( refresh_jti, 'true', timedelta( days=AppConfig.get_jwt_refresh_token_expiry_in_days()) * 1.2) except Exception as e: logging.error( 'connection redis failed with :%s, cannot login user' % (e)) logging.error('username [%s] with role [%s] is not logged-in' % (service_provider['username'], user.role)) return API.response( STATUS_CODES.ERROR_LOGIN_FAILED_SYSTEM_ERROR, {}) res = { 'access_token': access_token, 'refresh_token': refresh_token } return API.response(STATUS_CODES.SUCCESS_USER_LOGGED_IN, res) else: logging.error('app_key [%s] with role [%s] is not logged-in' % (user.app_key, user.role)) return API.response(STATUS_CODES.ERROR_USER_LOGIN, {})