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)