3x-ui/internal/sub
Rouzbeh† 694ad6deae
feat(sub): add per-client subscription HWID limits (#5802)
* feat(sub): add per-client subscription HWID limits

* fix(sub): address HWID review on shared subId and bulk create

* fix(sub): store HWID devices by sub_id and drop anchor client workaround

* fix(sub): restore UA auto-detect and HTML page routing in subs()

The cherry-pick of the HWID gate onto main's refactored SUBController
had dropped main's UA-based format auto-detection and sub-page handling
from subs(). Restore those branches, slotting enforceHwid after the
HTML page and before format detection so the gate only applies to
machine-readable subscription bodies.

Also adapt tests to main's options-struct constructor and to the
ClientService.Update signature extended with limitHwid.

* fix(frontend): drop axios from HttpUtil.delete

The bulk-delete rework's committed version still referenced axios,
which this file no longer imports, breaking typecheck in CI. Use the
httpRequest wrapper like the other verbs.

---------

Co-authored-by: Sanaei <ho3ein.sanaei@gmail.com>
2026-08-15 16:50:20 +02:00
..
build_urls_test.go fix: resolve a batch of open bug-tagged issues (traffic accounting, share strategy, sub address, CPU) (#5477) 2026-06-22 00:22:28 +02:00
characterization_test.go fix(sub): restore client email in panel copy/QR link remark (#5532) 2026-06-24 15:25:41 +02:00
clash_external.go refactor(frontend): move form-item hints from extra to tooltip 2026-06-17 17:24:16 +02:00
clash_service.go fix(sub): quote Clash scalars a YAML parser would read as numbers (#6104) 2026-07-27 14:28:34 +02:00
clash_service_test.go fix(sub): include native WireGuard clients in Clash and JSON subscriptions (#5676) 2026-07-09 00:52:46 +02:00
clash_yaml.go style: drop the line comments added with the triage fixes 2026-07-27 14:37:57 +02:00
clash_yaml_test.go style: drop the line comments added with the triage fixes 2026-07-27 14:37:57 +02:00
controller.go feat(sub): add per-client subscription HWID limits (#5802) 2026-08-15 16:50:20 +02:00
controller_test.go feat(sub): add raw subscription download actions (#6017) 2026-07-21 15:52:33 +02:00
default.json
dist.go feat(sub): add raw subscription download actions (#6017) 2026-07-21 15:52:33 +02:00
endpoint.go fix(sub): carry a host's Final Mask into raw share links 2026-07-07 15:05:23 +02:00
endpoint_test.go fix(sub): carry a host's Final Mask into raw share links 2026-07-07 15:05:23 +02:00
export_all_links_test.go feat(inbounds): apply remark template to Export all inbound links 2026-06-27 11:22:45 +02:00
external_config.go chore: refresh dependencies, fix Linux tool tasks, modernize Go idioms 2026-07-25 16:08:09 +02:00
external_config_test.go fix(sub): preserve external link names in Clash/JSON (#6049) 2026-07-21 15:50:33 +02:00
external_only_sub_test.go feat(sub): auto-detect subscription format by User-Agent (Updated) (#5826) 2026-07-14 13:01:40 +02:00
external_subscription.go fix(sub): coalesce external subscription refreshes (#6139) 2026-07-29 20:58:00 +02:00
external_subscription_test.go chore: refresh dependencies and modernize Go test idioms 2026-07-30 03:14:22 +02:00
forwarded_trust.go fix(sub): honor trustedProxyCIDRs before forwarded URLs (#6135) 2026-07-29 21:01:59 +02:00
forwarded_trust_test.go chore: refresh dependencies and modernize Go test idioms 2026-07-30 03:14:22 +02:00
host_sub.go Bug-label issue sweep: 16 fixes (#6083) 2026-07-23 15:34:42 +02:00
host_sub_test.go Bug-label issue sweep: 16 fixes (#6083) 2026-07-23 15:34:42 +02:00
hwid_controller_test.go feat(sub): add per-client subscription HWID limits (#5802) 2026-08-15 16:50:20 +02:00
info_endpoint_test.go feat(sub): expose live online status and add ?format=info endpoint 2026-07-23 23:57:29 +02:00
json_flow_gate_test.go fix(sub): gate the VLESS flow in JSON subscriptions like raw and Clash links 2026-07-25 00:51:48 +02:00
json_service.go fix(sub): gate the VLESS flow in JSON subscriptions like raw and Clash links 2026-07-25 00:51:48 +02:00
json_service_test.go fix(sub): include native WireGuard clients in Clash and JSON subscriptions (#5676) 2026-07-09 00:52:46 +02:00
links.go feat(inbounds): apply remark template to Export all inbound links 2026-06-27 11:22:45 +02:00
links_test.go
mutation_audit_test.go fix(sub): resolve subscription clients and stats from normalized tables 2026-07-02 16:58:00 +02:00
page_data_test.go feat(sub): expose live online status and add ?format=info endpoint 2026-07-23 23:57:29 +02:00
remark_vars.go fix(sub): use a fullwidth percent in USAGE_PERCENTAGE (#6174) 2026-08-14 20:13:15 +02:00
remark_vars_test.go fix(sub): use a fullwidth percent in USAGE_PERCENTAGE (#6174) 2026-08-14 20:13:15 +02:00
service.go feat(sub): expose last subscription fetch time (#6217) 2026-08-15 15:22:11 +02:00
service_dedup_test.go fix(sub): resolve subscription clients and stats from normalized tables 2026-07-02 16:58:00 +02:00
service_flow_test.go feat(hosts): managed Hosts for per-host subscription link overrides (#5409) 2026-06-17 12:06:55 +02:00
service_mtproto_test.go fix(mtproto): drop the remark fragment from tg proxy deep links 2026-07-06 17:55:35 +02:00
service_orphaned_stats_test.go chore: bump deps and modernize test loops 2026-06-26 00:10:30 +02:00
service_property_test.go
service_sharelink_test.go feat(reality): derive a stable per-client spiderX for shared links 2026-07-02 12:53:08 +02:00
service_sort_test.go feat(hosts): managed Hosts for per-host subscription link overrides (#5409) 2026-06-17 12:06:55 +02:00
service_test.go feat(sub): Add XHTTP session field compatibility in share links and subscriptions (#5929) 2026-07-28 22:15:28 +02:00
service_userinfo_test.go
service_wireguard_test.go fix(wireguard): preserve all Allowed IPs in share link, .conf, and subscription (#6051) 2026-07-21 15:50:16 +02:00
sub.go fix(web): report unexpected HTTP serve failures (#6210) 2026-08-14 19:40:53 +02:00
sub_fetch_test.go feat(sub): expose last subscription fetch time (#6217) 2026-08-15 15:22:11 +02:00
sub_panic_test.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
sub_scale_test.go feat(sub): auto-detect subscription format by User-Agent (Updated) (#5826) 2026-07-14 13:01:40 +02:00
vless_route.go fix(sub): bake Host VLESS Route into subscription UUIDs 2026-06-29 14:32:23 +02:00
vless_route_sub_test.go feat(sub): auto-detect subscription format by User-Agent (Updated) (#5826) 2026-07-14 13:01:40 +02:00
vless_route_test.go fix(sub): bake Host VLESS Route into subscription UUIDs 2026-06-29 14:32:23 +02:00