Spaces:
Running
Running
| import os | |
| import sys | |
| from dotenv import load_dotenv | |
| sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | |
| from app.core.config import configs | |
| from app.core.database import Database | |
| from app.core.security import get_password_hash | |
| from app.model.user import Role, User | |
| from app.util.hash import get_rand_hash | |
| def _required_env(name: str) -> str: | |
| value = os.getenv(name) | |
| if not value: | |
| raise RuntimeError(f"{name} must be set") | |
| return value | |
| def seed_admin() -> None: | |
| load_dotenv() | |
| email = _required_env("ADMIN_EMAIL") | |
| password = _required_env("ADMIN_PASSWORD") | |
| name = os.getenv("ADMIN_NAME", "System Admin") | |
| identity_number = os.getenv("ADMIN_IDENTITY_NUMBER", "ADMIN-0001") | |
| update_password = os.getenv("ADMIN_UPDATE_PASSWORD", "false").lower() in {"1", "true", "yes"} | |
| db = Database(configs.DATABASE_URI) | |
| with db.session() as session: | |
| user = session.query(User).filter(User.email == email).first() | |
| if user: | |
| user.role = Role.admin | |
| user.is_superuser = True | |
| user.is_active = True | |
| user.name = user.name or name | |
| if update_password: | |
| user.password = get_password_hash(password) | |
| session.add(user) | |
| session.commit() | |
| print(f"Admin user already exists and was updated: {email}") | |
| return | |
| existing_identity = ( | |
| session.query(User) | |
| .filter(User.identity_number == identity_number) | |
| .first() | |
| ) | |
| if existing_identity: | |
| raise RuntimeError( | |
| "ADMIN_IDENTITY_NUMBER is already used by another user. " | |
| "Set a different ADMIN_IDENTITY_NUMBER." | |
| ) | |
| admin = User( | |
| email=email, | |
| password=get_password_hash(password), | |
| user_token=get_rand_hash(), | |
| role=Role.admin, | |
| identity_number=identity_number, | |
| name=name, | |
| is_active=True, | |
| is_superuser=True, | |
| ) | |
| session.add(admin) | |
| session.commit() | |
| print(f"Admin user created: {email}") | |
| if __name__ == "__main__": | |
| seed_admin() | |