raghub-sevima-test / scripts /seed_admin.py
lifedebugger's picture
Deploy files from GitHub repository with LFS
9b788cc
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()