Files
vpn/app/bootstrap.py
T

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())