@@ -0,0 +1,41 @@
|
||||
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
|
||||
from app.services.vpn import ensure_default_servers
|
||||
|
||||
|
||||
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")
|
||||
|
||||
await ensure_default_servers(session)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(bootstrap())
|
||||
Reference in New Issue
Block a user