39 lines
1.3 KiB
Python
39 lines
1.3 KiB
Python
import asyncio
|
|
|
|
from sqlalchemy import select
|
|
|
|
from app.config import settings
|
|
from app.database import SessionLocal
|
|
from app.models import AdminUser
|
|
from app.security import hash_password
|
|
|
|
|
|
async def bootstrap() -> None:
|
|
async with SessionLocal() as session:
|
|
result = await session.execute(
|
|
select(AdminUser).where(AdminUser.username == settings.admin_username)
|
|
)
|
|
admin = result.scalar_one_or_none()
|
|
if admin is None:
|
|
session.add(
|
|
AdminUser(
|
|
username=settings.admin_username,
|
|
email=settings.admin_email,
|
|
password_hash=hash_password(settings.admin_password),
|
|
is_active=True,
|
|
)
|
|
)
|
|
await session.commit()
|
|
print(f"Admin user '{settings.admin_username}' created from ENV")
|
|
else:
|
|
# Keep password in sync with ENV on boot (convenient for Dokploy)
|
|
admin.email = settings.admin_email
|
|
admin.password_hash = hash_password(settings.admin_password)
|
|
admin.is_active = True
|
|
await session.commit()
|
|
print(f"Admin user '{settings.admin_username}' synced from ENV")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(bootstrap())
|