Commit Graph
277 Commits
Author SHA1 Message Date
風雪 dc62de00a3 feat(share): node share (uri/qr/client_yaml) + Access Profile in URIs 2026-08-29 00:10:35 +08:00
風雪 e816931b1b fix: hard-delete failed create rollbacks; update.sh SHA256SUMS basename match 2026-08-28 23:45:28 +08:00
風雪 2c8b7fc887 fix(listener): reclaim soft-deleted names so UNIQUE(name) can be reused 2026-08-28 23:32:28 +08:00
風雪 69df7e5165 fix(db): Unscoped dedupe so unique indexes cannot block panel boot 2026-08-28 22:48:56 +08:00
風雪 87adcdfcb7 fix(security): cluster SSRF helpers + private URL rejection 2026-08-28 22:35:04 +08:00
風雪 9d95c97e7e fix(security): InitDB dedupe + cluster private URL hardening 2026-08-28 22:33:19 +08:00
風雪 e0e301cfc4 fix(security): unique listener/sub_token indexes; harden cluster SSRF 2026-08-28 22:32:29 +08:00
風雪 5ea9b4ea28 fix: unique listener names; ignore listeners in custom config fragments 2026-08-28 00:26:00 +08:00
風雪 af05ca48bc fix: reject duplicate listener names; strip listeners from config fragments 2026-08-28 00:24:30 +08:00
風雪 4455f1546b fix: Hy2 quick-setup self-signed TLS; CI workflow_dispatch; release-ready 2026-08-27 22:57:24 +08:00
風雪 6cc1c500ba fix: URI export short-id array, Reality sni/fp, VLESS encryption=none 2026-08-24 23:36:16 +08:00
風雪 0dc22055d4 fix: align Reality short-id, SS2022 password, and client URI mapping with MetaCubeX wiki 2026-08-24 23:34:25 +08:00
風雪 18b94bb092 feat: one-click inbound quick setup (VLESS Reality, SS, Hy2, Trojan Reality) 2026-08-22 15:31:44 +00:00
風雪 475c1fc172 style: gofmt for CI
style: gofmt for CI
style: gofmt for CI
style: gofmt for CI
style: gofmt for CI
style: gofmt for CI
style: gofmt for CI
style: gofmt for CI
style: gofmt for CI
style: gofmt for CI
style: gofmt for CI
style: gofmt for CI
2026-08-21 16:40:11 +00:00
風雪 8d116f9c61 feat: multi-node remote panel registry, health-all, restricted remote control 2026-08-21 15:56:21 +00:00
風雪 2ec1f0d897 fix: audit — CPU warn DB write; sub Profile-Web-Page-Url token fallback 2026-08-21 15:41:44 +00:00
風雪 7d9515309d feat: subscription path formats headers encrypt TG CPU warn 2026-08-21 15:27:58 +00:00
風雪 885a68e57f chore: remove internal parity wording from comments and UI 2026-08-20 15:40:26 +00:00
風雪 b36df8f029 fix: audit — access-token export uses PublicHost; robust IPv6 URI host 2026-08-20 15:05:21 +00:00
風雪 857f8e7ec5 feat: full IPv6 support for panel, listeners, and share links 2026-08-20 14:44:10 +00:00
風雪 31e12d56db fix: dashboard CPU/memory/disk metrics units and sampling
- Memory and disk used/total now returned as bytes (frontend formatBytes)
- Clamp percents to 0–100; improve CPU sampling (200ms + fallback)
- Disk usage probes /, HOME, panel data dirs
- Dashboard: safer formatBytes and Progress clamping
fix: dashboard CPU/memory/disk metrics units and sampling
- Memory and disk used/total now returned as bytes (frontend formatBytes)
- Clamp percents to 0–100; improve CPU sampling (200ms + fallback)
- Disk usage probes /, HOME, panel data dirs
- Dashboard: safer formatBytes and Progress clamping
fix: dashboard CPU/memory/disk metrics units and sampling
- Memory and disk used/total now returned as bytes (frontend formatBytes)
- Clamp percents to 0–100; improve CPU sampling (200ms + fallback)
- Disk usage probes /, HOME, panel data dirs
- Dashboard: safer formatBytes and Progress clamping
fix: dashboard CPU/memory/disk metrics units and sampling
- Memory and disk used/total now returned as bytes (frontend formatBytes)
- Clamp percents to 0–100; improve CPU sampling (200ms + fallback)
- Disk usage probes /, HOME, panel data dirs
- Dashboard: safer formatBytes and Progress clamping
fix: dashboard CPU/memory/disk metrics units and sampling
- Memory and disk used/total now returned as bytes (frontend formatBytes)
- Clamp percents to 0–100; improve CPU sampling (200ms + fallback)
- Disk usage probes /, HOME, panel data dirs
- Dashboard: safer formatBytes and Progress clamping
fix: dashboard CPU/memory/disk metrics units and sampling
- Memory and disk used/total now returned as bytes (frontend formatBytes)
- Clamp percents to 0–100; improve CPU sampling (200ms + fallback)
- Disk usage probes /, HOME, panel data dirs
- Dashboard: safer formatBytes and Progress clamping
fix: dashboard CPU/memory/disk metrics units and sampling
- Memory and disk used/total now returned as bytes (frontend formatBytes)
- Clamp percents to 0–100; improve CPU sampling (200ms + fallback)
- Disk usage probes /, HOME, panel data dirs
- Dashboard: safer formatBytes and Progress clamping
fix: dashboard CPU/memory/disk metrics units and sampling
- Memory and disk used/total now returned as bytes (frontend formatBytes)
- Clamp percents to 0–100; improve CPU sampling (200ms + fallback)
- Disk usage probes /, HOME, panel data dirs
- Dashboard: safer formatBytes and Progress clamping
fix: dashboard CPU/memory/disk metrics units and sampling
- Memory and disk used/total now returned as bytes (frontend formatBytes)
- Clamp percents to 0–100; improve CPU sampling (200ms + fallback)
- Disk usage probes /, HOME, panel data dirs
- Dashboard: safer formatBytes and Progress clamping
fix: dashboard CPU/memory/disk metrics units and sampling
- Memory and disk used/total now returned as bytes (frontend formatBytes)
- Clamp percents to 0–100; improve CPU sampling (200ms + fallback)
- Disk usage probes /, HOME, panel data dirs
- Dashboard: safer formatBytes and Progress clamping
fix: dashboard CPU/memory/disk metrics units and sampling
- Memory and disk used/total now returned as bytes (frontend formatBytes)
- Clamp percents to 0–100; improve CPU sampling (200ms + fallback)
- Disk usage probes /, HOME, panel data dirs
- Dashboard: safer formatBytes and Progress clamping
fix: dashboard CPU/memory/disk metrics units and sampling
- Memory and disk used/total now returned as bytes (frontend formatBytes)
- Clamp percents to 0–100; improve CPU sampling (200ms + fallback)
- Disk usage probes /, HOME, panel data dirs
- Dashboard: safer formatBytes and Progress clamping
2026-08-20 05:34:07 +00:00
風雪 8f7a1e654b fix: audit — persist login TG notify; repair share modal; sing-box guard
- Settings save now includes notify_on_login (was toggled but never sent)
- TelegramSettings TS type includes notify_on_login
- Users share modal: fix broken JSX, proper Sing-box link with ?/&
- Sing-box generator guards empty tag list before selector default
fix: audit — persist login TG notify; repair share modal; sing-box guard
- Settings save now includes notify_on_login (was toggled but never sent)
- TelegramSettings TS type includes notify_on_login
- Users share modal: fix broken JSX, proper Sing-box link with ?/&
- Sing-box generator guards empty tag list before selector default
fix: audit — persist login TG notify; repair share modal; sing-box guard
- Settings save now includes notify_on_login (was toggled but never sent)
- TelegramSettings TS type includes notify_on_login
- Users share modal: fix broken JSX, proper Sing-box link with ?/&
- Sing-box generator guards empty tag list before selector default
fix: audit — persist login TG notify; repair share modal; sing-box guard
- Settings save now includes notify_on_login (was toggled but never sent)
- TelegramSettings TS type includes notify_on_login
- Users share modal: fix broken JSX, proper Sing-box link with ?/&
- Sing-box generator guards empty tag list before selector default
fix: audit — persist login TG notify; repair share modal; sing-box guard
- Settings save now includes notify_on_login (was toggled but never sent)
- TelegramSettings TS type includes notify_on_login
- Users share modal: fix broken JSX, proper Sing-box link with ?/&
- Sing-box generator guards empty tag list before selector default
fix: audit — persist login TG notify; repair share modal; sing-box guard
- Settings save now includes notify_on_login (was toggled but never sent)
- TelegramSettings TS type includes notify_on_login
- Users share modal: fix broken JSX, proper Sing-box link with ?/&
- Sing-box generator guards empty tag list before selector default
fix: audit — persist login TG notify; repair share modal; sing-box guard
- Settings save now includes notify_on_login (was toggled but never sent)
- TelegramSettings TS type includes notify_on_login
- Users share modal: fix broken JSX, proper Sing-box link with ?/&
- Sing-box generator guards empty tag list before selector default
fix: audit — persist login TG notify; repair share modal; sing-box guard
- Settings save now includes notify_on_login (was toggled but never sent)
- TelegramSettings TS type includes notify_on_login
- Users share modal: fix broken JSX, proper Sing-box link with ?/&
- Sing-box generator guards empty tag list before selector default
fix: audit — persist login TG notify; repair share modal; sing-box guard
- Settings save now includes notify_on_login (was toggled but never sent)
- TelegramSettings TS type includes notify_on_login
- Users share modal: fix broken JSX, proper Sing-box link with ?/&
- Sing-box generator guards empty tag list before selector default
fix: audit — persist login TG notify; repair share modal; sing-box guard
- Settings save now includes notify_on_login (was toggled but never sent)
- TelegramSettings TS type includes notify_on_login
- Users share modal: fix broken JSX, proper Sing-box link with ?/&
- Sing-box generator guards empty tag list before selector default
fix: audit — persist login TG notify; repair share modal; sing-box guard
- Settings save now includes notify_on_login (was toggled but never sent)
- TelegramSettings TS type includes notify_on_login
- Users share modal: fix broken JSX, proper Sing-box link with ?/&
- Sing-box generator guards empty tag list before selector default
fix: audit — persist login TG notify; repair share modal; sing-box guard
- Settings save now includes notify_on_login (was toggled but never sent)
- TelegramSettings TS type includes notify_on_login
- Users share modal: fix broken JSX, proper Sing-box link with ?/&
- Sing-box generator guards empty tag list before selector default
2026-08-20 04:36:57 +00:00
風雪 479ef4e0fa feat: more parity — sing-box sub, login TG notify, WARP, search
- Native sing-box JSON subscription (?target=singbox) + UA auto-detect
- Enhanced ?format=info with multi-format links and blocked flag
- Telegram notify on panel login (settings toggle)
- Telegram /backup command; listener list ?q= / enabled filters
- System WARP WireGuard YAML template endpoint
- Frontend: Sing-box share link, login notify switch, listener search
feat: more 3x-ui parity — sing-box sub, login TG notify, WARP, search
- Native sing-box JSON subscription (?target=singbox) + UA auto-detect
- Enhanced ?format=info with multi-format links and blocked flag
- Telegram notify on panel login (settings toggle)
- Telegram /backup command; listener list ?q= / enabled filters
- System WARP WireGuard YAML template endpoint
- Frontend: Sing-box share link, login notify switch, listener search
feat: more 3x-ui parity — sing-box sub, login TG notify, WARP, search
- Native sing-box JSON subscription (?target=singbox) + UA auto-detect
- Enhanced ?format=info with multi-format links and blocked flag
- Telegram notify on panel login (settings toggle)
- Telegram /backup command; listener list ?q= / enabled filters
- System WARP WireGuard YAML template endpoint
- Frontend: Sing-box share link, login notify switch, listener search
feat: more 3x-ui parity — sing-box sub, login TG notify, WARP, search
- Native sing-box JSON subscription (?target=singbox) + UA auto-detect
- Enhanced ?format=info with multi-format links and blocked flag
- Telegram notify on panel login (settings toggle)
- Telegram /backup command; listener list ?q= / enabled filters
- System WARP WireGuard YAML template endpoint
- Frontend: Sing-box share link, login notify switch, listener search
feat: more 3x-ui parity — sing-box sub, login TG notify, WARP, search
- Native sing-box JSON subscription (?target=singbox) + UA auto-detect
- Enhanced ?format=info with multi-format links and blocked flag
- Telegram notify on panel login (settings toggle)
- Telegram /backup command; listener list ?q= / enabled filters
- System WARP WireGuard YAML template endpoint
- Frontend: Sing-box share link, login notify switch, listener search
feat: more panel features — sing-box sub, login TG notify, WARP, search
- Native sing-box JSON subscription (?target=singbox) + UA auto-detect
- Enhanced ?format=info with multi-format links and blocked flag
- Telegram notify on panel login (settings toggle)
- Telegram /backup command; listener list ?q= / enabled filters
- System WARP WireGuard YAML template endpoint
- Frontend: Sing-box share link, login notify switch, listener search
feat: more panel features — sing-box sub, login TG notify, WARP, search
- Native sing-box JSON subscription (?target=singbox) + UA auto-detect
- Enhanced ?format=info with multi-format links and blocked flag
- Telegram notify on panel login (settings toggle)
- Telegram /backup command; listener list ?q= / enabled filters
- System WARP WireGuard YAML template endpoint
- Frontend: Sing-box share link, login notify switch, listener search
feat: more panel features — sing-box sub, login TG notify, WARP, search
- Native sing-box JSON subscription (?target=singbox) + UA auto-detect
- Enhanced ?format=info with multi-format links and blocked flag
- Telegram notify on panel login (settings toggle)
- Telegram /backup command; listener list ?q= / enabled filters
- System WARP WireGuard YAML template endpoint
- Frontend: Sing-box share link, login notify switch, listener search
feat: more panel features — sing-box sub, login TG notify, WARP, search
- Native sing-box JSON subscription (?target=singbox) + UA auto-detect
- Enhanced ?format=info with multi-format links and blocked flag
- Telegram notify on panel login (settings toggle)
- Telegram /backup command; listener list ?q= / enabled filters
- System WARP WireGuard YAML template endpoint
- Frontend: Sing-box share link, login notify switch, listener search
feat: more panel features — sing-box sub, login TG notify, WARP, search
- Native sing-box JSON subscription (?target=singbox) + UA auto-detect
- Enhanced ?format=info with multi-format links and blocked flag
- Telegram notify on panel login (settings toggle)
- Telegram /backup command; listener list ?q= / enabled filters
- System WARP WireGuard YAML template endpoint
- Frontend: Sing-box share link, login notify switch, listener search
feat: more panel features — sing-box sub, login TG notify, WARP, search
- Native sing-box JSON subscription (?target=singbox) + UA auto-detect
- Enhanced ?format=info with multi-format links and blocked flag
- Telegram notify on panel login (settings toggle)
- Telegram /backup command; listener list ?q= / enabled filters
- System WARP WireGuard YAML template endpoint
- Frontend: Sing-box share link, login notify switch, listener search
feat: more panel features — sing-box sub, login TG notify, WARP, search
- Native sing-box JSON subscription (?target=singbox) + UA auto-detect
- Enhanced ?format=info with multi-format links and blocked flag
- Telegram notify on panel login (settings toggle)
- Telegram /backup command; listener list ?q= / enabled filters
- System WARP WireGuard YAML template endpoint
- Frontend: Sing-box share link, login notify switch, listener search
2026-08-20 03:38:36 +00:00
風雪 6f5e13d50c fix: audit — do not undo ApplyConfig rollback; hard-delete proxy users
- Startup soft-fail no longer re-writes a failed Mihomo candidate after
ApplyConfig already restored/removed the previous file
- SaveConfig treats missing config as first-boot (errors.Is NotExist)
- Proxy user / binding deletes are Unscoped so username+UUID unique
indexes can be reused after delete (3x-ui recreate parity)
- Subscription Content-Disposition no longer overwrites Profile-Title name
fix: audit — do not undo ApplyConfig rollback; hard-delete proxy users
- Startup soft-fail no longer re-writes a failed Mihomo candidate after
ApplyConfig already restored/removed the previous file
- SaveConfig treats missing config as first-boot (errors.Is NotExist)
- Proxy user / binding deletes are Unscoped so username+UUID unique
indexes can be reused after delete (3x-ui recreate parity)
- Subscription Content-Disposition no longer overwrites Profile-Title name
fix: audit — do not undo ApplyConfig rollback; hard-delete proxy users
- Startup soft-fail no longer re-writes a failed Mihomo candidate after
ApplyConfig already restored/removed the previous file
- SaveConfig treats missing config as first-boot (errors.Is NotExist)
- Proxy user / binding deletes are Unscoped so username+UUID unique
indexes can be reused after delete (3x-ui recreate parity)
- Subscription Content-Disposition no longer overwrites Profile-Title name
fix: audit — do not undo ApplyConfig rollback; hard-delete proxy users
- Startup soft-fail no longer re-writes a failed Mihomo candidate after
ApplyConfig already restored/removed the previous file
- SaveConfig treats missing config as first-boot (errors.Is NotExist)
- Proxy user / binding deletes are Unscoped so username+UUID unique
indexes can be reused after delete (3x-ui recreate parity)
- Subscription Content-Disposition no longer overwrites Profile-Title name
fix: audit — do not undo ApplyConfig rollback; hard-delete proxy users
- Startup soft-fail no longer re-writes a failed Mihomo candidate after
ApplyConfig already restored/removed the previous file
- SaveConfig treats missing config as first-boot (errors.Is NotExist)
- Proxy user / binding deletes are Unscoped so username+UUID unique
indexes can be reused after delete (3x-ui recreate parity)
- Subscription Content-Disposition no longer overwrites Profile-Title name
fix: audit — do not undo ApplyConfig rollback; hard-delete proxy users
- Startup soft-fail no longer re-writes a failed Mihomo candidate after
ApplyConfig already restored/removed the previous file
- SaveConfig treats missing config as first-boot (errors.Is NotExist)
- Proxy user / binding deletes are Unscoped so username+UUID unique
indexes can be reused after delete (3x-ui recreate parity)
- Subscription Content-Disposition no longer overwrites Profile-Title name
fix: audit — do not undo ApplyConfig rollback; hard-delete proxy users
- Startup soft-fail no longer re-writes a failed Mihomo candidate after
ApplyConfig already restored/removed the previous file
- SaveConfig treats missing config as first-boot (errors.Is NotExist)
- Proxy user / binding deletes are Unscoped so username+UUID unique
indexes can be reused after delete (3x-ui recreate parity)
- Subscription Content-Disposition no longer overwrites Profile-Title name
fix: audit — do not undo ApplyConfig rollback; hard-delete proxy users
- Startup soft-fail no longer re-writes a failed Mihomo candidate after
ApplyConfig already restored/removed the previous file
- SaveConfig treats missing config as first-boot (errors.Is NotExist)
- Proxy user / binding deletes are Unscoped so username+UUID unique
indexes can be reused after delete (3x-ui recreate parity)
- Subscription Content-Disposition no longer overwrites Profile-Title name
fix: audit — do not undo ApplyConfig rollback; hard-delete proxy users
- Startup soft-fail no longer re-writes a failed Mihomo candidate after
ApplyConfig already restored/removed the previous file
- SaveConfig treats missing config as first-boot (errors.Is NotExist)
- Proxy user / binding deletes are Unscoped so username+UUID unique
indexes can be reused after delete (3x-ui recreate parity)
- Subscription Content-Disposition no longer overwrites Profile-Title name
fix: audit — do not undo ApplyConfig rollback; hard-delete proxy users
- Startup soft-fail no longer re-writes a failed Mihomo candidate after
ApplyConfig already restored/removed the previous file
- SaveConfig treats missing config as first-boot (errors.Is NotExist)
- Proxy user / binding deletes are Unscoped so username+UUID unique
indexes can be reused after delete (3x-ui recreate parity)
- Subscription Content-Disposition no longer overwrites Profile-Title name
fix: audit — do not undo ApplyConfig rollback; hard-delete proxy users
- Startup soft-fail no longer re-writes a failed Mihomo candidate after
ApplyConfig already restored/removed the previous file
- SaveConfig treats missing config as first-boot (errors.Is NotExist)
- Proxy user / binding deletes are Unscoped so username+UUID unique
indexes can be reused after delete (3x-ui recreate parity)
- Subscription Content-Disposition no longer overwrites Profile-Title name
fix: audit — do not undo ApplyConfig rollback; hard-delete proxy users
- Startup soft-fail no longer re-writes a failed Mihomo candidate after
ApplyConfig already restored/removed the previous file
- SaveConfig treats missing config as first-boot (errors.Is NotExist)
- Proxy user / binding deletes are Unscoped so username+UUID unique
indexes can be reused after delete ( recreate parity)
- Subscription Content-Disposition no longer overwrites Profile-Title name
2026-08-20 02:11:24 +00:00
風雪 af555c9dcc feat: parity — batch users, sub headers, telegram cmds, geofiles
- User list filters (?q/enabled/online/blocked) and POST /users/batch
- Subscription Profile-Title / Content-Disposition (3x-ui style)
- Telegram: /restart /deldepleted /search
- System: POST /system/geofiles/update (MetaCubeX geoip/geosite)
- Frontend: batch toolbar + geo update button + i18n
feat: 3x-ui parity — batch users, sub headers, telegram cmds, geofiles
- User list filters (?q/enabled/online/blocked) and POST /users/batch
- Subscription Profile-Title / Content-Disposition (3x-ui style)
- Telegram: /restart /deldepleted /search
- System: POST /system/geofiles/update (MetaCubeX geoip/geosite)
- Frontend: batch toolbar + geo update button + i18n
feat: 3x-ui parity — batch users, sub headers, telegram cmds, geofiles
- User list filters (?q/enabled/online/blocked) and POST /users/batch
- Subscription Profile-Title / Content-Disposition (3x-ui style)
- Telegram: /restart /deldepleted /search
- System: POST /system/geofiles/update (MetaCubeX geoip/geosite)
- Frontend: batch toolbar + geo update button + i18n
feat: 3x-ui parity — batch users, sub headers, telegram cmds, geofiles
- User list filters (?q/enabled/online/blocked) and POST /users/batch
- Subscription Profile-Title / Content-Disposition (3x-ui style)
- Telegram: /restart /deldepleted /search
- System: POST /system/geofiles/update (MetaCubeX geoip/geosite)
- Frontend: batch toolbar + geo update button + i18n
feat: 3x-ui parity — batch users, sub headers, telegram cmds, geofiles
- User list filters (?q/enabled/online/blocked) and POST /users/batch
- Subscription Profile-Title / Content-Disposition (3x-ui style)
- Telegram: /restart /deldepleted /search
- System: POST /system/geofiles/update (MetaCubeX geoip/geosite)
- Frontend: batch toolbar + geo update button + i18n
feat: panel features — batch users, sub headers, telegram cmds, geofiles
- User list filters (?q/enabled/online/blocked) and POST /users/batch
- Subscription Profile-Title / Content-Disposition (3x-ui style)
- Telegram: /restart /deldepleted /search
- System: POST /system/geofiles/update (MetaCubeX geoip/geosite)
- Frontend: batch toolbar + geo update button + i18n
feat: panel features — batch users, sub headers, telegram cmds, geofiles
- User list filters (?q/enabled/online/blocked) and POST /users/batch
- Subscription Profile-Title / Content-Disposition (3x-ui style)
- Telegram: /restart /deldepleted /search
- System: POST /system/geofiles/update (MetaCubeX geoip/geosite)
- Frontend: batch toolbar + geo update button + i18n
feat: panel features — batch users, sub headers, telegram cmds, geofiles
- User list filters (?q/enabled/online/blocked) and POST /users/batch
- Subscription Profile-Title / Content-Disposition (3x-ui style)
- Telegram: /restart /deldepleted /search
- System: POST /system/geofiles/update (MetaCubeX geoip/geosite)
- Frontend: batch toolbar + geo update button + i18n
feat: panel features — batch users, sub headers, telegram cmds, geofiles
- User list filters (?q/enabled/online/blocked) and POST /users/batch
- Subscription Profile-Title / Content-Disposition (3x-ui style)
- Telegram: /restart /deldepleted /search
- System: POST /system/geofiles/update (MetaCubeX geoip/geosite)
- Frontend: batch toolbar + geo update button + i18n
feat: panel features — batch users, sub headers, telegram cmds, geofiles
- User list filters (?q/enabled/online/blocked) and POST /users/batch
- Subscription Profile-Title / Content-Disposition (3x-ui style)
- Telegram: /restart /deldepleted /search
- System: POST /system/geofiles/update (MetaCubeX geoip/geosite)
- Frontend: batch toolbar + geo update button + i18n
feat: panel features — batch users, sub headers, telegram cmds, geofiles
- User list filters (?q/enabled/online/blocked) and POST /users/batch
- Subscription Profile-Title / Content-Disposition (3x-ui style)
- Telegram: /restart /deldepleted /search
- System: POST /system/geofiles/update (MetaCubeX geoip/geosite)
- Frontend: batch toolbar + geo update button + i18n
feat: panel features — batch users, sub headers, telegram cmds, geofiles
- User list filters (?q/enabled/online/blocked) and POST /users/batch
- Subscription Profile-Title / Content-Disposition ( style)
- Telegram: /restart /deldepleted /search
- System: POST /system/geofiles/update (MetaCubeX geoip/geosite)
- Frontend: batch toolbar + geo update button + i18n
2026-08-20 01:24:43 +00:00
風雪 82713edf82 fix: panel must start even if Mihomo/SSL fails on boot
- Soft-fail ApplyConfig / config generation / SSL bind so the management
UI remains reachable after deploy
- Preserve os.IsNotExist in ConfigManager.ReadConfig (first-boot path)
- systemd unit: CAP_NET_BIND_SERVICE + LimitNOFILE for optional ACME
fix: panel must start even if Mihomo/SSL fails on boot
- Soft-fail ApplyConfig / config generation / SSL bind so the management
UI remains reachable after deploy
- Preserve os.IsNotExist in ConfigManager.ReadConfig (first-boot path)
- systemd unit: CAP_NET_BIND_SERVICE + LimitNOFILE for optional ACME
fix: panel must start even if Mihomo/SSL fails on boot
- Soft-fail ApplyConfig / config generation / SSL bind so the management
UI remains reachable after deploy
- Preserve os.IsNotExist in ConfigManager.ReadConfig (first-boot path)
- systemd unit: CAP_NET_BIND_SERVICE + LimitNOFILE for optional ACME
fix: panel must start even if Mihomo/SSL fails on boot
- Soft-fail ApplyConfig / config generation / SSL bind so the management
UI remains reachable after deploy
- Preserve os.IsNotExist in ConfigManager.ReadConfig (first-boot path)
- systemd unit: CAP_NET_BIND_SERVICE + LimitNOFILE for optional ACME
fix: panel must start even if Mihomo/SSL fails on boot
- Soft-fail ApplyConfig / config generation / SSL bind so the management
UI remains reachable after deploy
- Preserve os.IsNotExist in ConfigManager.ReadConfig (first-boot path)
- systemd unit: CAP_NET_BIND_SERVICE + LimitNOFILE for optional ACME
fix: panel must start even if Mihomo/SSL fails on boot
- Soft-fail ApplyConfig / config generation / SSL bind so the management
UI remains reachable after deploy
- Preserve os.IsNotExist in ConfigManager.ReadConfig (first-boot path)
- systemd unit: CAP_NET_BIND_SERVICE + LimitNOFILE for optional ACME
fix: panel must start even if Mihomo/SSL fails on boot
- Soft-fail ApplyConfig / config generation / SSL bind so the management
UI remains reachable after deploy
- Preserve os.IsNotExist in ConfigManager.ReadConfig (first-boot path)
- systemd unit: CAP_NET_BIND_SERVICE + LimitNOFILE for optional ACME
fix: panel must start even if Mihomo/SSL fails on boot
- Soft-fail ApplyConfig / config generation / SSL bind so the management
UI remains reachable after deploy
- Preserve os.IsNotExist in ConfigManager.ReadConfig (first-boot path)
- systemd unit: CAP_NET_BIND_SERVICE + LimitNOFILE for optional ACME
fix: panel must start even if Mihomo/SSL fails on boot
- Soft-fail ApplyConfig / config generation / SSL bind so the management
UI remains reachable after deploy
- Preserve os.IsNotExist in ConfigManager.ReadConfig (first-boot path)
- systemd unit: CAP_NET_BIND_SERVICE + LimitNOFILE for optional ACME
fix: panel must start even if Mihomo/SSL fails on boot
- Soft-fail ApplyConfig / config generation / SSL bind so the management
UI remains reachable after deploy
- Preserve os.IsNotExist in ConfigManager.ReadConfig (first-boot path)
- systemd unit: CAP_NET_BIND_SERVICE + LimitNOFILE for optional ACME
fix: panel must start even if Mihomo/SSL fails on boot
- Soft-fail ApplyConfig / config generation / SSL bind so the management
UI remains reachable after deploy
- Preserve os.IsNotExist in ConfigManager.ReadConfig (first-boot path)
- systemd unit: CAP_NET_BIND_SERVICE + LimitNOFILE for optional ACME
fix: panel must start even if Mihomo/SSL fails on boot
- Soft-fail ApplyConfig / config generation / SSL bind so the management
UI remains reachable after deploy
- Preserve os.IsNotExist in ConfigManager.ReadConfig (first-boot path)
- systemd unit: CAP_NET_BIND_SERVICE + LimitNOFILE for optional ACME
2026-08-20 00:22:36 +00:00
風雪 5dddc3b312 fix: audit hardening — sub HTML links, scheme headers, timeouts
- Decode base64 share links for subscription HTML page
- Harden X-Forwarded-Proto and PathEscape subscription tokens
- ACME domain sanitize; HTTPS ReadHeaderTimeout
- DeleteDepleted test: keep merely disabled users
fix: audit hardening — sub HTML links, scheme headers, timeouts
- Decode base64 share links for subscription HTML page
- Harden X-Forwarded-Proto and PathEscape subscription tokens
- ACME domain sanitize; HTTPS ReadHeaderTimeout
- DeleteDepleted test: keep merely disabled users
fix: audit hardening — sub HTML links, scheme headers, timeouts
- Decode base64 share links for subscription HTML page
- Harden X-Forwarded-Proto and PathEscape subscription tokens
- ACME domain sanitize; HTTPS ReadHeaderTimeout
- DeleteDepleted test: keep merely disabled users
fix: audit hardening — sub HTML links, scheme headers, timeouts
- Decode base64 share links for subscription HTML page
- Harden X-Forwarded-Proto and PathEscape subscription tokens
- ACME domain sanitize; HTTPS ReadHeaderTimeout
- DeleteDepleted test: keep merely disabled users
fix: audit hardening — sub HTML links, scheme headers, timeouts
- Decode base64 share links for subscription HTML page
- Harden X-Forwarded-Proto and PathEscape subscription tokens
- ACME domain sanitize; HTTPS ReadHeaderTimeout
- DeleteDepleted test: keep merely disabled users
fix: audit hardening — sub HTML links, scheme headers, timeouts
- Decode base64 share links for subscription HTML page
- Harden X-Forwarded-Proto and PathEscape subscription tokens
- ACME domain sanitize; HTTPS ReadHeaderTimeout
- DeleteDepleted test: keep merely disabled users
fix: audit hardening — sub HTML links, scheme headers, timeouts
- Decode base64 share links for subscription HTML page
- Harden X-Forwarded-Proto and PathEscape subscription tokens
- ACME domain sanitize; HTTPS ReadHeaderTimeout
- DeleteDepleted test: keep merely disabled users
fix: audit hardening — sub HTML links, scheme headers, timeouts
- Decode base64 share links for subscription HTML page
- Harden X-Forwarded-Proto and PathEscape subscription tokens
- ACME domain sanitize; HTTPS ReadHeaderTimeout
- DeleteDepleted test: keep merely disabled users
fix: audit hardening — sub HTML links, scheme headers, timeouts
- Decode base64 share links for subscription HTML page
- Harden X-Forwarded-Proto and PathEscape subscription tokens
- ACME domain sanitize; HTTPS ReadHeaderTimeout
- DeleteDepleted test: keep merely disabled users
fix: audit hardening — sub HTML links, scheme headers, timeouts
- Decode base64 share links for subscription HTML page
- Harden X-Forwarded-Proto and PathEscape subscription tokens
- ACME domain sanitize; HTTPS ReadHeaderTimeout
- DeleteDepleted test: keep merely disabled users
fix: audit hardening — sub HTML links, scheme headers, timeouts
- Decode base64 share links for subscription HTML page
- Harden X-Forwarded-Proto and PathEscape subscription tokens
- ACME domain sanitize; HTTPS ReadHeaderTimeout
- DeleteDepleted test: keep merely disabled users
fix: audit hardening — sub HTML links, scheme headers, timeouts
- Decode base64 share links for subscription HTML page
- Harden X-Forwarded-Proto and PathEscape subscription tokens
- ACME domain sanitize; HTTPS ReadHeaderTimeout
- DeleteDepleted test: keep merely disabled users
2026-08-19 15:17:27 +00:00
風雪 14b1411de9 fix: sanitize ACME domain input (strip scheme/path/port) 2026-08-19 23:06:33 +08:00
風雪 85d5e7b22b fix: restore user ActiveCredentialsByListener 2026-08-19 23:03:24 +08:00
風雪 ecc0b8513a fix: restore user Create/Update 2026-08-19 23:02:11 +08:00
風雪 d670994ec0 fix: restore user Delete and DeleteDepleted 2026-08-19 23:01:26 +08:00
風雪 37f7075edb fix: restore user service_util helpers 2026-08-19 22:58:27 +08:00
風雪 1fe38e425a fix: restore user package core (service.go + BindListeners) 2026-08-19 22:58:01 +08:00
風雪 ea2375c32e fix: restore complete user/service.go 2026-08-19 22:52:27 +08:00
風雪 2cb444ff67 fix: restore user/service.go after accidental placeholder 2026-08-19 22:49:03 +08:00
風雪 9f3f6e2d60 fix: audit — DeleteDepleted keeps disabled users; safer sub URLs 2026-08-19 22:45:00 +08:00
風雪 4d6241740d feat: complete panel ACME SSL, sub HTML templates, Telegram alerts wiring
Wire acme/subpage into app and router, native v2ray/base64 subscription,
Delete depleted UI, Settings panels for SSL and subscription theme,
Telegram traffic/expiry thresholds. Docker + static multi-arch scripts.
feat: complete panel ACME SSL, sub HTML templates, Telegram alerts wiring
Wire acme/subpage into app and router, native v2ray/base64 subscription,
Delete depleted UI, Settings panels for SSL and subscription theme,
Telegram traffic/expiry thresholds. Docker + static multi-arch scripts.
feat: complete panel ACME SSL, sub HTML templates, Telegram alerts wiring
Wire acme/subpage into app and router, native v2ray/base64 subscription,
Delete depleted UI, Settings panels for SSL and subscription theme,
Telegram traffic/expiry thresholds. Docker + static multi-arch scripts.
feat: complete panel ACME SSL, sub HTML templates, Telegram alerts wiring
Wire acme/subpage into app and router, native v2ray/base64 subscription,
Delete depleted UI, Settings panels for SSL and subscription theme,
Telegram traffic/expiry thresholds. Docker + static multi-arch scripts.
feat: complete panel ACME SSL, sub HTML templates, Telegram alerts wiring
Wire acme/subpage into app and router, native v2ray/base64 subscription,
Delete depleted UI, Settings panels for SSL and subscription theme,
Telegram traffic/expiry thresholds. Docker + static multi-arch scripts.
feat: complete panel ACME SSL, sub HTML templates, Telegram alerts wiring
Wire acme/subpage into app and router, native v2ray/base64 subscription,
Delete depleted UI, Settings panels for SSL and subscription theme,
Telegram traffic/expiry thresholds. Docker + static multi-arch scripts.
feat: complete panel ACME SSL, sub HTML templates, Telegram alerts wiring
Wire acme/subpage into app and router, native v2ray/base64 subscription,
Delete depleted UI, Settings panels for SSL and subscription theme,
Telegram traffic/expiry thresholds. Docker + static multi-arch scripts.
feat: complete panel ACME SSL, sub HTML templates, Telegram alerts wiring
Wire acme/subpage into app and router, native v2ray/base64 subscription,
Delete depleted UI, Settings panels for SSL and subscription theme,
Telegram traffic/expiry thresholds. Docker + static multi-arch scripts.
feat: complete panel ACME SSL, sub HTML templates, Telegram alerts wiring
Wire acme/subpage into app and router, native v2ray/base64 subscription,
Delete depleted UI, Settings panels for SSL and subscription theme,
Telegram traffic/expiry thresholds. Docker + static multi-arch scripts.
feat: complete panel ACME SSL, sub HTML templates, Telegram alerts wiring
Wire acme/subpage into app and router, native v2ray/base64 subscription,
Delete depleted UI, Settings panels for SSL and subscription theme,
Telegram traffic/expiry thresholds. Docker + static multi-arch scripts.
feat: complete panel ACME SSL, sub HTML templates, Telegram alerts wiring
Wire acme/subpage into app and router, native v2ray/base64 subscription,
Delete depleted UI, Settings panels for SSL and subscription theme,
Telegram traffic/expiry thresholds. Docker + static multi-arch scripts.
feat: complete panel ACME SSL, sub HTML templates, Telegram alerts wiring
Wire acme/subpage into app and router, native v2ray/base64 subscription,
Delete depleted UI, Settings panels for SSL and subscription theme,
Telegram traffic/expiry thresholds. Docker + static multi-arch scripts.
2026-08-19 14:15:52 +00:00
風雪 0df9e0c881 feat(telegram): traffic/expiry threshold settings and notifier 2026-08-19 21:55:36 +08:00
風雪 61f85bd077 chore: bump golang.org/x/crypto for acme/autocert 2026-08-19 21:55:00 +08:00
風雪 fc4683df7e feat(acme): Let's Encrypt autocert manager for panel SSL 2026-08-19 21:54:00 +08:00
風雪 1f8ce9298d feat(acme,subpage): panel SSL package and custom subscription HTML templates 2026-08-19 21:52:47 +08:00
風雪 363d3f147f fix(test): accept JSON []interface{} for Reality short-id; README Ant Design only 2026-08-19 17:30:39 +08:00
風雪 c5432c01b9 fix(backend): restore ApplyConfig backup/rollback and Start/Stop/Restart locks 2026-08-19 17:29:14 +08:00
風雪 07eaa8b6e9 chore: keep Ant Design only; fix mihomo service syntax and Reality test
- Fix Start/Stop/RestartMihomo: split "} s.applyMu.Lock()" syntax error
- Accept []interface{} for Reality short-id/server-names in tests (JSON decode)
- README: drop leftover alternative-frontend release note
- Project is Ant Design-only (frontend/); no variant UIs
chore: keep Ant Design only; fix mihomo service syntax and Reality test
- Fix Start/Stop/RestartMihomo: split "} s.applyMu.Lock()" syntax error
- Accept []interface{} for Reality short-id/server-names in tests (JSON decode)
- README: drop leftover alternative-frontend release note
- Project is Ant Design-only (frontend/); no variant UIs
chore: keep Ant Design only; fix mihomo service syntax and Reality test
- Fix Start/Stop/RestartMihomo: split "} s.applyMu.Lock()" syntax error
- Accept []interface{} for Reality short-id/server-names in tests (JSON decode)
- README: drop leftover alternative-frontend release note
- Project is Ant Design-only (frontend/); no variant UIs
chore: keep Ant Design only; fix mihomo service syntax and Reality test
- Fix Start/Stop/RestartMihomo: split "} s.applyMu.Lock()" syntax error
- Accept []interface{} for Reality short-id/server-names in tests (JSON decode)
- README: drop leftover alternative-frontend release note
- Project is Ant Design-only (frontend/); no variant UIs
chore: keep Ant Design only; fix mihomo service syntax and Reality test
- Fix Start/Stop/RestartMihomo: split "} s.applyMu.Lock()" syntax error
- Accept []interface{} for Reality short-id/server-names in tests (JSON decode)
- README: drop leftover alternative-frontend release note
- Project is Ant Design-only (frontend/); no variant UIs
chore: keep Ant Design only; fix mihomo service syntax and Reality test
- Fix Start/Stop/RestartMihomo: split "} s.applyMu.Lock()" syntax error
- Accept []interface{} for Reality short-id/server-names in tests (JSON decode)
- README: drop leftover alternative-frontend release note
- Project is Ant Design-only (frontend/); no variant UIs
chore: keep Ant Design only; fix mihomo service syntax and Reality test
- Fix Start/Stop/RestartMihomo: split "} s.applyMu.Lock()" syntax error
- Accept []interface{} for Reality short-id/server-names in tests (JSON decode)
- README: drop leftover alternative-frontend release note
- Project is Ant Design-only (frontend/); no variant UIs
chore: keep Ant Design only; fix mihomo service syntax and Reality test
- Fix Start/Stop/RestartMihomo: split "} s.applyMu.Lock()" syntax error
- Accept []interface{} for Reality short-id/server-names in tests (JSON decode)
- README: drop leftover alternative-frontend release note
- Project is Ant Design-only (frontend/); no variant UIs
chore: keep Ant Design only; fix mihomo service syntax and Reality test
- Fix Start/Stop/RestartMihomo: split "} s.applyMu.Lock()" syntax error
- Accept []interface{} for Reality short-id/server-names in tests (JSON decode)
- README: drop leftover alternative-frontend release note
- Project is Ant Design-only (frontend/); no variant UIs
chore: keep Ant Design only; fix mihomo service syntax and Reality test
- Fix Start/Stop/RestartMihomo: split "} s.applyMu.Lock()" syntax error
- Accept []interface{} for Reality short-id/server-names in tests (JSON decode)
- README: drop leftover alternative-frontend release note
- Project is Ant Design-only (frontend/); no variant UIs
chore: keep Ant Design only; fix mihomo service syntax and Reality test
- Fix Start/Stop/RestartMihomo: split "} s.applyMu.Lock()" syntax error
- Accept []interface{} for Reality short-id/server-names in tests (JSON decode)
- README: drop leftover alternative-frontend release note
- Project is Ant Design-only (frontend/); no variant UIs
chore: keep Ant Design only; fix mihomo service syntax and Reality test
- Fix Start/Stop/RestartMihomo: split "} s.applyMu.Lock()" syntax error
- Accept []interface{} for Reality short-id/server-names in tests (JSON decode)
- README: drop leftover alternative-frontend release note
- Project is Ant Design-only (frontend/); no variant UIs
2026-08-19 17:27:17 +08:00
風雪 885100fd4d update
update
update
update
update
update
update
update
update
update
update
update
2026-08-19 16:17:10 +08:00
風雪 6b3a09a09c update
update
update
update
update
update
update
update
update
update
update
update
2026-08-19 12:49:36 +08:00
風雪 fc00113ea5 fix(vless): pair encryption/decryption correctly for TCP Vision
- Stop copying server decryption into client encryption
- Store both fields; strip encryption (client-only) from server Compile
- Form + capability + schema support encryption for subscription export
- Tests for export and compile stripping
fix(vless): pair encryption/decryption correctly for TCP Vision
- Stop copying server decryption into client encryption
- Store both fields; strip encryption (client-only) from server Compile
- Form + capability + schema support encryption for subscription export
- Tests for export and compile stripping
fix(vless): pair encryption/decryption correctly for TCP Vision
- Stop copying server decryption into client encryption
- Store both fields; strip encryption (client-only) from server Compile
- Form + capability + schema support encryption for subscription export
- Tests for export and compile stripping
fix(vless): pair encryption/decryption correctly for TCP Vision
- Stop copying server decryption into client encryption
- Store both fields; strip encryption (client-only) from server Compile
- Form + capability + schema support encryption for subscription export
- Tests for export and compile stripping
fix(vless): pair encryption/decryption correctly for TCP Vision
- Stop copying server decryption into client encryption
- Store both fields; strip encryption (client-only) from server Compile
- Form + capability + schema support encryption for subscription export
- Tests for export and compile stripping
fix(vless): pair encryption/decryption correctly for TCP Vision
- Stop copying server decryption into client encryption
- Store both fields; strip encryption (client-only) from server Compile
- Form + capability + schema support encryption for subscription export
- Tests for export and compile stripping
fix(vless): pair encryption/decryption correctly for TCP Vision
- Stop copying server decryption into client encryption
- Store both fields; strip encryption (client-only) from server Compile
- Form + capability + schema support encryption for subscription export
- Tests for export and compile stripping
fix(vless): pair encryption/decryption correctly for TCP Vision
- Stop copying server decryption into client encryption
- Store both fields; strip encryption (client-only) from server Compile
- Form + capability + schema support encryption for subscription export
- Tests for export and compile stripping
fix(vless): pair encryption/decryption correctly for TCP Vision
- Stop copying server decryption into client encryption
- Store both fields; strip encryption (client-only) from server Compile
- Form + capability + schema support encryption for subscription export
- Tests for export and compile stripping
fix(vless): pair encryption/decryption correctly for TCP Vision
- Stop copying server decryption into client encryption
- Store both fields; strip encryption (client-only) from server Compile
- Form + capability + schema support encryption for subscription export
- Tests for export and compile stripping
fix(vless): pair encryption/decryption correctly for TCP Vision
- Stop copying server decryption into client encryption
- Store both fields; strip encryption (client-only) from server Compile
- Form + capability + schema support encryption for subscription export
- Tests for export and compile stripping
fix(vless): pair encryption/decryption correctly for TCP Vision
- Stop copying server decryption into client encryption
- Store both fields; strip encryption (client-only) from server Compile
- Form + capability + schema support encryption for subscription export
- Tests for export and compile stripping
2026-08-18 14:00:26 +00:00
風雪 0e46914891 fix(startup): rollback Mihomo config when activation fails 2026-08-18 20:15:01 +08:00
風雪 44e5c2e46a test(telegram): prevent chat allowlist ID alias bypass
test(telegram): prevent chat allowlist ID alias bypass
test(telegram): prevent chat allowlist ID alias bypass
test(telegram): prevent chat allowlist ID alias bypass
test(telegram): prevent chat allowlist ID alias bypass
test(telegram): prevent chat allowlist ID alias bypass
test(telegram): prevent chat allowlist ID alias bypass
test(telegram): prevent chat allowlist ID alias bypass
test(telegram): prevent chat allowlist ID alias bypass
test(telegram): prevent chat allowlist ID alias bypass
test(telegram): prevent chat allowlist ID alias bypass
test(telegram): prevent chat allowlist ID alias bypass
2026-08-18 19:08:36 +08:00
風雪 5d2b916307 fix(telegram): enforce exact chat allowlist IDs 2026-08-18 19:08:30 +08:00