Spaces:
Sleeping
Sleeping
File size: 1,895 Bytes
53ed279 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
import sys
import os
import bcrypt
import uuid
from datetime import datetime
# Add root to sys.path
sys.path.append(os.getcwd())
from app.models.database import SessionLocal
from app.models.orm import AdminUserModel
def hash_password(password: str) -> str:
"""Hash a password using bcrypt"""
return bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt()).decode('utf-8')
def create_admin(username, email, password):
db = SessionLocal()
try:
# Check if exists
existing = db.query(AdminUserModel).filter(
(AdminUserModel.username == username) | (AdminUserModel.email == email)
).first()
if existing:
print(f"Error: Admin with username '{username}' or email '{email}' already exists.")
return
admin_id = str(uuid.uuid4())
admin_user = AdminUserModel(
id=admin_id,
username=username,
email=email,
hashed_password=hash_password(password),
role="admin",
created_at=datetime.utcnow(),
is_active=True
)
db.add(admin_user)
db.commit()
print(f"Successfully created admin user: {username}")
print(f"Admin ID: {admin_id}")
except Exception as e:
print(f"An error occurred: {e}")
db.rollback()
finally:
db.close()
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser(description="Create initial admin user")
parser.add_argument("--username", required=True, help="Admin username")
parser.add_argument("--email", required=True, help="Admin email")
parser.add_argument("--password", required=True, help="Admin password")
args = parser.parse_args()
create_admin(args.username, args.email, args.password)
|