File size: 3,607 Bytes
8275526
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#!/usr/bin/env python3
"""
Script khởi tạo admin mặc định cho hệ thống Nutribot
Chạy script này để tạo tài khoản admin đầu tiên
"""

import os
import sys
import logging

# Thêm thư mục cha vào sys.path
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from models.user_model import User

# Cấu hình logging
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)

def create_default_admin():
    """Tạo admin mặc định"""
    try:
        print("=" * 50)
        print("KHỞI TẠO ADMIN NUTRIBOT")
        print("=" * 50)
        
        # Kiểm tra xem đã có admin chưa
        from models.user_model import get_db
        db = get_db()
        existing_admin = db.users.find_one({"role": "admin"})
        
        if existing_admin:
            print("❌ Đã có admin trong hệ thống!")
            print(f"Admin hiện tại: {existing_admin.get('name')} ({existing_admin.get('email')})")
            
            choice = input("\nBạn có muốn tạo admin mới không? (y/N): ").lower().strip()
            if choice != 'y':
                print("Hủy bỏ tạo admin.")
                return
        
        # Nhập thông tin admin
        print("\nNhập thông tin cho admin mới:")
        
        name = input("Họ tên: ").strip()
        if not name:
            name = "Administrator"
            print(f"Sử dụng tên mặc định: {name}")
        
        email = input("Email: ").strip()
        if not email:
            email = "admin@nutribot.com"
            print(f"Sử dụng email mặc định: {email}")
        
        # Kiểm tra email đã tồn tại
        if User.find_by_email(email):
            print(f"❌ Email {email} đã được sử dụng!")
            return
        
        password = input("Mật khẩu (tối thiểu 6 ký tự): ").strip()
        if not password or len(password) < 6:
            password = "Admin123!"
            print(f"Sử dụng mật khẩu mặc định: {password}")
        
        gender = input("Giới tính (male/female/other, có thể bỏ trống): ").strip()
        if gender and gender not in ['male', 'female', 'other']:
            gender = None
        
        # Tạo admin
        print("\nĐang tạo admin...")
        success, result = User.create_admin(name, email, password, gender)
        
        if success:
            print("✅ Tạo admin thành công!")
            print("\n" + "=" * 50)
            print("THÔNG TIN ĐĂNG NHẬP ADMIN")
            print("=" * 50)
            print(f"Email: {email}")
            print(f"Mật khẩu: {password}")
            print(f"Tên: {name}")
            print(f"ID: {result['user_id']}")
            print("=" * 50)
            print("\n⚠️  LƯU Ý:")
            print("- Hãy ghi nhớ thông tin đăng nhập này")
            print("- Nên đổi mật khẩu sau lần đăng nhập đầu tiên")
            print("- Truy cập admin panel tại: http://localhost:5173/admin")
            print()
        else:
            print(f"❌ Lỗi tạo admin: {result}")
            
    except Exception as e:
        logger.error(f"Lỗi tạo admin: {e}")
        print(f"❌ Có lỗi xảy ra: {e}")

def main():
    """Hàm main"""
    try:
        create_default_admin()
    except KeyboardInterrupt:
        print("\n\nĐã hủy bỏ tạo admin.")
    except Exception as e:
        print(f"\nLỗi: {e}")

if __name__ == "__main__":
    main()