29 lines
1.1 KiB
Python
29 lines
1.1 KiB
Python
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()
|