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)