diff options
| author | MHSanaei <ho3ein.sanaei@gmail.com> | 2023-07-18 02:49:01 +0300 |
|---|---|---|
| committer | MHSanaei <ho3ein.sanaei@gmail.com> | 2023-07-18 02:49:01 +0300 |
| commit | c2e9ee36658a8549251df7fb37467baa55341a5f (patch) | |
| tree | 25baf2f09f566d9aba8cae93274612af0cd5d750 /web/assets | |
| parent | 1f78842b707a1190b6a84aded269d664254a7f1d (diff) | |
update - shadowsocks
Co-Authored-By: Alireza Ahmadi <alireza7@gmail.com>
Diffstat (limited to 'web/assets')
| -rw-r--r-- | web/assets/js/model/xray.js | 78 |
1 files changed, 72 insertions, 6 deletions
diff --git a/web/assets/js/model/xray.js b/web/assets/js/model/xray.js index 64931758..fe46e85f 100644 --- a/web/assets/js/model/xray.js +++ b/web/assets/js/model/xray.js @@ -16,8 +16,12 @@ const VmessMethods = { }; const SSMethods = { - BLAKE3_AES_128_GCM: '2022-blake3-aes-128-gcm', - BLAKE3_AES_256_GCM: '2022-blake3-aes-256-gcm', + CHACHA20_POLY1305: 'chacha20-poly1305', + AES_256_GCM: 'aes-256-gcm', + AES_128_GCM: 'aes-128-gcm', + BLAKE3_AES_128_GCM: '2022-blake3-aes-128-gcm', + BLAKE3_AES_256_GCM: '2022-blake3-aes-256-gcm', + BLAKE3_CHACHA20_POLY1305: '2022-blake3-chacha20-poly1305', }; const XTLS_FLOW_CONTROL = { @@ -511,7 +515,8 @@ class TlsStreamSettings extends XrayCommonClass { } if (!ObjectUtil.isEmpty(json.settings)) { - settings = new TlsStreamSettings.Settings(json.settings.allowInsecure , json.settings.fingerprint, json.settings.serverName, json.settings.domains); } + settings = new TlsStreamSettings.Settings(json.settings.allowInsecure , json.settings.fingerprint, json.settings.serverName, json.settings.domains); + } return new TlsStreamSettings( json.serverName, json.minVersion, @@ -980,7 +985,6 @@ class Inbound extends XrayCommonClass { } } - //for Reality get reality() { return this.stream.security === 'reality'; } @@ -1034,6 +1038,9 @@ class Inbound extends XrayCommonClass { return ""; } } + get isSSMultiUser() { + return [SSMethods.BLAKE3_AES_128_GCM,SSMethods.BLAKE3_AES_256_GCM].includes(this.method); + } get serverName() { if (this.stream.isTls || this.stream.isXtls || this.stream.isReality) { @@ -1103,7 +1110,7 @@ class Inbound extends XrayCommonClass { return this.settings.trojans[index].expiryTime < new Date().getTime(); return false case Protocols.SHADOWSOCKS: - if(this.settings.shadowsockses[index].expiryTime > 0) + if(this.settings.shadowsockses.length > 0 && this.settings.shadowsockses[index].expiryTime > 0) return this.settings.shadowsockses[index].expiryTime < new Date().getTime(); return false default: @@ -1184,6 +1191,7 @@ class Inbound extends XrayCommonClass { case Protocols.VMESS: case Protocols.VLESS: case Protocols.TROJAN: + case Protocols.SHADOWSOCKS: return true; default: return false; @@ -1410,8 +1418,66 @@ class Inbound extends XrayCommonClass { genSSLink(address='', remark='', clientIndex = 0) { let settings = this.settings; const port = this.port; + const type = this.stream.network; + const params = new Map(); + params.set("type", this.stream.network); + switch (type) { + case "tcp": + const tcp = this.stream.tcp; + if (tcp.type === 'http') { + const request = tcp.request; + params.set("path", request.path.join(',')); + const index = request.headers.findIndex(header => header.name.toLowerCase() === 'host'); + if (index >= 0) { + const host = request.headers[index].value; + params.set("host", host); + } + params.set("headerType", 'http'); + } + break; + case "kcp": + const kcp = this.stream.kcp; + params.set("headerType", kcp.type); + params.set("seed", kcp.seed); + break; + case "ws": + const ws = this.stream.ws; + params.set("path", ws.path); + const index = ws.headers.findIndex(header => header.name.toLowerCase() === 'host'); + if (index >= 0) { + const host = ws.headers[index].value; + params.set("host", host); + } + break; + case "http": + const http = this.stream.http; + params.set("path", http.path); + params.set("host", http.host); + break; + case "quic": + const quic = this.stream.quic; + params.set("quicSecurity", quic.security); + params.set("key", quic.key); + params.set("headerType", quic.type); + break; + case "grpc": + const grpc = this.stream.grpc; + params.set("serviceName", grpc.serviceName); + if(grpc.multiMode){ + params.set("mode", "multi"); + } + break; + } - return 'ss://' + safeBase64(settings.method + ':' + settings.password + ':' +settings.shadowsockses[clientIndex].password) + '@' + address + ':' + this.port + '#' + encodeURIComponent(remark); + let clientPassword = this.isSSMultiUser ? ':' + settings.shadowsockses[clientIndex].password : ''; + + let link = `ss://${safeBase64(settings.method + ':' + settings.password + clientPassword)}@${address}:${this.port}`; + const url = new URL(link); + for (const [key, value] of params) { + url.searchParams.set(key, value) + } + url.hash = encodeURIComponent(remark); + return url.toString(); } genTrojanLink(address = '', remark = '', clientIndex = 0) { |
