mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-06-05 12:44:22 +00:00
Fifth and sixth link generators. genHysteriaLink builds the v1/v2 share URL (scheme picked from settings.version), copying TLS knobs into the query, surfacing the salamander obfs password from finalmask.udp[type=salamander] when present, and writing the broader finalmask payload under `fm` like the other links. Legacy parity note: the old genHysteriaLink read stream.tls.settings.allowInsecure, which isn't a field on TlsStreamSettings.Settings — the guard always evaluated false and the `insecure` param never made it into the URL. We omit it here to stay byte-stable. genWireguardLink and genWireguardConfig take a typed WireguardInboundSettings + peer index and: - link: wireguard://<peerPriv>@host:port?publickey=&address=&mtu=#remark - config: the .conf text WireGuard clients consume directly Both derive the server pubKey from settings.secretKey via Wireguard.generateKeypair at call time — Zod stores only secretKey on the wire (pubKey is computed). The Wireguard utility is pure JS (X25519 over Float64Array), so it runs fine under node + the window polyfill we added with the vmess extraction. Two new full-inbound fixtures (hysteria-v1-tls, wireguard-server) plus matching parity tests bring the suite to 78 tests across 8 files; typecheck + lint clean. Hysteria2 (protocol literal) parity stays deferred — the legacy class has no HYSTERIA2 dispatch case, so it can't round-trip a hysteria2 fixture without a protocol remap. Same trick the shadow harness uses; revisit in the orchestrator commit.
67 lines
1.5 KiB
JSON
67 lines
1.5 KiB
JSON
{
|
|
"id": 21,
|
|
"up": 0,
|
|
"down": 0,
|
|
"total": 0,
|
|
"remark": "gina-hysteria-v1",
|
|
"enable": true,
|
|
"expiryTime": 0,
|
|
"listen": "",
|
|
"port": 36715,
|
|
"tag": "inbound-hysteria-v1",
|
|
"sniffing": {
|
|
"enabled": false,
|
|
"destOverride": ["http", "tls", "quic", "fakedns"],
|
|
"metadataOnly": false,
|
|
"routeOnly": false,
|
|
"ipsExcluded": [],
|
|
"domainsExcluded": []
|
|
},
|
|
"protocol": "hysteria",
|
|
"settings": {
|
|
"version": 1,
|
|
"clients": [
|
|
{
|
|
"auth": "hyst-v1-auth-XYZ",
|
|
"email": "gina@example.test",
|
|
"limitIp": 0,
|
|
"totalGB": 0,
|
|
"expiryTime": 0,
|
|
"enable": true,
|
|
"tgId": 0,
|
|
"subId": "hy1-001",
|
|
"comment": "",
|
|
"reset": 0
|
|
}
|
|
]
|
|
},
|
|
"streamSettings": {
|
|
"network": "tcp",
|
|
"tcpSettings": {},
|
|
"security": "tls",
|
|
"tlsSettings": {
|
|
"serverName": "hysteria.example.test",
|
|
"minVersion": "1.2",
|
|
"maxVersion": "1.3",
|
|
"cipherSuites": "",
|
|
"rejectUnknownSni": false,
|
|
"disableSystemRoot": false,
|
|
"enableSessionResumption": false,
|
|
"certificates": [
|
|
{
|
|
"certificateFile": "/etc/ssl/certs/hysteria.crt",
|
|
"keyFile": "/etc/ssl/private/hysteria.key",
|
|
"oneTimeLoading": false,
|
|
"usage": "encipherment",
|
|
"buildChain": false
|
|
}
|
|
],
|
|
"alpn": ["h3"],
|
|
"echServerKeys": "",
|
|
"settings": {
|
|
"fingerprint": "chrome",
|
|
"echConfigList": ""
|
|
}
|
|
}
|
|
}
|
|
}
|