from fastapi import FastAPI, BackgroundTasks from fastapi.middleware.cors import CORSMiddleware from tortoise import Tortoise from .Users.UserRoutes import user_router from .Webhooks.webhookRoute import webhook_router from .Subscriptions.SubscriptionRoutes import subscription_router from .modelInit import TORTOISE_ORM from .Payments.PaymentsRoutes import payment_router from .Plans.PlanRoutes import plan_router from .Portals.PortalRoutes import portal_router from .Metrics.MetricsRoutes import metrics_router from .Messages.MessagesRoute import message_router # from .Subscriptions.background_tasks import check_expiring_subscriptions import asyncio import logging import subprocess logging.basicConfig(level=logging.INFO) app = FastAPI() # Configure CORS to allow all origins app.add_middleware( CORSMiddleware, allow_origins=[ "http://localhost:3000", # Localhost for development "https://captive-hotspot.vercel.app", # Your production domain ], # Allows all origins allow_credentials=True, # Allows cookies and authentication headers allow_methods=["*"], # Allows all HTTP methods (GET, POST, PUT, DELETE, etc.) allow_headers=["*"], # Allows all headers ) async def connect_to_vpn(): """Connect to the VPN on startup.""" try: # Replace 'your_vpn_command' with the actual command to connect to your VPN # For example, if using OpenVPN: command = ["openvpn", "--config", "App/Mikrotik/utils/client1-working.ovpn"] process = subprocess.Popen(command) await asyncio.sleep(5) # Wait for a few seconds to ensure the VPN connects logging.info("VPN connected successfully.") except Exception as e: logging.error(f"Failed to connect to VPN: {str(e)}") @app.on_event("startup") async def startup_event(): await Tortoise.init(config=TORTOISE_ORM) await Tortoise.generate_schemas() await connect_to_vpn() # Connect to VPN on startup @app.get("/") async def landing_page(): return {"code": 200, "message": "still running"} # Include routers app.include_router(user_router) app.include_router(webhook_router) app.include_router(subscription_router) app.include_router(payment_router) app.include_router(plan_router) app.include_router(portal_router) app.include_router(metrics_router) app.include_router(message_router) # if __name__ == "__main__": # import uvicorn # # Run the FastAPI app located at App.app:app # uvicorn.run(app, host="0.0.0.0", port=8000)