44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
"""
|
|
Migration script to add password reset fields to users table.
|
|
Run this once to update the database schema for password reset functionality.
|
|
"""
|
|
|
|
from database import engine
|
|
from sqlalchemy import text
|
|
|
|
def add_password_reset_columns():
|
|
"""Add password reset token, expiration, and force change columns to users table"""
|
|
|
|
migrations = [
|
|
# Password reset token (secure random string)
|
|
"ALTER TABLE users ADD COLUMN IF NOT EXISTS password_reset_token VARCHAR",
|
|
|
|
# Password reset expiration (1 hour from token creation)
|
|
"ALTER TABLE users ADD COLUMN IF NOT EXISTS password_reset_expires TIMESTAMP",
|
|
|
|
# Force password change on next login (for admin resets)
|
|
"ALTER TABLE users ADD COLUMN IF NOT EXISTS force_password_change BOOLEAN NOT NULL DEFAULT FALSE"
|
|
]
|
|
|
|
try:
|
|
print("Adding password reset columns to users table...")
|
|
with engine.connect() as conn:
|
|
for sql in migrations:
|
|
print(f" Executing: {sql[:70]}...")
|
|
conn.execute(text(sql))
|
|
conn.commit()
|
|
|
|
print("\n✅ Migration completed successfully!")
|
|
print("\nAdded columns:")
|
|
print(" - password_reset_token (VARCHAR)")
|
|
print(" - password_reset_expires (TIMESTAMP)")
|
|
print(" - force_password_change (BOOLEAN, default=FALSE)")
|
|
print("\nYou can now run password reset functionality.")
|
|
|
|
except Exception as e:
|
|
print(f"\n❌ Migration failed: {e}")
|
|
raise
|
|
|
|
if __name__ == "__main__":
|
|
add_password_reset_columns()
|