#!/usr/bin/env python3 """ Create Superadmin User Script Directly creates a superadmin user in the database for LOAF membership platform """ import sys import os from getpass import getpass # Add the backend directory to path for imports sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) def main(): print("=" * 70) print("LOAF Membership Platform - Superadmin User Creator") print("=" * 70) print() # Check for DATABASE_URL from dotenv import load_dotenv load_dotenv() database_url = os.getenv("DATABASE_URL") if not database_url: print("❌ DATABASE_URL not found in environment or .env file") sys.exit(1) # Get user input email = input("Email address: ").strip() if not email or '@' not in email: print("❌ Invalid email address") sys.exit(1) first_name = input("First name: ").strip() if not first_name: print("❌ First name is required") sys.exit(1) last_name = input("Last name: ").strip() if not last_name: print("❌ Last name is required") sys.exit(1) # Get password securely password = getpass("Password: ") if len(password) < 8: print("❌ Password must be at least 8 characters") sys.exit(1) password_confirm = getpass("Confirm password: ") if password != password_confirm: print("❌ Passwords do not match") sys.exit(1) print() print("Creating superadmin user...") try: # Import database dependencies from sqlalchemy import create_engine, text from passlib.context import CryptContext # Create password hash pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") password_hash = pwd_context.hash(password) # Connect to database engine = create_engine(database_url) with engine.connect() as conn: # Check if user already exists result = conn.execute( text("SELECT id FROM users WHERE email = :email"), {"email": email} ) if result.fetchone(): print(f"❌ User with email '{email}' already exists") sys.exit(1) # Insert superadmin user conn.execute( text(""" INSERT INTO users ( id, email, password_hash, first_name, last_name, phone, address, city, state, zipcode, date_of_birth, status, role, email_verified, newsletter_subscribed, accepts_tos, created_at, updated_at ) VALUES ( gen_random_uuid(), :email, :password_hash, :first_name, :last_name, '', '', '', '', '', '1990-01-01', 'active', 'superadmin', true, false, true, NOW(), NOW() ) """), { "email": email, "password_hash": password_hash, "first_name": first_name, "last_name": last_name } ) conn.commit() print() print("=" * 70) print("✅ Superadmin user created successfully!") print("=" * 70) print() print(f" Email: {email}") print(f" Name: {first_name} {last_name}") print(f" Role: superadmin") print(f" Status: active") print() print("You can now log in with these credentials.") print("=" * 70) except ImportError as e: print(f"❌ Missing dependency: {e}") print(" Run: pip install sqlalchemy psycopg2-binary passlib python-dotenv") sys.exit(1) except Exception as e: print(f"❌ Database error: {e}") sys.exit(1) if __name__ == "__main__": try: main() except KeyboardInterrupt: print("\n\n❌ Cancelled by user") sys.exit(1)