first commit

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-25 20:36:00 +03:00
co-authored by Cursor
commit bbff3cb10b
35 changed files with 2054 additions and 0 deletions
+41
View File
@@ -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())