from app import create_app from app import model from datetime import datetime from app.mules.mule import MuleBase class JWTCleanupMule(MuleBase): def __init__(self): app = create_app() self.jwt_exp_time = app.config.get('JWT_ACCESS_TOKEN_EXPIRES') super().__init__('JWTCleanupMule', app.logger, app.config.get('JWT_CLEANUP_MULE_SLEEP_SECS', 10)) def loop(self): oldest_allowed = datetime.utcnow() - self.jwt_exp_time self.logger.info(f'Searching for JWT access tokens revoked at or before {oldest_allowed.strftime("%Y %m %d %H:%M:%S")}...') to_remove = model.BlackListedJWT.objects(created_at__lt=oldest_allowed).all() self.logger.info(f'Found {len(to_remove)} expired JWT access tokens to remove') for idx, jwt in enumerate(to_remove): self.logger.debug(f'Removing expired JWT {idx + 1}/{len(to_remove)}') try: jwt.delete() except Exception as ex: self.logger.error(f'Failed to remove JWT (exception={str(ex)}).') if __name__ == '__main__': mule = JWTCleanupMule() mule()