3x-ui/web/service
Rouzbeh† d9ccf157c3
feat: add manual and automatic WARP IP rotation (#5099)
* feat: add manual and automatic WARP IP rotation

* fix: update generated api and frontend schemas

* fix(warp): validate rotation interval, fix auto-update timing, sync editor

- Validate the auto-update interval as an integer and store it via setInt;
  a non-integer value previously broke GetAllSetting for the whole panel.
- Seed warpLastUpdate when the interval is saved and when changing IP
  manually, so auto-update counts from "now" instead of epoch 0 and a
  manual rotation doesn't trigger an immediate scheduled one.
- Guard WarpIpJob: when lastUpdate is unset, establish a baseline and skip
  instead of rotating on the next tick.
- Log WARP license re-apply failures instead of swallowing them.
- After a manual "Change IP", sync the in-memory Xray editor with the keys
  the backend persisted so a later template save can't revert them; only
  toast success when the interval save actually succeeds.
- Add the WARP rotation UI strings to all 13 locales.
- Drop trailing whitespace introduced in entity.go and xray_setting.go.

---------

Co-authored-by: Rqzbeh <Rqzbeh@example.com>
Co-authored-by: Sanaei <ho3ein.sanaei@gmail.com>
2026-06-09 01:43:43 +02:00
..
api_scale_postgres_test.go feat(mtproto): add MTProto (FakeTLS) protocol via managed mtg sidecar (#5076) 2026-06-08 14:28:19 +02:00
api_token.go feat(api-docs): generate response examples from Go structs; fix SS2022 PSK regen (#4996) 2026-06-06 14:58:15 +02:00
bulk_clients_test.go perf(clients): batch bulk attach/detach to cut per-item DB work 2026-06-02 03:59:10 +02:00
bulk_traffic_test.go perf(clients): scale-audit remaining client/inbound endpoints to 200k 2026-06-04 21:32:15 +02:00
client.go feat(groups): show used traffic per group in groups table 2026-06-08 23:47:59 +02:00
client_email_validation_test.go fix(clients): reject spaces, '/', '\' and control chars in subscription ID 2026-05-30 23:28:58 +02:00
client_flow_isolation_test.go fix(clients): keep reverse tag clearable and preserve flow on attach 2026-06-02 23:47:03 +02:00
client_group_node_sync_test.go fix(node): keep client/inbound edits working when a node is offline (#4923, #4931) 2026-06-05 02:26:57 +02:00
client_sync_multiprotocol_test.go test: name temp sqlite db x-ui.db to match the real db filename 2026-05-31 15:25:05 +02:00
client_test.go Feat/multi inbound clients (#4469) 2026-05-19 12:20:24 +02:00
config.json fix(xray): default freedom finalRules to allow-all so reverse egress works 2026-06-02 15:58:48 +02:00
custom_geo.go fix(panel-proxy): route custom geo and http(s) Telegram through panelProxy 2026-06-03 14:57:49 +02:00
custom_geo_test.go fix(panel-proxy): route custom geo and http(s) Telegram through panelProxy 2026-06-03 14:57:49 +02:00
fallback.go fix(fallbacks): allow free-form dest entries for external servers (#4748) 2026-06-02 00:17:21 +02:00
inbound.go fix: propagate inbound traffic reset to nodes (#5103) 2026-06-09 01:26:30 +02:00
inbound_client_ips_merge_test.go feat: synchronize access.log client IPs across nodes (#5098) 2026-06-09 00:59:50 +02:00
inbound_client_traffic_test.go fix(traffic): count local traffic for clients whose shared row is node-owned (#4921) 2026-06-05 00:24:01 +02:00
inbound_migration_test.go fix(postgres): commit client traffic backfill in migration 2026-06-01 00:43:42 +02:00
inbound_update_tag_test.go fix(inbound): re-derive auto tags on edit and keep node tags consistent 2026-06-01 05:08:29 +02:00
metric_history.go feat(dashboard): more System History metrics, persistence & localized labels 2026-06-03 12:16:31 +02:00
node.go fix(inbounds): drop unknown nodeId when importing an inbound 2026-06-08 23:04:19 +02:00
node_client_traffic_sum_test.go fix(node): keep client/inbound edits working when a node is offline (#4923, #4931) 2026-06-05 02:26:57 +02:00
node_dirty_test.go fix(node): keep client/inbound edits working when a node is offline (#4923, #4931) 2026-06-05 02:26:57 +02:00
node_origin_guid_test.go feat(nodes): multi-hop node attribution for chained sub-nodes (#4983) (#5005) 2026-06-06 12:33:39 +02:00
node_tag_sync_test.go fix(node): keep client/inbound edits working when a node is offline (#4923, #4931) 2026-06-05 02:26:57 +02:00
node_test.go Feat/multi inbound clients (#4469) 2026-05-19 12:20:24 +02:00
node_tree.go feat(nodes): add distinct purple indicator when panel is online but Xray core failed (#5040) 2026-06-08 20:24:00 +02:00
node_tree_test.go feat(nodes): multi-hop node attribution for chained sub-nodes (#4983) (#5005) 2026-06-06 12:33:39 +02:00
nord.go feat(xray/nord): searchable server list + colored load tag, surface API errors 2026-05-11 10:06:01 +02:00
outbound.go fix(xray): test UDP outbounds via xray probe (#4657) + Vision testseed & Flow form fixes 2026-05-29 21:07:01 +02:00
outbound_subscription.go feat: add support for subscription-based outbounds with auto-update (#5037) 2026-06-08 18:09:53 +02:00
outbound_subscription_test.go feat: add support for subscription-based outbounds with auto-update (#5037) 2026-06-08 18:09:53 +02:00
panel.go feat(settings): panel network proxy for the panel's own outbound requests 2026-05-28 00:45:32 +02:00
panel_other.go feat: add panel update functionality via web GUI (#4117) 2026-04-28 18:46:55 +02:00
panel_proxy_test.go fix(panel-proxy): route custom geo and http(s) Telegram through panelProxy 2026-06-03 14:57:49 +02:00
panel_test.go feat: add panel update functionality via web GUI (#4117) 2026-04-28 18:46:55 +02:00
panel_unix.go feat: add panel update functionality via web GUI (#4117) 2026-04-28 18:46:55 +02:00
port_conflict.go feat(mtproto): add MTProto (FakeTLS) protocol via managed mtg sidecar (#5076) 2026-06-08 14:28:19 +02:00
port_conflict_test.go fix(inbounds): drop listen address from auto-generated inbound tag 2026-06-01 09:33:49 +02:00
server.go feat(nodes): multi-hop node attribution for chained sub-nodes (#4983) (#5005) 2026-06-06 12:33:39 +02:00
server_vlessenc_test.go Feat: clarify VLESS encryption auth selection (#4271) 2026-05-12 11:39:28 +02:00
setting.go feat: add manual and automatic WARP IP rotation (#5099) 2026-06-09 01:43:43 +02:00
setting_security_test.go feat(api-tokens): manage multiple named tokens; add tab/section anchor URLs 2026-05-13 16:34:31 +02:00
sub_uri_base_test.go style: gofmt -s (doc-comment list separator, struct field alignment) 2026-06-02 03:58:58 +02:00
sync_scale_postgres_test.go perf(clients): chunk IN queries and de-quadratic bulk delete/group/list 2026-06-04 20:35:30 +02:00
tgbot.go fix(tgbot): ignore commands for other bots (#4894) 2026-06-04 21:45:44 +02:00
tgbot_test.go fix(tgbot): ignore commands for other bots (#4894) 2026-06-04 21:45:44 +02:00
traffic_writer.go Fix: traffic writer restart freeze (#4265) 2026-05-12 11:36:05 +02:00
traffic_writer_test.go Fix: traffic writer restart freeze (#4265) 2026-05-12 11:36:05 +02:00
url_safety.go Security hardening: sessions, SSRF, CSP nonce, CSRF logout, trusted proxies (#4275) 2026-05-13 12:52:52 +02:00
user.go fix(auth): invalidate sessions when 2FA is enabled, fix dev 401 loop 2026-05-13 14:08:16 +02:00
warp.go feat: add manual and automatic WARP IP rotation (#5099) 2026-06-09 01:43:43 +02:00
websocket.go v3 2026-05-10 02:13:42 +02:00
xray.go feat: add support for subscription-based outbounds with auto-update (#5037) 2026-06-08 18:09:53 +02:00
xray_metrics.go Security hardening: sessions, SSRF, CSP nonce, CSRF logout, trusted proxies (#4275) 2026-05-13 12:52:52 +02:00
xray_setting.go feat: add manual and automatic WARP IP rotation (#5099) 2026-06-09 01:43:43 +02:00
xray_setting_test.go Feat/multi inbound clients (#4469) 2026-05-19 12:20:24 +02:00