mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-11-02 03:05:02 +03:00
fea3c94b11
* feat(xhttp): support sessionID* rename + sessionIDTable/Length (xray v26.6.22) xray-core v26.6.22 (PR #6258) renamed the XHTTP session config keys sessionPlacement/sessionKey to sessionIDPlacement/sessionIDKey (no fallback kept in core) and added sessionIDTable (predefined charset name or literal ASCII) and sessionIDLength (range, e.g. 16-32, lower bound > 0). Panel changes: - Schema (xhttp.ts): rename the two keys, add sessionIDTable/sessionIDLength, and a z.preprocess that lifts legacy keys off stored configs so an upgraded panel never silently drops a saved session setting. - Wire normalize + share-link build/parse: rename keys, emit the two new fields, and accept legacy sessionPlacement/sessionKey from old share links. - Inbound + outbound XHTTP forms: rename field paths, add a sessionIDTable autocomplete (9 predefined tables + free ASCII) and a sessionIDLength range input shown only when a table is set, with light client validation (ASCII table, length min > 0; xray enforces the room-size minimum server-side). - Subscription (service.go) and Clash (clash_service.go) builders: emit the renamed + new keys, with a legacy fallback for not-yet-resaved inbounds. - Locales: add sessionIDTable/sessionIDLength labels + hints in all 13 files. Two sibling v26.6.22 XHTTP commits need no panel change and are covered by the core bump alone: #6332 (XHTTP/3 closes QUIC/UDP) and #6320 (udpHop honors the existing dialerProxy). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * test(xhttp): add Session ID Table to inbound form-blocks snapshot The new sessionIDTable input renders by default in the inbound XHTTP form, so its label joins the field-structure snapshot. sessionIDLength stays conditional (only shown when a table is set), so it does not appear here. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(xhttp): migrate legacy session keys in the running xray config The Zod preprocess plus the subscription/Clash fallbacks only covered the panel UI and share-link output. The config handed to the running xray-core process is built from the raw stored streamSettings in GetXrayConfig, which did not rewrite the renamed XHTTP session keys — so a pre-upgrade inbound (or template outbound) stored with a non-default sessionPlacement was emitted unchanged and dropped by xray-core v26.6.22, until the admin re-saved it. Lift sessionPlacement/sessionKey onto sessionIDPlacement/sessionIDKey at config-generation time, in the existing inbound stream-rewrite block (next to the tls/reality/externalProxy handling) and across template outbounds. The lift is idempotent and leaves unchanged configs byte-identical so the hot-reload diff never sees a spurious change. Also tighten validateSessionIDLength to reject an inverted range (e.g. 32-16) in addition to the existing lower-bound > 0 check. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(xray): avoid summed-capacity allocation in mergeSubscriptionOutbounds CodeQL go/allocation-size-overflow flagged the pre-sized make() whose capacity was a sum of three slice lengths. Grow the slice via append on a nil slice instead; same result, no overflow-prone capacity expression.
127 lines
2.2 KiB
Plaintext
127 lines
2.2 KiB
Plaintext
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
|
|
exports[`inbound security forms > RealityForm field structure is stable 1`] = `
|
|
[
|
|
"Show",
|
|
"Xver",
|
|
"uTLS",
|
|
"Target",
|
|
"SNI",
|
|
"Max Time Diff (ms)",
|
|
"Min Client Ver",
|
|
"Max Client Ver",
|
|
"Short IDs",
|
|
"SpiderX",
|
|
"Public Key",
|
|
"Private Key",
|
|
"mldsa65 Seed",
|
|
"mldsa65 Verify",
|
|
"Master Key Log",
|
|
]
|
|
`;
|
|
|
|
exports[`inbound security forms > TlsForm field structure is stable 1`] = `
|
|
[
|
|
"SNI",
|
|
"Cipher Suites",
|
|
"Min/Max Version",
|
|
"uTLS",
|
|
"ALPN",
|
|
"Curve Preferences",
|
|
"Reject Unknown SNI",
|
|
"Disable System Root",
|
|
"Session Resumption",
|
|
"Digital Certificate",
|
|
"Master Key Log",
|
|
"ECH Sockopt",
|
|
"ECH key",
|
|
"ECH config",
|
|
"Pinned Peer Cert SHA-256",
|
|
"Verify Peer Cert By Name",
|
|
]
|
|
`;
|
|
|
|
exports[`inbound transport forms > GrpcForm field structure is stable 1`] = `
|
|
[
|
|
"Service Name",
|
|
"Authority",
|
|
"Multi Mode",
|
|
]
|
|
`;
|
|
|
|
exports[`inbound transport forms > HttpUpgradeForm field structure is stable 1`] = `
|
|
[
|
|
"Proxy Protocol",
|
|
"Host",
|
|
"Path",
|
|
"Headers",
|
|
]
|
|
`;
|
|
|
|
exports[`inbound transport forms > KcpForm field structure is stable 1`] = `
|
|
[
|
|
"MTU",
|
|
"TTI (ms)",
|
|
"Uplink (MB/s)",
|
|
"Downlink (MB/s)",
|
|
"CWND Multiplier",
|
|
"Max Sending Window",
|
|
]
|
|
`;
|
|
|
|
exports[`inbound transport forms > RawForm field structure is stable 1`] = `
|
|
[
|
|
"Proxy Protocol",
|
|
"HTTP Obfuscation",
|
|
]
|
|
`;
|
|
|
|
exports[`inbound transport forms > SockoptForm field structure is stable (server-side fields only) 1`] = `
|
|
[
|
|
"Sockopt",
|
|
"Real client IP",
|
|
"Route Mark",
|
|
"TCP Keep Alive Interval",
|
|
"TCP Keep Alive Idle",
|
|
"TCP Max Seg",
|
|
"TCP User Timeout",
|
|
"TCP Window Clamp",
|
|
"Proxy Protocol",
|
|
"TCP Fast Open",
|
|
"Penetrate",
|
|
"V6 Only",
|
|
"TCP Congestion",
|
|
"TProxy",
|
|
"Trusted X-Forwarded-For",
|
|
"Custom sockopt",
|
|
]
|
|
`;
|
|
|
|
exports[`inbound transport forms > WsForm field structure is stable 1`] = `
|
|
[
|
|
"Proxy Protocol",
|
|
"Host",
|
|
"Path",
|
|
"Heartbeat Period",
|
|
"Headers",
|
|
]
|
|
`;
|
|
|
|
exports[`inbound transport forms > XhttpForm field structure is stable 1`] = `
|
|
[
|
|
"Host",
|
|
"Path",
|
|
"Mode",
|
|
"Server Max Header Bytes",
|
|
"Padding Bytes",
|
|
"Headers",
|
|
"Uplink HTTP Method",
|
|
"Padding Obfs Mode",
|
|
"Session Placement",
|
|
"Session ID Table",
|
|
"Sequence Placement",
|
|
"No SSE Header",
|
|
"XMUX",
|
|
]
|
|
`;
|