Commit graph

2340 commits

Author SHA1 Message Date
root
47b734ef2d fix: dark mode selected row background and batch toolbar layout
- Override Ant Design default selected row background in dark mode with theme color
- Restructure batch action toolbar with nested flex containers for better spacing and wrapping
- Bump version to v1.7.3.2
2026-04-26 17:40:08 +08:00
root
8566ccf752 chore: remove codex and copilot-instructions from tracking 2026-04-26 17:25:00 +08:00
root
9badadc97b chore: remove tracked files matching gitignore (vscode, docs) 2026-04-26 17:23:54 +08:00
root
19a36435bd chore: exclude AGENTS.md from version control 2026-04-26 17:21:17 +08:00
root
bd154b7bee chore: update gitignore to exclude claude, build, backup and docs 2026-04-26 17:19:29 +08:00
root
9ee5fd432d chore: bump version to v1.7.3.1 2026-04-26 17:16:33 +08:00
root
18bdc2baa5 feat: add batch select and batch edit for inbound clients 2026-04-26 17:11:58 +08:00
root
fb7beb4dd2 chore: bump version to v1.7.2.11 2026-04-26 01:09:42 +08:00
root
7ff73313a9 fix: auto-fill flow for registration-created eligible clients 2026-04-26 01:08:22 +08:00
root
b47bac3dc6 fix: default flow to vision in client add modals 2026-04-26 01:05:09 +08:00
root
64ceb8343f chore: bump version to v1.7.2.9 2026-04-26 00:54:56 +08:00
root
e3d84b38ca fix: auto-fill vision flow for eligible new clients 2026-04-26 00:53:11 +08:00
root
3048950743 fix: allow subscription links for disabled clients 2026-04-26 00:47:44 +08:00
root
d6de00cd00 fix: repair clash subscription toggle and separate clash path settings 2026-04-26 00:43:09 +08:00
root
67bf6c1a9a chore: bump version to v1.7.2.8 2026-04-26 00:27:37 +08:00
root
18bba12ef1 fix: replace user quick import dropdown with direct action buttons 2026-04-26 00:26:20 +08:00
root
7b24a8d704 chore: bump version to v1.7.2.7 2026-04-26 00:11:14 +08:00
root
22d518b5c9 fix: show user quick import dropdown 2026-04-26 00:09:37 +08:00
root
3ba7e43bc3 feat: add URL Schemes for Quick Import buttons (Android/iOS/Desktop)
- Android: clash://install-config (Clash Meta for Android)
- iOS: shadowrocket://add/sub/ (Shadowrocket)
- Desktop: clash-verge://install-config (Clash Verge)
- Extended API to return subEnable/subUrl for standard subscription
2026-04-25 22:46:35 +08:00
root
aa775a111f feat: add Clash link and Quick Import button to user panel
- New API endpoint /panel/api/inbounds/userSubscriptions for non-admin users
- Redesigned /panel/user with Clash link card (copy button) and Quick Import dropdown (Android/iOS/Desktop with icons)
- Added i18n keys for en_US and zh_CN
- Bumped version to v1.7.2.5
2026-04-25 21:31:02 +08:00
root
1d57d5d1c4 chore: bump version to v1.7.2.4 2026-04-25 21:00:16 +08:00
root
7af6b2e801 docs: update tasktracking with servername/encryption fix 2026-04-25 20:59:22 +08:00
root
699e5959c3 fix: use servername field and add encryption to Clash proxy entries
- sni → servername (mihomo/Clash Meta field name)
- Add encryption field parsed from inbound settings
2026-04-25 20:59:08 +08:00
root
919761e9c6 chore: bump version to v1.7.2.3 2026-04-25 20:46:28 +08:00
root
6156661a20 docs: update tasktracking with YAML indentation fix 2026-04-25 20:46:00 +08:00
root
d1e571adb7 fix: Clash proxy YAML indentation for Clash Verge compatibility
Proxy entry fields were at same indent level as list item marker,
causing "invalid yaml" in Clash Verge. Fixed to 4-space indent for
fields and 6-space for nested *-opts sub-fields.
2026-04-25 20:45:49 +08:00
root
e059425d92 chore: bump version to v1.7.2.2 2026-04-25 20:36:10 +08:00
root
ef9e123fcc style: gofmt web/service/setting.go 2026-04-25 20:35:10 +08:00
root
0366a21d6d fix: Clash proxy entries missing reality-opts, client-fingerprint, network
- Fix REALITY settings extraction: publicKey/shortIds/fingerprint are
  nested under realitySettings.settings, not directly under realitySettings
- Add network field to all proxy entries (default "tcp")
- Move non-REALITY fingerprint into else branch to avoid duplication
2026-04-25 20:32:30 +08:00
root
25cf22d161 feat: support full mihomo template and multi-server for Clash Link
- Add splitTemplate() to split at proxies:/proxy-groups: markers (like mihomo-gen)
- Store clash_template.yaml and servers.yaml as files alongside x-ui.json
- Add Clash/Servers editors in Xray advanced config page
- Support multi-server proxy generation (each server × each client)
- Remove inline template editor from Clash settings panel
- Bump version to v1.7.2.1
2026-04-25 18:23:42 +08:00
root
67c4f6a1ad fix: update rate limit tests to use CF-Connecting-IP header
The middleware was changed to trust CF-Connecting-IP instead of
X-Real-IP/X-Forwarded-For, but the tests still used the old headers.
TestRateLimitMiddleware_DifferentIPsIndependent was failing because
all requests fell back to the same httptest RemoteAddr.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-25 15:14:02 +08:00
root
b53703f1a1 fix: add -settingStatus CLI flag to reduce DB inits during install/update
Worker nodes with remote MariaDB experienced slow configuration because
config_after_update() and config_after_install() made 5-8 separate
x-ui setting CLI calls, each spawning a new Go process and re-initing
the DB connection. Add a single -settingStatus flag that returns all
needed info in one call, reducing DB inits from 5-6 down to 2.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-25 15:05:11 +08:00
root
88584a1f70 chore: bump version to v1.7.0.1 2026-04-25 11:46:40 +08:00
root
e29584258b docs: update tasktracking with CF-Connecting-IP trust 2026-04-25 11:45:22 +08:00
root
e035fb07a9 fix: trust Cloudflare CF-Connecting-IP for IP extraction
When behind Cloudflare CDN, RemoteAddr shows CF's IP, breaking rate
limiting and logging. Trust CF-Connecting-IP (set by CF, cannot be
spoofed by clients) and fall back to RemoteAddr for direct connections.
2026-04-25 11:45:07 +08:00
root
77d276da04 fix: add login rate limiting and prevent IP spoofing via headers
- Add RateLimitMiddleware(10/min) to POST /login (previously unprotected)
- Use RemoteAddr instead of X-Real-IP/X-Forwarded-For in getRemoteIp() and rate limiter
- Prevents brute-force login and rate-limit bypass via spoofed headers
2026-04-25 11:43:03 +08:00
root
61f7956af4 fix: unify master/worker connected nodes to single a-table
Replace worker's plain HTML table with the same a-table used by master,
fixing inconsistencies: missing role column, no error ellipsis, dead-code
empty state ternary, and duplicate a-empty elements.
2026-04-25 11:14:57 +08:00
root
badbbf71f5 fix: add retry for release upload to handle API propagation delay
gh release upload can fail with "release not found" when called
immediately after gh release create due to GitHub API propagation
delay. Add a 5s sleep after create and retry the upload up to 3 times.
2026-04-25 10:54:34 +08:00
root
350a5733c3 chore: bump version to v1.6.6.2 2026-04-25 10:46:53 +08:00
root
a25a42fb9b docs: add tasktracking for self-closing tag fix 2026-04-25 10:46:00 +08:00
root
5ce18ebfc1 fix: use explicit closing tags for a-empty components
Self-closing custom elements (<a-empty />) are invalid in HTML5
in-DOM templates. The browser treats them as opening tags, causing
subsequent sibling elements to become children. This made the
worker's node info table a child of the hidden <a-empty>, so it
never rendered when nodes.length > 0.
2026-04-25 10:45:23 +08:00
root
66de42f21b fix: node config save, dbType mismatch, and dark theme support
- ShouldBindJSON → ShouldBind with form tags (axios sends url-encoded)
- dbType dropdown value "mysql" → "mariadb" to match backend
- Replace inline styles with theme-aware CSS classes for dark mode
2026-04-25 10:19:41 +08:00
root
5bf2b5ef88 fix: replace v-else with v-if on node info table
v-else on <table> element was not recognized by Vue template compiler,
causing the worker node info table to never render. Use v-if="nodes.length > 0"
instead to ensure the table renders when data is available.
2026-04-25 09:49:32 +08:00
root
71f1de0b3d chore: bump version to v1.6.6 2026-04-25 09:38:49 +08:00
root
4e49f8c072 fix: replace a-descriptions with HTML table and fix ensureDefaultNodeSettings
- Replace a-descriptions/a-descriptions-item with plain HTML table in
  nodes.html — the components were missing from the antd.min.js bundle
  due to tree-shaking, causing the worker node view to render empty
- Fix ensureDefaultNodeSettings to write defaults to both "node" and
  "other" groups for backward compatibility (tests were failing)
2026-04-25 09:36:21 +08:00
root
e4855447cc docs: update tasktracking with v1.6.5 2026-04-24 22:08:21 +08:00
root
db2c78d0bb fix: add error logging for node state writes and queries
Silent error swallowing made it impossible to diagnose why worker
couldn't see master's heartbeat. Now logs errors from:
- updateNodeState upsert failures
- writeStateToSharedMariaDB connection/write failures
- getNodeStatesShared query failures
- list endpoint shows state count in logs

Also improved First() call to not overwrite state on error.

Bump version to v1.6.5.
2026-04-24 22:08:00 +08:00
root
c74b1cfb0f docs: update node management tasktracking with v1.6.4 fix 2026-04-24 21:30:42 +08:00
root
226bae2b2f fix: master heartbeat not visible to workers in shared MariaDB mode
When master uses SQLite locally, updateNodeState only wrote to local DB.
Workers querying shared MariaDB never saw the master's heartbeat.

Now master also writes its heartbeat to the shared MariaDB via a
temporary connection when MariaDB connection settings are configured.

Bump version to v1.6.4.
2026-04-24 21:29:57 +08:00
root
8f540db399 docs: update node management sidebar tasktracking with v1.6.3 fixes 2026-04-24 20:59:01 +08:00