- JWT_SECRET is mandatory (no more "supersecret" fallback). - Pass OVPMON_INITIAL_ADMIN_USER/PASSWORD and OVPMON_CORS_ORIGINS to the APIs; add restart policy and drop the obsolete compose "version". - Publish only 80/tcp and 1194/udp; expose 5001 and 8000 on ovp-net. - CORS origins now come from OVPMON_CORS_ORIGINS instead of a hardcoded host (default: same-origin only). - Update Docker/native deployment docs and README accordingly. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
import uvicorn
|
|
from fastapi import FastAPI
|
|
import sys
|
|
import os
|
|
|
|
# Add project root to sys.path explicitly to ensure absolute imports work
|
|
import os
|
|
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
|
|
|
|
from database import engine, Base
|
|
from routers import system, server, profiles, server_process
|
|
from utils.logging import setup_logging
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
|
|
# Create Database Tables
|
|
Base.metadata.create_all(bind=engine)
|
|
|
|
setup_logging()
|
|
|
|
app = FastAPI(
|
|
title="OpenVPN Profiler API",
|
|
description="REST API for managing OpenVPN profiles and configuration",
|
|
version="1.0.0"
|
|
)
|
|
|
|
# Enable CORS
|
|
app.add_middleware(
|
|
CORSMiddleware,
|
|
allow_origins=[o.strip() for o in os.getenv("OVPMON_CORS_ORIGINS", "").split(",") if o.strip()],
|
|
allow_credentials=True,
|
|
allow_methods=["GET", "POST", "PUT", "DELETE"],
|
|
allow_headers=["Authorization", "Content-Type"],
|
|
)
|
|
|
|
app.include_router(system.router, prefix="/api", tags=["System"])
|
|
app.include_router(server.router, prefix="/api", tags=["Server"])
|
|
app.include_router(profiles.router, prefix="/api", tags=["Profiles"])
|
|
app.include_router(server_process.router, prefix="/api", tags=["Process Control"])
|
|
|
|
@app.get("/")
|
|
def read_root():
|
|
return {"message": "Welcome to OpenVPN Profiler API"}
|
|
|
|
if __name__ == "__main__":
|
|
uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=True)
|