Some checks failed
Backend Tests / pytest (Python 3.12) (push) Failing after 2m27s
82 lines
2.8 KiB
Python
82 lines
2.8 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Initialize admin user with full RBAC v2 permissions.
|
|
Creates admin user and assigns 'admin' role from database.
|
|
"""
|
|
import sys
|
|
import os
|
|
|
|
# Add app directory to path
|
|
sys.path.insert(0, '/app')
|
|
|
|
from app.db import get_db
|
|
from app.models import User, Role
|
|
from app.auth import get_password_hash
|
|
|
|
def create_default_admin():
|
|
"""Create admin user with default credentials and full RBAC permissions"""
|
|
username = "admin"
|
|
email = "admin@example.com"
|
|
password = os.environ.get("ADMIN_PASSWORD", "admin123")
|
|
if password == "admin123":
|
|
print("⚠️ WARNING: Using default password 'admin123'. Set ADMIN_PASSWORD env var in production!")
|
|
|
|
db = next(get_db())
|
|
|
|
try:
|
|
# Check if admin exists
|
|
existing = db.query(User).filter(User.username == username).first()
|
|
if existing:
|
|
print(f"✅ Admin user '{username}' already exists")
|
|
|
|
# Ensure admin has role assigned
|
|
if not existing.role_id:
|
|
admin_role = db.query(Role).filter(Role.name == 'admin').first()
|
|
if admin_role:
|
|
existing.role_id = admin_role.id
|
|
db.commit()
|
|
print(f" ✅ Assigned 'admin' role with full RBAC permissions")
|
|
return
|
|
|
|
# Get admin role from database (created in init.sql)
|
|
admin_role = db.query(Role).filter(Role.name == 'admin').first()
|
|
|
|
# Create admin
|
|
hashed_password = get_password_hash(password)
|
|
admin = User(
|
|
username=username,
|
|
email=email,
|
|
hashed_password=hashed_password,
|
|
is_admin=True,
|
|
is_active=True,
|
|
role_id=admin_role.id if admin_role else None,
|
|
require_password_change=(password == "admin123")
|
|
)
|
|
|
|
db.add(admin)
|
|
db.commit()
|
|
|
|
print("✅ Admin user created successfully!")
|
|
print(f" Username: {username}")
|
|
print(f" Email: {email}")
|
|
print(f" Password: {password}")
|
|
if admin_role:
|
|
print(f" Role: {admin_role.display_name} (full RBAC permissions)")
|
|
print(f"\n🔗 Login at: http://localhost:8000/login")
|
|
|
|
# Show RBAC permissions summary
|
|
if admin_role and admin_role.permissions:
|
|
perm_count = len([k for k, v in admin_role.permissions.items() if v])
|
|
print(f"\n📋 RBAC Permissions: {perm_count} permissions granted")
|
|
print(" Including: server:*, vm:*, lxc:*, template:*, user:*, role:*, setting:*, log:*, etc.")
|
|
|
|
except Exception as e:
|
|
db.rollback()
|
|
print(f"❌ Error creating admin: {e}")
|
|
raise
|
|
finally:
|
|
db.close()
|
|
|
|
if __name__ == "__main__":
|
|
create_default_admin()
|