smart-line-bot / scripts /create_superuser.py
Smiel2's picture
Initial commit
2eae977 verified
Raw
History Blame Contribute Delete
2.01 kB
"""Create superuser script."""
import sys
import os
# Add project root to path
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
import argparse
import logging
from passlib.context import CryptContext
from app.core.database import SessionLocal
from app.models.user import User
from app.core.config import get_settings
settings = get_settings()
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
def create_superuser(email: str, password: str, full_name: str = None):
"""Create a superuser account."""
db = SessionLocal()
try:
# Check if user exists
existing = db.query(User).filter(User.email == email).first()
if existing:
logger.error(f"User {email} already exists")
return False
# Create superuser
hashed_password = pwd_context.hash(password)
user = User(
email=email,
hashed_password=hashed_password,
full_name=full_name or "Admin",
is_active=True,
is_superuser=True,
)
db.add(user)
db.commit()
db.refresh(user)
logger.info(f"Superuser created: {email} (ID: {user.id})")
return True
except Exception as e:
logger.error(f"Error creating superuser: {e}")
db.rollback()
return False
finally:
db.close()
def main():
parser = argparse.ArgumentParser(description="Create superuser")
parser.add_argument("--email", default=settings.FIRST_SUPERUSER, help="Admin email")
parser.add_argument(
"--password",
default=settings.FIRST_SUPERUSER_PASSWORD,
help="Admin password",
)
parser.add_argument("--name", help="Admin full name")
args = parser.parse_args()
success = create_superuser(args.email, args.password, args.name)
sys.exit(0 if success else 1)
if __name__ == "__main__":
main()