clean stale sessions

This commit is contained in:
2025-12-20 20:11:44 +03:00
parent 4a45b62521
commit 40219f2b54
2 changed files with 26 additions and 2 deletions

View File

@@ -1,6 +1,6 @@
from flask import Flask, session, request, render_template from flask import Flask, session, request, render_template
from dotenv import load_dotenv from dotenv import load_dotenv
from .models import Avatars, Users, PostHistory, Posts, MOTD, BadgeUploads from .models import Avatars, Users, PostHistory, Posts, MOTD, BadgeUploads, Sessions
from .auth import digest from .auth import digest
from .routes.users import is_logged_in, get_active_user, get_prefers_theme from .routes.users import is_logged_in, get_active_user, get_prefers_theme
from .constants import ( from .constants import (
@@ -138,6 +138,16 @@ def bind_default_badges(path):
'uploaded_at': int(os.path.getmtime(real_path)), 'uploaded_at': int(os.path.getmtime(real_path)),
}) })
def clear_stale_sessions():
from .db import db
with db.transaction():
now = int(time.time())
stale_sessions = Sessions.findall([
('expires_at', '<', now)
])
for sess in stale_sessions:
sess.delete()
cache = Cache() cache = Cache()
@@ -226,6 +236,8 @@ def create_app():
create_admin() create_admin()
create_deleted_user() create_deleted_user()
clear_stale_sessions()
reparse_babycode() reparse_babycode()
bind_default_badges(app.config['BADGES_PATH']) bind_default_badges(app.config['BADGES_PATH'])

View File

@@ -74,7 +74,17 @@ def validate_and_create_badge(input_image, filename):
return False return False
def is_logged_in(): def is_logged_in():
return "pyrom_session_key" in session if "pyrom_session_key" not in session:
return False
sess = Sessions.find({"key": session["pyrom_session_key"]})
if not sess:
return False
if sess.expires_at < int(time.time()):
session.clear()
sess.delete()
flash('Your session expired.;Please log in again.', InfoboxKind.INFO)
return False
return True
def get_active_user(): def get_active_user():
@@ -83,6 +93,8 @@ def get_active_user():
sess = Sessions.find({"key": session["pyrom_session_key"]}) sess = Sessions.find({"key": session["pyrom_session_key"]})
if not sess: if not sess:
return None return None
if sess.expires_at < int(time.time()):
return None
return Users.find({"id": sess.user_id}) return Users.find({"id": sess.user_id})