Chatty / cleanup_anonymous.py
findEthics
Refactor anonymous chat as default homepage with stateless JWT sessions
385121f
Raw
History Blame Contribute Delete
2.98 kB
#!/usr/bin/env python3
"""
Cleanup script for anonymous session data
Runs on app startup to clear stale anonymous sessions
"""
import os
import sys
from datetime import datetime, timedelta
from pymongo import MongoClient
import logging
# Setup logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
def cleanup_anonymous_sessions():
"""Remove all anonymous session data from MongoDB"""
try:
# Get MongoDB connection from environment
mongodb_url = os.environ.get('MONGODB_URL') or os.environ.get('MONGODB_URI')
if not mongodb_url:
logger.warning("No MongoDB URL found in environment. Skipping cleanup.")
return True
# Connect to MongoDB
client = MongoClient(mongodb_url)
db_name = os.environ.get('MONGODB_DATABASE', 'Atlas')
db = client[db_name]
# Clear anonymous sessions from chat_sessions collection
# Anonymous sessions have user_id starting with 'anon_' or are older than 6 hours
if 'chat_sessions' in db.list_collection_names():
# Remove sessions with anonymous user IDs
result = db.chat_sessions.delete_many({
'$or': [
{'user_id': {'$regex': '^anon_'}},
{'session_data.anonymous': True}
]
})
logger.info(f"Removed {result.deleted_count} anonymous chat sessions")
# Clear any temporary anonymous user records if they exist
if 'users' in db.list_collection_names():
# Remove any accidentally created anonymous user records
result = db.users.delete_many({
'$or': [
{'email': {'$regex': '^anon_'}},
{'is_anonymous': True}
]
})
if result.deleted_count > 0:
logger.info(f"Removed {result.deleted_count} anonymous user records")
# Clear expired sessions (older than 24 hours)
cutoff_time = datetime.utcnow() - timedelta(hours=24)
if 'sessions' in db.list_collection_names():
result = db.sessions.delete_many({
'expiry': {'$lt': cutoff_time}
})
if result.deleted_count > 0:
logger.info(f"Removed {result.deleted_count} expired sessions")
logger.info("Anonymous session cleanup completed successfully")
return True
except Exception as e:
logger.error(f"Error during anonymous session cleanup: {e}")
# Don't fail the app startup if cleanup fails
return False
if __name__ == "__main__":
# Load environment variables if .env exists
try:
from dotenv import load_dotenv
load_dotenv()
except ImportError:
pass
success = cleanup_anonymous_sessions()
sys.exit(0 if success else 1)