2026-07-04 20:19:02 +02:00
|
|
|
"""Bootstrap first admin user from environment (optional alternative to UI registration)."""
|
2026-07-04 20:09:54 +02:00
|
|
|
|
|
|
|
|
from __future__ import annotations
|
|
|
|
|
|
|
|
|
|
import os
|
|
|
|
|
|
2026-07-04 20:19:02 +02:00
|
|
|
from services.registration import provision_system_admin, user_count
|
2026-07-04 20:09:54 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def _env(name: str) -> str:
|
|
|
|
|
return os.getenv(name, "").strip()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def bootstrap_admin_if_needed() -> None:
|
|
|
|
|
if _env("SKIP_BOOTSTRAP").lower() in ("1", "true", "yes"):
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
email = _env("KAIRO_BOOTSTRAP_ADMIN_EMAIL")
|
|
|
|
|
password = _env("KAIRO_BOOTSTRAP_ADMIN_PASSWORD")
|
|
|
|
|
if not email or not password:
|
|
|
|
|
return
|
|
|
|
|
|
2026-07-04 20:19:02 +02:00
|
|
|
if user_count() > 0:
|
|
|
|
|
return
|
|
|
|
|
|
2026-07-04 20:09:54 +02:00
|
|
|
tenant_slug = _env("KAIRO_BOOTSTRAP_TENANT_SLUG") or "default"
|
|
|
|
|
tenant_name = _env("KAIRO_BOOTSTRAP_TENANT_NAME") or "Default Tenant"
|
|
|
|
|
display_name = _env("KAIRO_BOOTSTRAP_ADMIN_NAME") or "Kairo Admin"
|
|
|
|
|
|
2026-07-04 20:19:02 +02:00
|
|
|
provision_system_admin(
|
|
|
|
|
email=email,
|
|
|
|
|
password=password,
|
|
|
|
|
display_name=display_name,
|
|
|
|
|
tenant_slug=tenant_slug,
|
|
|
|
|
tenant_name=tenant_name,
|
|
|
|
|
source="env_bootstrap",
|
2026-07-04 20:09:54 +02:00
|
|
|
)
|
2026-07-04 20:19:02 +02:00
|
|
|
print(f"[bootstrap] Systemadmin und Tenant '{tenant_slug}' angelegt")
|