| | from fastapi import FastAPI, Request |
| | from fastapi.templating import Jinja2Templates |
| | from fastapi.staticfiles import StaticFiles |
| | from fastapi.responses import HTMLResponse |
| | import uvicorn |
| | from proxy_manager import ProxyManager |
| | from updater import ProxyUpdater |
| | import logging |
| |
|
| | app = FastAPI() |
| | templates = Jinja2Templates(directory="templates") |
| |
|
| | |
| | proxy_manager: ProxyManager = None |
| | updater: ProxyUpdater = None |
| |
|
| | def init_app(pm: ProxyManager, up: ProxyUpdater): |
| | global proxy_manager, updater |
| | proxy_manager = pm |
| | updater = up |
| |
|
| | @app.get("/", response_class=HTMLResponse) |
| | async def read_root(request: Request): |
| | return templates.TemplateResponse("index.html", {"request": request}) |
| |
|
| | @app.get("/api/status") |
| | async def get_status(): |
| | if not proxy_manager: |
| | return {"best_proxy": None, "total_available": 0} |
| | |
| | best = proxy_manager.best_proxy.to_dict() if proxy_manager.best_proxy else None |
| | return { |
| | "best_proxy": best, |
| | "total_available": len(proxy_manager.proxies) |
| | } |
| |
|
| | @app.get("/api/proxies") |
| | async def get_proxies(): |
| | if not proxy_manager: |
| | return {"proxies": []} |
| | |
| | return {"proxies": [p.to_dict() for p in proxy_manager.proxies[:50]]} |
| |
|