Update authentication system, database models, and UI components
This commit is contained in:
221
execute_db_cleanup.py
Normal file
221
execute_db_cleanup.py
Normal file
@ -0,0 +1,221 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Execute Database Legacy Data Cleanup
|
||||
Fixes issues identified in the database analysis using direct SQL execution
|
||||
"""
|
||||
|
||||
import sys
|
||||
from sqlmodel import Session, text
|
||||
from database import engine
|
||||
|
||||
def execute_step(session, step_name, query, description):
|
||||
"""Execute a cleanup step and report results"""
|
||||
print(f"\n=== {step_name} ===")
|
||||
print(f"Description: {description}")
|
||||
print(f"Query: {query}")
|
||||
|
||||
try:
|
||||
result = session.exec(text(query))
|
||||
if query.strip().upper().startswith('SELECT'):
|
||||
rows = result.fetchall()
|
||||
print(f"Result: {len(rows)} rows")
|
||||
for row in rows:
|
||||
print(f" {row}")
|
||||
else:
|
||||
session.commit()
|
||||
print(f"✅ Success: {result.rowcount} rows affected")
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f"❌ Error: {e}")
|
||||
session.rollback()
|
||||
return False
|
||||
|
||||
def main():
|
||||
"""Execute database cleanup step by step"""
|
||||
print("=== DATABASE LEGACY DATA CLEANUP ===")
|
||||
|
||||
with Session(engine) as session:
|
||||
success_count = 0
|
||||
total_steps = 0
|
||||
|
||||
# Step 1: Fix User Table - Update username to match email format
|
||||
total_steps += 1
|
||||
if execute_step(
|
||||
session,
|
||||
"STEP 1: Fix User Table",
|
||||
"""UPDATE "user"
|
||||
SET username = email,
|
||||
display_name = CASE
|
||||
WHEN display_name = '' OR display_name IS NULL
|
||||
THEN split_part(email, '@', 1)
|
||||
ELSE display_name
|
||||
END
|
||||
WHERE email = 'oib@chello.at'""",
|
||||
"Update username to match email format and set display_name"
|
||||
):
|
||||
success_count += 1
|
||||
|
||||
# Verify Step 1
|
||||
execute_step(
|
||||
session,
|
||||
"VERIFY STEP 1",
|
||||
"""SELECT email, username, display_name, confirmed
|
||||
FROM "user" WHERE email = 'oib@chello.at'""",
|
||||
"Verify user table fix"
|
||||
)
|
||||
|
||||
# Step 2: Clean Up Expired Sessions
|
||||
total_steps += 1
|
||||
if execute_step(
|
||||
session,
|
||||
"STEP 2: Mark Expired Sessions Inactive",
|
||||
"""UPDATE dbsession
|
||||
SET is_active = false
|
||||
WHERE expires_at < NOW() AND is_active = true""",
|
||||
"Mark expired sessions as inactive for security"
|
||||
):
|
||||
success_count += 1
|
||||
|
||||
# Verify Step 2
|
||||
execute_step(
|
||||
session,
|
||||
"VERIFY STEP 2",
|
||||
"""SELECT COUNT(*) as expired_active_sessions
|
||||
FROM dbsession
|
||||
WHERE expires_at < NOW() AND is_active = true""",
|
||||
"Check for remaining expired active sessions"
|
||||
)
|
||||
|
||||
# Step 3: Update Session user_id to Email Format
|
||||
total_steps += 1
|
||||
if execute_step(
|
||||
session,
|
||||
"STEP 3: Update Session user_id",
|
||||
"""UPDATE dbsession
|
||||
SET user_id = 'oib@chello.at'
|
||||
WHERE user_id = 'oibchello'""",
|
||||
"Update session user_id to use email format"
|
||||
):
|
||||
success_count += 1
|
||||
|
||||
# Verify Step 3
|
||||
execute_step(
|
||||
session,
|
||||
"VERIFY STEP 3",
|
||||
"""SELECT DISTINCT user_id FROM dbsession""",
|
||||
"Check session user_id values"
|
||||
)
|
||||
|
||||
# Step 4: Fix PublicStream Username Fields
|
||||
total_steps += 1
|
||||
if execute_step(
|
||||
session,
|
||||
"STEP 4: Fix PublicStream",
|
||||
"""UPDATE publicstream
|
||||
SET username = uid,
|
||||
display_name = CASE
|
||||
WHEN display_name = 'oibchello'
|
||||
THEN split_part(uid, '@', 1)
|
||||
ELSE display_name
|
||||
END
|
||||
WHERE uid = 'oib@chello.at'""",
|
||||
"Update PublicStream username to match UID"
|
||||
):
|
||||
success_count += 1
|
||||
|
||||
# Verify Step 4
|
||||
execute_step(
|
||||
session,
|
||||
"VERIFY STEP 4",
|
||||
"""SELECT uid, username, display_name
|
||||
FROM publicstream WHERE uid = 'oib@chello.at'""",
|
||||
"Verify PublicStream fix"
|
||||
)
|
||||
|
||||
# Step 5: Remove Orphaned Records
|
||||
total_steps += 1
|
||||
orphan_success = True
|
||||
|
||||
# Remove orphaned quota record
|
||||
if not execute_step(
|
||||
session,
|
||||
"STEP 5a: Remove Orphaned Quota",
|
||||
"""DELETE FROM userquota WHERE uid = 'oib@bubuit.net'""",
|
||||
"Remove orphaned quota record for deleted user"
|
||||
):
|
||||
orphan_success = False
|
||||
|
||||
# Remove orphaned stream record
|
||||
if not execute_step(
|
||||
session,
|
||||
"STEP 5b: Remove Orphaned Stream",
|
||||
"""DELETE FROM publicstream WHERE uid = 'oib@bubuit.net'""",
|
||||
"Remove orphaned stream record for deleted user"
|
||||
):
|
||||
orphan_success = False
|
||||
|
||||
if orphan_success:
|
||||
success_count += 1
|
||||
|
||||
# Verify Step 5
|
||||
execute_step(
|
||||
session,
|
||||
"VERIFY STEP 5",
|
||||
"""SELECT 'userquota' as table_name, COUNT(*) as count
|
||||
FROM userquota WHERE uid = 'oib@bubuit.net'
|
||||
UNION ALL
|
||||
SELECT 'publicstream' as table_name, COUNT(*) as count
|
||||
FROM publicstream WHERE uid = 'oib@bubuit.net'""",
|
||||
"Verify orphaned records are removed"
|
||||
)
|
||||
|
||||
# Final Verification
|
||||
print(f"\n=== FINAL VERIFICATION ===")
|
||||
|
||||
# Check for remaining issues
|
||||
execute_step(
|
||||
session,
|
||||
"FINAL CHECK",
|
||||
"""SELECT 'ISSUE: User email/username mismatch' as issue
|
||||
FROM "user"
|
||||
WHERE email != username
|
||||
UNION ALL
|
||||
SELECT 'ISSUE: Expired active sessions'
|
||||
FROM dbsession
|
||||
WHERE expires_at < NOW() AND is_active = true
|
||||
LIMIT 1
|
||||
UNION ALL
|
||||
SELECT 'ISSUE: PublicStream UID/username mismatch'
|
||||
FROM publicstream
|
||||
WHERE uid != username
|
||||
LIMIT 1
|
||||
UNION ALL
|
||||
SELECT 'ISSUE: Orphaned quota records'
|
||||
FROM userquota q
|
||||
LEFT JOIN "user" u ON q.uid = u.email
|
||||
WHERE u.email IS NULL
|
||||
LIMIT 1
|
||||
UNION ALL
|
||||
SELECT 'ISSUE: Orphaned stream records'
|
||||
FROM publicstream p
|
||||
LEFT JOIN "user" u ON p.uid = u.email
|
||||
WHERE u.email IS NULL
|
||||
LIMIT 1""",
|
||||
"Check for any remaining legacy issues"
|
||||
)
|
||||
|
||||
# Summary
|
||||
print(f"\n=== CLEANUP SUMMARY ===")
|
||||
print(f"Total steps: {total_steps}")
|
||||
print(f"Successful steps: {success_count}")
|
||||
print(f"Failed steps: {total_steps - success_count}")
|
||||
|
||||
if success_count == total_steps:
|
||||
print("✅ All legacy database issues have been fixed!")
|
||||
else:
|
||||
print("⚠️ Some issues remain. Check the output above for details.")
|
||||
|
||||
return 0 if success_count == total_steps else 1
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
Reference in New Issue
Block a user