3x-ui/internal/web/service
Sanaei 8ef2eec3d1 fix(hosts): assign group ids to imported hosts and repair empty ones
Host rows created from a legacy streamSettings.externalProxy during
inbound import got an empty group_id, and the one-time HostGroupIds
seeder had already been gated off, so the UI rendered them under a
synthetic fallback_<id> group the update/delete API could not resolve,
failing every edit with "host group not found".

Assign a real group id in externalProxyEntryToHost at creation, and
replace the seeder with backfillEmptyHostGroupIds, an idempotent
startup repair that runs on every boot so rows from older builds and
restored backups are healed too. Also rename the leaked internal
error "host group not found" to "host not found" since groups are not
a user-facing concept.
2026-07-23 18:52:42 +02:00
..
email Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
integration Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
outbound feat: Add outbound egress metadata (IP + country) (#5886) 2026-07-12 15:09:52 +02:00
panel fix: make all self-managed file downloads/installs atomic, with real completion status (#5711) 2026-07-02 18:19:33 +02:00
tgbot Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
access_log_parse_test.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
api_scale_postgres_test.go
backup_filename_test.go feat(backup): prefix backup filenames with date and time (#5606) 2026-06-27 12:08:20 +02:00
bulk_clients_test.go fix(node): stop client edits from tearing down node inbounds and harden reconcile fingerprints 2026-07-05 02:06:58 +02:00
bulk_traffic_test.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
client.go
client_add_dedupe_test.go fix(client): stop duplicate client entries accumulating in inbound settings 2026-07-05 21:17:25 +02:00
client_apply_field_test.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
client_bulk.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
client_bulk_flow_test.go style: adopt golangci-lint v2 and resolve all findings 2026-06-27 15:42:22 +02:00
client_bulk_reenable_test.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
client_bulk_reset_reenable_test.go fix(clients): surface bulk-reset auto-enable failures (#5763) 2026-07-08 20:53:42 +02:00
client_create_reuse_test.go fix(clients): reuse stored credentials when re-adding an existing identity 2026-07-11 22:48:51 +02:00
client_crud.go fix(clients): persist all editable fields for clients with no inbound (#6053) 2026-07-21 15:49:43 +02:00
client_delete_continue_test.go fix(clients): finish deleting from every inbound when one fails 2026-07-11 22:48:57 +02:00
client_delete_node_baseline_test.go fix(client): clean node_client_traffics rows when deleting a client 2026-07-07 15:05:22 +02:00
client_delete_node_full_test.go fix(node): fully delete clients on nodes instead of only detaching them 2026-07-05 20:28:26 +02:00
client_effective_flow_test.go fix(flow): restore XTLS Vision when an inbound becomes flow-eligible (#5520) 2026-06-24 13:02:42 +02:00
client_email_validation_test.go
client_external_link.go
client_flow_isolation_test.go
client_group_node_sync_test.go
client_group_reset_test.go fix(groups): keep group traffic totals stable across client resets and deletes 2026-07-02 09:17:47 +02:00
client_groups.go refactor: use the built-in max/min to simplify the code (#5751) 2026-07-05 01:58:18 +03:00
client_inbound_apply.go fix(clients): allow case-only email updates without duplicates (#6050) 2026-07-21 15:50:50 +02:00
client_link.go fix(clients): persist all editable fields for clients with no inbound (#6053) 2026-07-21 15:49:43 +02:00
client_locks.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
client_locks_test.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
client_lookup.go fix(flow): restore XTLS Vision when an inbound becomes flow-eligible (#5520) 2026-06-24 13:02:42 +02:00
client_paging.go fix(clients): include Telegram ID in client list search (#5888) 2026-07-10 12:20:35 +02:00
client_portable.go fix(groups): keep group traffic totals stable across client resets and deletes 2026-07-02 09:17:47 +02:00
client_stat_reuse_test.go fix: refresh stale client_traffics row when an inbound-deleted client's email is reused (#6003) 2026-07-21 15:57:55 +02:00
client_sync_mtproto_test.go feat(mtproto): per-client ad-tags, management-API auth, and record secret sync 2026-07-07 12:00:43 +02:00
client_sync_multiprotocol_test.go
client_test.go
client_traffic.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
client_update_enable_test.go fix(clients): re-enable depleted clients on API renewal (#5619) 2026-06-29 13:39:03 +02:00
client_update_no_inbound_test.go fix(clients): persist all editable fields for clients with no inbound (#6053) 2026-07-21 15:49:43 +02:00
client_update_rename_test.go fix(clients): allow case-only email updates without duplicates (#6050) 2026-07-21 15:50:50 +02:00
client_wireguard.go feat(wireguard): make client allowedIPs editable with validation 2026-07-02 09:45:54 +02:00
client_wireguard_crud_test.go fix(node): fully delete clients on nodes instead of only detaching them 2026-07-05 20:28:26 +02:00
client_wireguard_test.go feat(wireguard): make client allowedIPs editable with validation 2026-07-02 09:45:54 +02:00
config.json Bug-label issue sweep: 16 fixes (#6083) 2026-07-23 15:34:42 +02:00
del_shared_email_runtime_test.go fix(node): fully delete clients on nodes instead of only detaching them 2026-07-05 20:28:26 +02:00
fallback.go style: adopt golangci-lint v2 and resolve all findings 2026-06-27 15:42:22 +02:00
global_traffic_test.go fix(node): stop force-restarting a node's Xray when its clients auto-disable 2026-07-02 13:27:36 +02:00
host.go fix(hosts): assign group ids to imported hosts and repair empty ones 2026-07-23 18:52:42 +02:00
host_test.go feat(hosts): bulk-add multiple hosts to multiple inbounds (#5677) 2026-07-08 23:35:20 +02:00
inbound.go Bug-label issue sweep: 16 fixes (#6083) 2026-07-23 15:34:42 +02:00
inbound_autorenew_test.go
inbound_client_ips.go fix(node): stop Postgres deadlocks and deleted-client resurrection in node sync 2026-07-02 13:37:06 +02:00
inbound_client_ips_merge_test.go
inbound_client_move_test.go Bug-label issue sweep: 16 fixes (#6083) 2026-07-23 15:34:42 +02:00
inbound_client_traffic_test.go fix(traffic): persist delayed-start expiry only for converted clients 2026-07-02 16:24:18 +02:00
inbound_clients.go Bug-label issue sweep: 16 fixes (#6083) 2026-07-23 15:34:42 +02:00
inbound_disable.go fix(traffic): disable depleted clients by id instead of a second full scan 2026-07-02 16:24:18 +02:00
inbound_durable_postgres_test.go fix(inbounds): apply runtime changes after the DB commit (#5768) 2026-07-08 22:12:28 +02:00
inbound_fallback_runtime_test.go Bug-label issue sweep: 16 fixes (#6083) 2026-07-23 15:34:42 +02:00
inbound_finalmask_reality_test.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
inbound_flow_restore.go fix(flow): restore XTLS Vision when an inbound becomes flow-eligible (#5520) 2026-06-24 13:02:42 +02:00
inbound_flow_restore_test.go fix(flow): restore XTLS Vision when an inbound becomes flow-eligible (#5520) 2026-06-24 13:02:42 +02:00
inbound_import_external_proxy_test.go fix(inbound): convert legacy externalProxy to hosts on import 2026-06-27 13:50:06 +02:00
inbound_import_shared_clients_test.go fix: refresh stale client_traffics row when an inbound-deleted client's email is reused (#6003) 2026-07-21 15:57:55 +02:00
inbound_migration.go style: adopt golangci-lint v2 and resolve all findings 2026-06-27 15:42:22 +02:00
inbound_migration_test.go
inbound_mtproto.go feat(mtproto): enforce per-client quota & expiry via mtg-multi limits 2026-07-08 15:30:56 +02:00
inbound_mtproto_apply_test.go fix(mtproto): stop dropping connections on client/inbound edits; add live updates + ad-tag (#5838) 2026-07-07 01:13:24 +02:00
inbound_mtproto_client_test.go fix(mtproto): stop dropping connections on client/inbound edits; add live updates + ad-tag (#5838) 2026-07-07 01:13:24 +02:00
inbound_mtproto_desired_test.go fix(mtproto): stop dropping connections on client/inbound edits; add live updates + ad-tag (#5838) 2026-07-07 01:13:24 +02:00
inbound_mtproto_test.go fix(mtproto): stop persisting a vestigial inbound-level secret 2026-07-06 17:55:57 +02:00
inbound_mtproto_txfail_test.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
inbound_node.go Bug-label issue sweep: 16 fixes (#6083) 2026-07-23 15:34:42 +02:00
inbound_node_ips.go fix(node): stop Postgres deadlocks and deleted-client resurrection in node sync 2026-07-02 13:37:06 +02:00
inbound_node_ips_test.go fix(nodes): cloned-node attribution, node-hosted client display (online/speed/counts), and sync robustness (#5488) 2026-06-22 20:20:55 +02:00
inbound_node_reconcile_test.go fix(node): never sweep a node's inbounds before their first adoption 2026-07-11 22:48:57 +02:00
inbound_options_node_address_test.go fix(panel): use the hosting node address for WireGuard client configs (#5679) 2026-07-03 01:12:32 +02:00
inbound_protocol.go
inbound_protocol_test.go
inbound_settings_clients.go fix(clients): parse only settings.clients across protocols (#5855) 2026-07-08 20:31:00 +02:00
inbound_settings_clients_test.go fix(clients): parse only settings.clients across protocols (#5855) 2026-07-08 20:31:00 +02:00
inbound_sub_sort_test.go
inbound_sublink.go feat(inbounds): apply remark template to Export all inbound links 2026-06-27 11:22:45 +02:00
inbound_tgbot_lookup_test.go fix(tgbot): find clients by tgId regardless of settings JSON formatting 2026-07-05 20:18:59 +02:00
inbound_traffic.go fix: refresh stale client_traffics row when an inbound-deleted client's email is reused (#6003) 2026-07-21 15:57:55 +02:00
inbound_traffic_global.go
inbound_update_tag_test.go fix(inbound): scope port-conflict check to the stored node on update (#5833) 2026-07-09 01:18:30 +02:00
inbound_util.go
key_gen_parse_test.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
metric_history.go perf(metrics): tiered rollup history (7d at ~1.5MB) and cleaner ranges 2026-06-25 23:30:13 +02:00
metric_history_test.go chore: bump deps and modernize test loops 2026-06-26 00:10:30 +02:00
mtproto_fake_test.go fix(mtproto): stop dropping connections on client/inbound edits; add live updates + ad-tag (#5838) 2026-07-07 01:13:24 +02:00
node.go fix(nodes): make node API tokens write-only (#5613) 2026-07-23 15:35:11 +02:00
node_bulk_dispatch_test.go fix(inbounds): apply runtime changes after the DB commit (#5768) 2026-07-08 22:12:28 +02:00
node_client_breakdown_test.go fix(inbounds): apply runtime changes after the DB commit (#5768) 2026-07-08 22:12:28 +02:00
node_client_expiry_sync_test.go fix(node): show the activated first-use deadline on the Clients page 2026-07-02 09:36:07 +02:00
node_client_renew_sync_test.go fix(node): start a fresh quota window when a node auto-renews a client 2026-07-07 15:05:23 +02:00
node_client_traffic_sum_test.go fix(node): stop Postgres deadlocks and deleted-client resurrection in node sync 2026-07-02 13:37:06 +02:00
node_contract.go fix(nodes): make node API tokens write-only (#5613) 2026-07-23 15:35:11 +02:00
node_credentials_writeonly_test.go fix(nodes): make node API tokens write-only (#5613) 2026-07-23 15:35:11 +02:00
node_delete_orphan_test.go
node_dirty_test.go fix(node): fully delete clients on nodes instead of only detaching them 2026-07-05 20:28:26 +02:00
node_host_adopt_test.go fix(node): adopt a node inbound's host overrides into the master 2026-07-11 23:17:57 +02:00
node_mtls.go
node_mtls_test.go style: adopt golangci-lint v2 and resolve all findings 2026-06-27 15:42:22 +02:00
node_netmetrics_test.go
node_origin_guid_test.go fix(nodes): cloned-node attribution, node-hosted client display (online/speed/counts), and sync robustness (#5488) 2026-06-22 20:20:55 +02:00
node_shared_guid_test.go fix(nodes): cloned-node attribution, node-hosted client display (online/speed/counts), and sync robustness (#5488) 2026-06-22 20:20:55 +02:00
node_tag_sync_test.go
node_test.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
node_tree.go fix(nodes): make node API tokens write-only (#5613) 2026-07-23 15:35:11 +02:00
node_tree_test.go fix(inbounds): apply runtime changes after the DB commit (#5768) 2026-07-08 22:12:28 +02:00
outbound_subscription.go Bug-label issue sweep: 16 fixes (#6083) 2026-07-23 15:34:42 +02:00
outbound_subscription_ssrf_test.go Bug-label issue sweep: 16 fixes (#6083) 2026-07-23 15:34:42 +02:00
outbound_subscription_test.go fix(subscription): bound outbound response body (#5493) 2026-06-23 10:48:01 +02:00
port_conflict.go
port_conflict_test.go style: adopt golangci-lint v2 and resolve all findings 2026-06-27 15:42:22 +02:00
reality_scan.go Bug-label issue sweep: 16 fixes (#6083) 2026-07-23 15:34:42 +02:00
reality_scan_test.go Bug-label issue sweep: 16 fixes (#6083) 2026-07-23 15:34:42 +02:00
reset_writer_test.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
scale_helpers_test.go refactor: modernize Go with strings.SplitSeq and maps.Copy 2026-07-08 22:10:54 +02:00
server.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
server_import_sniff_test.go feat(server): sniff sqlite panel restore uploads and keep the fallback on failure 2026-07-12 20:14:22 +02:00
server_import_stage_test.go feat(server): sniff sqlite panel restore uploads and keep the fallback on failure 2026-07-12 20:14:22 +02:00
server_pg_restore_test.go feat(db): add pgclient command to install or upgrade PostgreSQL client tools 2026-07-06 09:24:18 +02:00
server_vlessenc_test.go feat(web): vless encryption new modes (#5517) 2026-06-24 21:22:42 +02:00
server_xray_checksum_test.go
setting.go feat(notifications): add a consecutive-failure threshold for outbound.down alerts (#5968) 2026-07-21 15:59:07 +02:00
setting_clash_test.go feat(sub): auto-detect subscription format by User-Agent (Updated) (#5826) 2026-07-14 13:01:40 +02:00
setting_mtls.go
setting_mtls_test.go
setting_security_test.go feat(settings): let users clear stored secrets from the UI 2026-07-02 13:57:34 +02:00
shadowsocks_client_key_test.go
stream_network_alias_test.go feat(xray): update xray-core to v26.7.11 and adapt panel 2026-07-12 00:30:47 +02:00
sub_uri_base_test.go
sync_scale_postgres_test.go fix(node): fully delete clients on nodes instead of only detaching them 2026-07-05 20:28:26 +02:00
traffic_commit_test.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
traffic_poll_scale_test.go test(scale): cover traffic poll, ws payloads, ip-limit job, sub and xray config at 500k 2026-07-02 16:12:46 +02:00
traffic_writer.go
traffic_writer_test.go
url_safety.go
ws_payload_scale_test.go test(scale): cover traffic poll, ws payloads, ip-limit job, sub and xray config at 500k 2026-07-02 16:12:46 +02:00
xray.go fix(xray): validate generated egress targets (#5989) 2026-07-21 15:57:34 +02:00
xray_config_inject_test.go fix(xray): validate generated egress targets (#5989) 2026-07-21 15:57:34 +02:00
xray_config_scale_test.go test(scale): cover traffic poll, ws payloads, ip-limit job, sub and xray config at 500k 2026-07-02 16:12:46 +02:00
xray_metrics.go Bug-label issue sweep: 16 fixes (#6083) 2026-07-23 15:34:42 +02:00
xray_metrics_test.go Bug-label issue sweep: 16 fixes (#6083) 2026-07-23 15:34:42 +02:00
xray_restart_test.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
xray_setting.go fix: gate embedded unencrypted-outbound rejection on running Xray core version (#6028) 2026-07-21 15:51:46 +02:00
xray_setting_dns_routing.go Bug-label issue sweep: 16 fixes (#6083) 2026-07-23 15:34:42 +02:00
xray_setting_dns_routing_test.go Bug-label issue sweep: 16 fixes (#6083) 2026-07-23 15:34:42 +02:00
xray_setting_routing_sync.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
xray_setting_routing_sync_test.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
xray_setting_test.go fix: gate embedded unencrypted-outbound rejection on running Xray core version (#6028) 2026-07-21 15:51:46 +02:00
xray_strip_rules_test.go
xray_wireguard_config_test.go feat(wireguard): multi-client support 2026-06-28 00:44:38 +02:00
xray_xhttp_session_test.go feat(xhttp): support sessionID* rename + sessionIDTable/Length (xray v26.6.22) (#5506) 2026-06-23 17:38:16 +02:00