This repository has been archived on 2023-02-21. You can view files and clone it, but cannot push or open issues or pull requests.
univnautes-old/virtualenv/pffedportal/cleanup_sessions.py

49 lines
1.5 KiB
Python
Executable File

#!/usr/bin/env python
'''
delete all django sessions:
* if pfsenseid exists in session but is not in captiveportal.db
* if session is expired
'''
# initialise django environnement for pffedportal
# note : the script must be launch into the pffedportal direcory
import os
os.environ['DJANGO_SETTINGS_MODULE'] = "settings"
import csv
import datetime
from django.conf import settings
from django.contrib.sessions.backends.file import SessionStore
# load pfsenseid list from captiveportal.db
pfsenseids = [l[5] for l in csv.reader(open('/var/db/captiveportal.db'))]
storage_path = settings.SESSION_FILE_PATH
file_prefix = settings.SESSION_COOKIE_NAME
for session_file in os.listdir(storage_path):
if not session_file.startswith(file_prefix):
continue
session_key = session_file[len(file_prefix):]
session = SessionStore(session_key)
# When an expired session is loaded, its file is removed, and a
# new file is immediately created. Prevent this by disabling
# the create() method.
session.create = lambda: None
session_data = session.load()
# pfsenseid doesn't exist in captiveportal.db
if session_data.get('pfsenseid') and session_data['pfsenseid'] not in pfsenseids:
session.delete()
continue
# expired
modification = os.stat(session._key_to_file()).st_ctime
age = datetime.datetime.now() - datetime.datetime.fromtimestamp(modification)
if age.seconds > session.get_expiry_age():
session.delete()
continue