Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/MHSanaei/3x-ui.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMHSanaei <ho3ein.sanaei@gmail.com>2023-07-18 02:49:01 +0300
committerMHSanaei <ho3ein.sanaei@gmail.com>2023-07-18 02:49:01 +0300
commitc2e9ee36658a8549251df7fb37467baa55341a5f (patch)
tree25baf2f09f566d9aba8cae93274612af0cd5d750 /web/assets/js
parent1f78842b707a1190b6a84aded269d664254a7f1d (diff)
update - shadowsocks
Co-Authored-By: Alireza Ahmadi <alireza7@gmail.com>
Diffstat (limited to 'web/assets/js')
-rw-r--r--web/assets/js/model/xray.js78
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) {