Spaces:
Sleeping
Sleeping
| import logging | |
| from sqlalchemy.orm import Session | |
| from core.auth import get_password_hash | |
| from core.database import get_db_session | |
| from core.models import User, UserStatus, Tenant, Workspace | |
| logger = logging.getLogger("ATOM_BOOTSTRAP") | |
| def ensure_admin_user(): | |
| """ | |
| Ensures the admin@example.com user exists with the correct password. | |
| This runs INSIDE the main application process to avoid DB locks. | |
| """ | |
| with get_db_session() as db: | |
| try: | |
| email = "admin@example.com" | |
| password = "securePass123" | |
| user = db.query(User).filter(User.email == email).first() | |
| if user: | |
| logger.info(f"BOOTSTRAP: User {email} found. resetting password...") | |
| user.password_hash = get_password_hash(password) | |
| user.status = UserStatus.ACTIVE | |
| user.role = "workspace_admin" # Ensure role is set | |
| db.commit() | |
| logger.info(f"BOOTSTRAP: Password for {email} reset to '{password}'") | |
| else: | |
| logger.info(f"BOOTSTRAP: User {email} not found. Creating...") | |
| new_user = User( | |
| id="00000000-0000-0000-0000-000000000000", # Fixed ID for development stability | |
| email=email, | |
| password_hash=get_password_hash(password), | |
| first_name="Admin", | |
| last_name="User", | |
| role="workspace_admin", # Explicitly set role | |
| status=UserStatus.ACTIVE | |
| ) | |
| db.add(new_user) | |
| db.commit() | |
| logger.info(f"BOOTSTRAP: Created {email} with password '{password}'") | |
| # Ensure default tenant and workspace | |
| ensure_default_tenant_and_workspace(db) | |
| except Exception as e: | |
| logger.error(f"BOOTSTRAP FAILED: {e}") | |
| db.rollback() | |
| finally: | |
| db.close() | |
| def ensure_default_tenant_and_workspace(db: Session): | |
| """Ensures a default tenant and workspace exist for single-tenant mode.""" | |
| # 1. Ensure Default Tenant | |
| tenant = db.query(Tenant).filter(Tenant.id == "default").first() | |
| if not tenant: | |
| logger.info("BOOTSTRAP: Creating default tenant...") | |
| tenant = Tenant( | |
| id="default", | |
| name="Default Tenant", | |
| subdomain="default", | |
| edition="personal" | |
| ) | |
| db.add(tenant) | |
| db.flush() # Get ID if not fixed | |
| # 2. Ensure Default Workspace | |
| workspace = db.query(Workspace).filter(Workspace.id == "default").first() | |
| if not workspace: | |
| logger.info("BOOTSTRAP: Creating default workspace...") | |
| workspace = Workspace( | |
| id="default", | |
| tenant_id="default", | |
| name="Default Workspace", | |
| description="Your personal workspace" | |
| ) | |
| db.add(workspace) | |
| db.commit() | |
| logger.info("BOOTSTRAP: Default tenant and workspace ensured.") | |