Initial YakPanel commit
This commit is contained in:
99
YakPanel-server/backend/app/main.py
Normal file
99
YakPanel-server/backend/app/main.py
Normal file
@@ -0,0 +1,99 @@
|
||||
"""YakPanel - Main FastAPI application"""
|
||||
from contextlib import asynccontextmanager
|
||||
from fastapi import FastAPI
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
from sqlalchemy import select
|
||||
|
||||
from app.core.config import get_settings, set_runtime_config_overrides
|
||||
from app.core.database import init_db, AsyncSessionLocal
|
||||
from app.models.config import Config
|
||||
from app.api import (
|
||||
auth,
|
||||
backup,
|
||||
dashboard,
|
||||
user,
|
||||
site,
|
||||
ftp,
|
||||
database,
|
||||
files,
|
||||
crontab,
|
||||
firewall,
|
||||
ssl,
|
||||
monitor,
|
||||
docker,
|
||||
plugin,
|
||||
soft,
|
||||
terminal,
|
||||
config,
|
||||
logs,
|
||||
node,
|
||||
service,
|
||||
public_installer,
|
||||
)
|
||||
|
||||
|
||||
@asynccontextmanager
|
||||
async def lifespan(app: FastAPI):
|
||||
"""Application lifespan - init DB on startup, load config from DB"""
|
||||
await init_db()
|
||||
# Load panel config from DB (persisted settings from Settings page)
|
||||
async with AsyncSessionLocal() as db:
|
||||
result = await db.execute(select(Config))
|
||||
rows = result.scalars().all()
|
||||
overrides = {r.key: r.value for r in rows if r.value is not None}
|
||||
set_runtime_config_overrides(overrides)
|
||||
yield
|
||||
# Cleanup if needed
|
||||
|
||||
|
||||
settings = get_settings()
|
||||
app = FastAPI(
|
||||
title=settings.app_name,
|
||||
version=settings.app_version,
|
||||
lifespan=lifespan,
|
||||
)
|
||||
|
||||
_cors_origins = ["http://localhost:5173", "http://127.0.0.1:5173"]
|
||||
_extra = (settings.cors_extra_origins or "").strip()
|
||||
if _extra:
|
||||
_cors_origins.extend([o.strip() for o in _extra.split(",") if o.strip()])
|
||||
|
||||
app.add_middleware(
|
||||
CORSMiddleware,
|
||||
allow_origins=_cors_origins,
|
||||
allow_credentials=True,
|
||||
allow_methods=["*"],
|
||||
allow_headers=["*"],
|
||||
)
|
||||
|
||||
app.include_router(auth.router, prefix="/api/v1")
|
||||
app.include_router(backup.router, prefix="/api/v1")
|
||||
app.include_router(dashboard.router, prefix="/api/v1")
|
||||
app.include_router(site.router, prefix="/api/v1")
|
||||
app.include_router(ftp.router, prefix="/api/v1")
|
||||
app.include_router(database.router, prefix="/api/v1")
|
||||
app.include_router(files.router, prefix="/api/v1")
|
||||
app.include_router(crontab.router, prefix="/api/v1")
|
||||
app.include_router(firewall.router, prefix="/api/v1")
|
||||
app.include_router(ssl.router, prefix="/api/v1")
|
||||
app.include_router(monitor.router, prefix="/api/v1")
|
||||
app.include_router(docker.router, prefix="/api/v1")
|
||||
app.include_router(plugin.router, prefix="/api/v1")
|
||||
app.include_router(soft.router, prefix="/api/v1")
|
||||
app.include_router(node.router, prefix="/api/v1")
|
||||
app.include_router(service.router, prefix="/api/v1")
|
||||
app.include_router(terminal.router, prefix="/api/v1")
|
||||
app.include_router(config.router, prefix="/api/v1")
|
||||
app.include_router(user.router, prefix="/api/v1")
|
||||
app.include_router(logs.router, prefix="/api/v1")
|
||||
app.include_router(public_installer.router, prefix="/api/v1")
|
||||
|
||||
|
||||
@app.get("/")
|
||||
async def root():
|
||||
return {"app": settings.app_name, "version": settings.app_version}
|
||||
|
||||
|
||||
@app.get("/api/health")
|
||||
async def health():
|
||||
return {"status": "ok"}
|
||||
Reference in New Issue
Block a user