Add empty short_id, SpiderX in share links, and post-keygen render reminder so server config stays in sync with .env.
Co-authored-by: Cursor <cursoragent@cursor.com>
Always inject panel_base from PANEL_PATH for static/API URLs and set
SCRIPT_NAME in middleware so /api/stats works behind nginx subpaths.
Co-authored-by: Cursor <cursoragent@cursor.com>
Force nginx to pass the domain as Host, add PANEL_DOMAIN fallback in Flask,
and document that the admin panel must be accessed over HTTP not HTTPS.
Co-authored-by: Cursor <cursoragent@cursor.com>
Match connections by multiple auth keys, fall back to global traffic for
single-node setups, and document offline-status troubleshooting.
Co-authored-by: Cursor <cursoragent@cursor.com>
Read share links from input fields and fall back to execCommand when
Clipboard API is unavailable outside secure contexts.
Co-authored-by: Cursor <cursoragent@cursor.com>
Stats and node API calls were hitting /api/* at the site root instead of
the hidden PANEL_PATH, causing stats to show unavailable behind nginx.
Co-authored-by: Cursor <cursoragent@cursor.com>
Official sing-box binaries lack v2ray_api, so drop that config and grpcio
and track per-node traffic from Clash connection stats instead.
Co-authored-by: Cursor <cursoragent@cursor.com>
Enable sing-box Clash/V2Ray APIs for per-user metrics, persist cumulative
traffic in SQLite, and refresh the dashboard every five seconds.
Co-authored-by: Cursor <cursoragent@cursor.com>
Route the panel through a secret subpath on port 80, remove the separate
8444 listener, and document common troubleshooting in docs.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use stdlib pbkdf2 for admin passwords so init_db works reliably.
Remove .env from git to avoid pull conflicts on VPS.
Verify flask install before database init.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use venv interpreter so werkzeug is available; sync admin user from .env on init.
Set default panel username to dekun.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add Flask panel with login, add/delete nodes, and share link copy.
Generate sing-box config from SQLite; add uninstall script and clean install flow.
Panel served at https://DOMAIN:8444 via nginx.
Co-authored-by: Cursor <cursoragent@cursor.com>
Move install-cert after systemd unit creation so reloadcmd succeeds.
Add finish-install.sh to recover partial deployments when cert exists.
Co-authored-by: Cursor <cursoragent@cursor.com>