mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2025-09-10 20:26:19 +00:00
Merge branch 'MHSanaei:main' into main
This commit is contained in:
commit
ef990626ea
9 changed files with 482 additions and 393 deletions
|
@ -32,10 +32,10 @@ bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.
|
||||||
|
|
||||||
## Instalar una Versión Personalizada
|
## Instalar una Versión Personalizada
|
||||||
|
|
||||||
Para instalar la versión deseada, agrega la versión al final del comando de instalación. Por ejemplo, ver `v2.3.6`:
|
Para instalar la versión deseada, agrega la versión al final del comando de instalación. Por ejemplo, ver `v2.3.12`:
|
||||||
|
|
||||||
```
|
```
|
||||||
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v2.3.6
|
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v2.3.12
|
||||||
```
|
```
|
||||||
|
|
||||||
## Certificado SSL
|
## Certificado SSL
|
||||||
|
|
|
@ -32,10 +32,10 @@ bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.
|
||||||
|
|
||||||
## Install Custom Version
|
## Install Custom Version
|
||||||
|
|
||||||
To install your desired version, add the version to the end of the installation command. e.g., ver `v2.3.11`:
|
To install your desired version, add the version to the end of the installation command. e.g., ver `v2.3.12`:
|
||||||
|
|
||||||
```
|
```
|
||||||
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v2.3.11
|
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v2.3.12
|
||||||
```
|
```
|
||||||
|
|
||||||
## SSL Certificate
|
## SSL Certificate
|
||||||
|
|
|
@ -32,10 +32,10 @@ bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.
|
||||||
|
|
||||||
## 安装指定版本
|
## 安装指定版本
|
||||||
|
|
||||||
要安装所需的版本,请将该版本添加到安装命令的末尾。 e.g., ver `v2.3.6`:
|
要安装所需的版本,请将该版本添加到安装命令的末尾。 e.g., ver `v2.3.12`:
|
||||||
|
|
||||||
```
|
```
|
||||||
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v2.3.6
|
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v2.3.12
|
||||||
```
|
```
|
||||||
|
|
||||||
## SSL 认证
|
## SSL 认证
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
2.3.11
|
2.3.12
|
|
@ -72,10 +72,12 @@ const WireguardDomainStrategy = [
|
||||||
Object.freeze(Protocols);
|
Object.freeze(Protocols);
|
||||||
Object.freeze(SSMethods);
|
Object.freeze(SSMethods);
|
||||||
Object.freeze(TLS_FLOW_CONTROL);
|
Object.freeze(TLS_FLOW_CONTROL);
|
||||||
|
Object.freeze(UTLS_FINGERPRINT);
|
||||||
Object.freeze(ALPN_OPTION);
|
Object.freeze(ALPN_OPTION);
|
||||||
Object.freeze(OutboundDomainStrategies);
|
Object.freeze(OutboundDomainStrategies);
|
||||||
Object.freeze(WireguardDomainStrategy);
|
Object.freeze(WireguardDomainStrategy);
|
||||||
|
|
||||||
|
|
||||||
class CommonClass {
|
class CommonClass {
|
||||||
|
|
||||||
static toJsonArray(arr) {
|
static toJsonArray(arr) {
|
||||||
|
@ -132,7 +134,9 @@ class TcpStreamSettings extends CommonClass {
|
||||||
}
|
}
|
||||||
|
|
||||||
class KcpStreamSettings extends CommonClass {
|
class KcpStreamSettings extends CommonClass {
|
||||||
constructor(mtu=1350, tti=20,
|
constructor(
|
||||||
|
mtu = 1350,
|
||||||
|
tti = 50,
|
||||||
uplinkCapacity = 5,
|
uplinkCapacity = 5,
|
||||||
downlinkCapacity = 20,
|
downlinkCapacity = 20,
|
||||||
congestion = false,
|
congestion = false,
|
||||||
|
@ -229,8 +233,11 @@ class HttpStreamSettings extends CommonClass {
|
||||||
}
|
}
|
||||||
|
|
||||||
class QuicStreamSettings extends CommonClass {
|
class QuicStreamSettings extends CommonClass {
|
||||||
constructor(security='none',
|
constructor(
|
||||||
key='', type='none') {
|
security = 'none',
|
||||||
|
key = '',
|
||||||
|
type = 'none'
|
||||||
|
) {
|
||||||
super();
|
super();
|
||||||
this.security = security;
|
this.security = security;
|
||||||
this.key = key;
|
this.key = key;
|
||||||
|
@ -257,7 +264,11 @@ class QuicStreamSettings extends CommonClass {
|
||||||
}
|
}
|
||||||
|
|
||||||
class GrpcStreamSettings extends CommonClass {
|
class GrpcStreamSettings extends CommonClass {
|
||||||
constructor(serviceName="", authority="", multiMode=false) {
|
constructor(
|
||||||
|
serviceName = "",
|
||||||
|
authority = "",
|
||||||
|
multiMode = false
|
||||||
|
) {
|
||||||
super();
|
super();
|
||||||
this.serviceName = serviceName;
|
this.serviceName = serviceName;
|
||||||
this.authority = authority;
|
this.authority = authority;
|
||||||
|
@ -322,10 +333,12 @@ class SplitHTTPStreamSettings extends CommonClass {
|
||||||
}
|
}
|
||||||
|
|
||||||
class TlsStreamSettings extends CommonClass {
|
class TlsStreamSettings extends CommonClass {
|
||||||
constructor(serverName='',
|
constructor(
|
||||||
|
serverName = '',
|
||||||
alpn = [],
|
alpn = [],
|
||||||
fingerprint = '',
|
fingerprint = '',
|
||||||
allowInsecure = false) {
|
allowInsecure = false
|
||||||
|
) {
|
||||||
super();
|
super();
|
||||||
this.serverName = serverName;
|
this.serverName = serverName;
|
||||||
this.alpn = alpn;
|
this.alpn = alpn;
|
||||||
|
@ -353,7 +366,13 @@ class TlsStreamSettings extends CommonClass {
|
||||||
}
|
}
|
||||||
|
|
||||||
class RealityStreamSettings extends CommonClass {
|
class RealityStreamSettings extends CommonClass {
|
||||||
constructor(publicKey = '', fingerprint = '', serverName = '', shortId = '', spiderX = '/') {
|
constructor(
|
||||||
|
publicKey = '',
|
||||||
|
fingerprint = '',
|
||||||
|
serverName = '',
|
||||||
|
shortId = '',
|
||||||
|
spiderX = '/'
|
||||||
|
) {
|
||||||
super();
|
super();
|
||||||
this.publicKey = publicKey;
|
this.publicKey = publicKey;
|
||||||
this.fingerprint = fingerprint;
|
this.fingerprint = fingerprint;
|
||||||
|
@ -381,7 +400,13 @@ class RealityStreamSettings extends CommonClass {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
class SockoptStreamSettings extends CommonClass {
|
class SockoptStreamSettings extends CommonClass {
|
||||||
constructor(dialerProxy = "", tcpFastOpen = false, tcpKeepAliveInterval = 0, tcpMptcp = false, tcpNoDelay = false) {
|
constructor(
|
||||||
|
dialerProxy = "",
|
||||||
|
tcpFastOpen = false,
|
||||||
|
tcpKeepAliveInterval = 0,
|
||||||
|
tcpMptcp = false,
|
||||||
|
tcpNoDelay = false
|
||||||
|
) {
|
||||||
super();
|
super();
|
||||||
this.dialerProxy = dialerProxy;
|
this.dialerProxy = dialerProxy;
|
||||||
this.tcpFastOpen = tcpFastOpen;
|
this.tcpFastOpen = tcpFastOpen;
|
||||||
|
@ -413,7 +438,8 @@ class SockoptStreamSettings extends CommonClass {
|
||||||
}
|
}
|
||||||
|
|
||||||
class StreamSettings extends CommonClass {
|
class StreamSettings extends CommonClass {
|
||||||
constructor(network='tcp',
|
constructor(
|
||||||
|
network = 'tcp',
|
||||||
security = 'none',
|
security = 'none',
|
||||||
tlsSettings = new TlsStreamSettings(),
|
tlsSettings = new TlsStreamSettings(),
|
||||||
realitySettings = new RealityStreamSettings(),
|
realitySettings = new RealityStreamSettings(),
|
||||||
|
@ -1082,17 +1108,23 @@ Outbound.HttpSettings = class extends CommonClass {
|
||||||
|
|
||||||
Outbound.WireguardSettings = class extends CommonClass {
|
Outbound.WireguardSettings = class extends CommonClass {
|
||||||
constructor(
|
constructor(
|
||||||
mtu=1420, secretKey='',
|
mtu = 1420,
|
||||||
address=[''], workers=2, domainStrategy='', reserved='',
|
secretKey = '',
|
||||||
peers=[new Outbound.WireguardSettings.Peer()], kernelMode=false) {
|
address = [''],
|
||||||
|
workers = 2,
|
||||||
|
domainStrategy = '',
|
||||||
|
reserved = '',
|
||||||
|
peers = [new Outbound.WireguardSettings.Peer()],
|
||||||
|
kernelMode = false
|
||||||
|
) {
|
||||||
super();
|
super();
|
||||||
this.mtu = mtu;
|
this.mtu = mtu;
|
||||||
this.secretKey = secretKey;
|
this.secretKey = secretKey;
|
||||||
this.pubKey = secretKey.length > 0 ? Wireguard.generateKeypair(secretKey).publicKey : '';
|
this.pubKey = secretKey.length > 0 ? Wireguard.generateKeypair(secretKey).publicKey : '';
|
||||||
this.address = address instanceof Array ? address.join(',') : address;
|
this.address = Array.isArray(address) ? address.join(',') : address;
|
||||||
this.workers = workers;
|
this.workers = workers;
|
||||||
this.domainStrategy = domainStrategy;
|
this.domainStrategy = domainStrategy;
|
||||||
this.reserved = reserved instanceof Array ? reserved.join(',') : reserved;
|
this.reserved = Array.isArray(reserved) ? reserved.join(',') : reserved;
|
||||||
this.peers = peers;
|
this.peers = peers;
|
||||||
this.kernelMode = kernelMode;
|
this.kernelMode = kernelMode;
|
||||||
}
|
}
|
||||||
|
@ -1133,7 +1165,13 @@ Outbound.WireguardSettings = class extends CommonClass {
|
||||||
};
|
};
|
||||||
|
|
||||||
Outbound.WireguardSettings.Peer = class extends CommonClass {
|
Outbound.WireguardSettings.Peer = class extends CommonClass {
|
||||||
constructor(publicKey='', psk='', allowedIPs=['0.0.0.0/0','::/0'], endpoint='', keepAlive=0) {
|
constructor(
|
||||||
|
publicKey = '',
|
||||||
|
psk = '',
|
||||||
|
allowedIPs = ['0.0.0.0/0', '::/0'],
|
||||||
|
endpoint = '',
|
||||||
|
keepAlive = 0
|
||||||
|
) {
|
||||||
super();
|
super();
|
||||||
this.publicKey = publicKey;
|
this.publicKey = publicKey;
|
||||||
this.psk = psk;
|
this.psk = psk;
|
||||||
|
|
|
@ -9,8 +9,8 @@ class AllSetting {
|
||||||
this.webBasePath = "/";
|
this.webBasePath = "/";
|
||||||
this.sessionMaxAge = 0;
|
this.sessionMaxAge = 0;
|
||||||
this.pageSize = 50;
|
this.pageSize = 50;
|
||||||
this.expireDiff = "";
|
this.expireDiff = 0;
|
||||||
this.trafficDiff = "";
|
this.trafficDiff = 0;
|
||||||
this.remarkModel = "-ieo";
|
this.remarkModel = "-ieo";
|
||||||
this.datepicker = "gregorian";
|
this.datepicker = "gregorian";
|
||||||
this.tgBotEnable = false;
|
this.tgBotEnable = false;
|
||||||
|
@ -19,22 +19,22 @@ class AllSetting {
|
||||||
this.tgBotChatId = "";
|
this.tgBotChatId = "";
|
||||||
this.tgRunTime = "@daily";
|
this.tgRunTime = "@daily";
|
||||||
this.tgBotBackup = false;
|
this.tgBotBackup = false;
|
||||||
this.tgBotLoginNotify = false;
|
this.tgBotLoginNotify = true;
|
||||||
this.tgCpu = "";
|
this.tgCpu = 80;
|
||||||
this.tgLang = "en-US";
|
this.tgLang = "en-US";
|
||||||
this.xrayTemplateConfig = "";
|
this.xrayTemplateConfig = "";
|
||||||
this.secretEnable = false;
|
this.secretEnable = false;
|
||||||
this.subEnable = false;
|
this.subEnable = false;
|
||||||
this.subListen = "";
|
this.subListen = "";
|
||||||
this.subPort = "2096";
|
this.subPort = 2096;
|
||||||
this.subPath = "/sub/";
|
this.subPath = "/sub/";
|
||||||
this.subJsonPath = "/json/";
|
this.subJsonPath = "/json/";
|
||||||
this.subDomain = "";
|
this.subDomain = "";
|
||||||
this.subCertFile = "";
|
this.subCertFile = "";
|
||||||
this.subKeyFile = "";
|
this.subKeyFile = "";
|
||||||
this.subUpdates = 0;
|
this.subUpdates = 12;
|
||||||
this.subEncrypt = true;
|
this.subEncrypt = true;
|
||||||
this.subShowInfo = false;
|
this.subShowInfo = true;
|
||||||
this.subURI = "";
|
this.subURI = "";
|
||||||
this.subJsonURI = "";
|
this.subJsonURI = "";
|
||||||
this.subJsonFragment = "";
|
this.subJsonFragment = "";
|
||||||
|
|
|
@ -103,6 +103,7 @@ const DOMAIN_STRATEGY_OPTION = {
|
||||||
FORCE_IPV4V6: "ForceIPv4v6",
|
FORCE_IPV4V6: "ForceIPv4v6",
|
||||||
FORCE_IPV4: "ForceIPv4",
|
FORCE_IPV4: "ForceIPv4",
|
||||||
};
|
};
|
||||||
|
|
||||||
const TCP_CONGESTION_OPTION = {
|
const TCP_CONGESTION_OPTION = {
|
||||||
BBR: "bbr",
|
BBR: "bbr",
|
||||||
CUBIC: "cubic",
|
CUBIC: "cubic",
|
||||||
|
@ -180,7 +181,8 @@ class XrayCommonClass {
|
||||||
}
|
}
|
||||||
|
|
||||||
class TcpStreamSettings extends XrayCommonClass {
|
class TcpStreamSettings extends XrayCommonClass {
|
||||||
constructor(acceptProxyProtocol=false,
|
constructor(
|
||||||
|
acceptProxyProtocol = false,
|
||||||
type = 'none',
|
type = 'none',
|
||||||
request = new TcpStreamSettings.TcpRequest(),
|
request = new TcpStreamSettings.TcpRequest(),
|
||||||
response = new TcpStreamSettings.TcpResponse(),
|
response = new TcpStreamSettings.TcpResponse(),
|
||||||
|
@ -217,7 +219,8 @@ class TcpStreamSettings extends XrayCommonClass {
|
||||||
}
|
}
|
||||||
|
|
||||||
TcpStreamSettings.TcpRequest = class extends XrayCommonClass {
|
TcpStreamSettings.TcpRequest = class extends XrayCommonClass {
|
||||||
constructor(version='1.1',
|
constructor(
|
||||||
|
version = '1.1',
|
||||||
method = 'GET',
|
method = 'GET',
|
||||||
path = ['/'],
|
path = ['/'],
|
||||||
headers = [],
|
headers = [],
|
||||||
|
@ -265,7 +268,8 @@ TcpStreamSettings.TcpRequest = class extends XrayCommonClass {
|
||||||
};
|
};
|
||||||
|
|
||||||
TcpStreamSettings.TcpResponse = class extends XrayCommonClass {
|
TcpStreamSettings.TcpResponse = class extends XrayCommonClass {
|
||||||
constructor(version='1.1',
|
constructor(
|
||||||
|
version = '1.1',
|
||||||
status = '200',
|
status = '200',
|
||||||
reason = 'OK',
|
reason = 'OK',
|
||||||
headers = [],
|
headers = [],
|
||||||
|
@ -305,7 +309,9 @@ TcpStreamSettings.TcpResponse = class extends XrayCommonClass {
|
||||||
};
|
};
|
||||||
|
|
||||||
class KcpStreamSettings extends XrayCommonClass {
|
class KcpStreamSettings extends XrayCommonClass {
|
||||||
constructor(mtu=1350, tti=20,
|
constructor(
|
||||||
|
mtu = 1350,
|
||||||
|
tti = 50,
|
||||||
uplinkCapacity = 5,
|
uplinkCapacity = 5,
|
||||||
downlinkCapacity = 20,
|
downlinkCapacity = 20,
|
||||||
congestion = false,
|
congestion = false,
|
||||||
|
@ -358,7 +364,12 @@ class KcpStreamSettings extends XrayCommonClass {
|
||||||
}
|
}
|
||||||
|
|
||||||
class WsStreamSettings extends XrayCommonClass {
|
class WsStreamSettings extends XrayCommonClass {
|
||||||
constructor(acceptProxyProtocol=false, path='/', host='', headers=[]) {
|
constructor(
|
||||||
|
acceptProxyProtocol = false,
|
||||||
|
path = '/',
|
||||||
|
host = '',
|
||||||
|
headers = []
|
||||||
|
) {
|
||||||
super();
|
super();
|
||||||
this.acceptProxyProtocol = acceptProxyProtocol;
|
this.acceptProxyProtocol = acceptProxyProtocol;
|
||||||
this.path = path;
|
this.path = path;
|
||||||
|
@ -430,8 +441,11 @@ class HttpStreamSettings extends XrayCommonClass {
|
||||||
}
|
}
|
||||||
|
|
||||||
class QuicStreamSettings extends XrayCommonClass {
|
class QuicStreamSettings extends XrayCommonClass {
|
||||||
constructor(security='none',
|
constructor(
|
||||||
key=RandomUtil.randomSeq(10), type='none') {
|
security = 'none',
|
||||||
|
key = RandomUtil.randomSeq(10),
|
||||||
|
type = 'none'
|
||||||
|
) {
|
||||||
super();
|
super();
|
||||||
this.security = security;
|
this.security = security;
|
||||||
this.key = key;
|
this.key = key;
|
||||||
|
@ -487,7 +501,12 @@ class GrpcStreamSettings extends XrayCommonClass {
|
||||||
}
|
}
|
||||||
|
|
||||||
class HTTPUpgradeStreamSettings extends XrayCommonClass {
|
class HTTPUpgradeStreamSettings extends XrayCommonClass {
|
||||||
constructor(acceptProxyProtocol=false, path='/', host='', headers=[]) {
|
constructor(
|
||||||
|
acceptProxyProtocol = false,
|
||||||
|
path = '/',
|
||||||
|
host = '',
|
||||||
|
headers = []
|
||||||
|
) {
|
||||||
super();
|
super();
|
||||||
this.acceptProxyProtocol = acceptProxyProtocol;
|
this.acceptProxyProtocol = acceptProxyProtocol;
|
||||||
this.path = path;
|
this.path = path;
|
||||||
|
@ -576,7 +595,8 @@ class SplitHTTPStreamSettings extends XrayCommonClass {
|
||||||
}
|
}
|
||||||
|
|
||||||
class TlsStreamSettings extends XrayCommonClass {
|
class TlsStreamSettings extends XrayCommonClass {
|
||||||
constructor(serverName='',
|
constructor(
|
||||||
|
serverName = '',
|
||||||
minVersion = TLS_VERSION_OPTION.TLS12,
|
minVersion = TLS_VERSION_OPTION.TLS12,
|
||||||
maxVersion = TLS_VERSION_OPTION.TLS13,
|
maxVersion = TLS_VERSION_OPTION.TLS13,
|
||||||
cipherSuites = '',
|
cipherSuites = '',
|
||||||
|
@ -585,7 +605,8 @@ class TlsStreamSettings extends XrayCommonClass {
|
||||||
enableSessionResumption = false,
|
enableSessionResumption = false,
|
||||||
certificates = [new TlsStreamSettings.Cert()],
|
certificates = [new TlsStreamSettings.Cert()],
|
||||||
alpn = [ALPN_OPTION.H3, ALPN_OPTION.H2, ALPN_OPTION.HTTP1],
|
alpn = [ALPN_OPTION.H3, ALPN_OPTION.H2, ALPN_OPTION.HTTP1],
|
||||||
settings=new TlsStreamSettings.Settings()) {
|
settings = new TlsStreamSettings.Settings()
|
||||||
|
) {
|
||||||
super();
|
super();
|
||||||
this.sni = serverName;
|
this.sni = serverName;
|
||||||
this.minVersion = minVersion;
|
this.minVersion = minVersion;
|
||||||
|
@ -663,8 +684,8 @@ TlsStreamSettings.Cert = class extends XrayCommonClass {
|
||||||
this.useFile = useFile;
|
this.useFile = useFile;
|
||||||
this.certFile = certificateFile;
|
this.certFile = certificateFile;
|
||||||
this.keyFile = keyFile;
|
this.keyFile = keyFile;
|
||||||
this.cert = certificate instanceof Array ? certificate.join('\n') : certificate;
|
this.cert = Array.isArray(certificate) ? certificate.join('\n') : certificate;
|
||||||
this.key = key instanceof Array ? key.join('\n') : key;
|
this.key = Array.isArray(key) ? key.join('\n') : key;
|
||||||
this.ocspStapling = ocspStapling;
|
this.ocspStapling = ocspStapling;
|
||||||
this.oneTimeLoading = oneTimeLoading;
|
this.oneTimeLoading = oneTimeLoading;
|
||||||
this.usage = usage;
|
this.usage = usage;
|
||||||
|
@ -739,10 +760,12 @@ TlsStreamSettings.Settings = class extends XrayCommonClass {
|
||||||
};
|
};
|
||||||
|
|
||||||
class XtlsStreamSettings extends XrayCommonClass {
|
class XtlsStreamSettings extends XrayCommonClass {
|
||||||
constructor(serverName='',
|
constructor(
|
||||||
|
serverName = '',
|
||||||
certificates = [new XtlsStreamSettings.Cert()],
|
certificates = [new XtlsStreamSettings.Cert()],
|
||||||
alpn = [ALPN_OPTION.H3, ALPN_OPTION.H2, ALPN_OPTION.HTTP1],
|
alpn = [ALPN_OPTION.H3, ALPN_OPTION.H2, ALPN_OPTION.HTTP1],
|
||||||
settings=new XtlsStreamSettings.Settings()) {
|
settings = new XtlsStreamSettings.Settings()
|
||||||
|
) {
|
||||||
super();
|
super();
|
||||||
this.sni = serverName;
|
this.sni = serverName;
|
||||||
this.certs = certificates;
|
this.certs = certificates;
|
||||||
|
@ -787,13 +810,22 @@ class XtlsStreamSettings extends XrayCommonClass {
|
||||||
}
|
}
|
||||||
|
|
||||||
XtlsStreamSettings.Cert = class extends XrayCommonClass {
|
XtlsStreamSettings.Cert = class extends XrayCommonClass {
|
||||||
constructor(useFile=true, certificateFile='', keyFile='', certificate='', key='', ocspStapling=3600, oneTimeLoading=false, usage=USAGE_OPTION.ENCIPHERMENT) {
|
constructor(
|
||||||
|
useFile = true,
|
||||||
|
certificateFile = '',
|
||||||
|
keyFile = '',
|
||||||
|
certificate = '',
|
||||||
|
key = '',
|
||||||
|
ocspStapling = 3600,
|
||||||
|
oneTimeLoading = false,
|
||||||
|
usage = USAGE_OPTION.ENCIPHERMENT
|
||||||
|
) {
|
||||||
super();
|
super();
|
||||||
this.useFile = useFile;
|
this.useFile = useFile;
|
||||||
this.certFile = certificateFile;
|
this.certFile = certificateFile;
|
||||||
this.keyFile = keyFile;
|
this.keyFile = keyFile;
|
||||||
this.cert = certificate instanceof Array ? certificate.join('\n') : certificate;
|
this.cert = Array.isArray(certificate) ? certificate.join('\n') : certificate;
|
||||||
this.key = key instanceof Array ? key.join('\n') : key;
|
this.key = Array.isArray(key) ? key.join('\n') : key;
|
||||||
this.ocspStapling = ocspStapling;
|
this.ocspStapling = ocspStapling;
|
||||||
this.oneTimeLoading = oneTimeLoading;
|
this.oneTimeLoading = oneTimeLoading;
|
||||||
this.usage = usage;
|
this.usage = usage;
|
||||||
|
@ -860,9 +892,9 @@ XtlsStreamSettings.Settings = class extends XrayCommonClass {
|
||||||
};
|
};
|
||||||
|
|
||||||
class RealityStreamSettings extends XrayCommonClass {
|
class RealityStreamSettings extends XrayCommonClass {
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
show = false,xver = 0,
|
show = false,
|
||||||
|
xver = 0,
|
||||||
dest = 'yahoo.com:443',
|
dest = 'yahoo.com:443',
|
||||||
serverNames = 'yahoo.com,www.yahoo.com',
|
serverNames = 'yahoo.com,www.yahoo.com',
|
||||||
privateKey = '',
|
privateKey = '',
|
||||||
|
@ -876,20 +908,23 @@ class RealityStreamSettings extends XrayCommonClass {
|
||||||
this.show = show;
|
this.show = show;
|
||||||
this.xver = xver;
|
this.xver = xver;
|
||||||
this.dest = dest;
|
this.dest = dest;
|
||||||
this.serverNames = serverNames instanceof Array ? serverNames.join(",") : serverNames;
|
this.serverNames = Array.isArray(serverNames) ? serverNames.join(",") : serverNames;
|
||||||
this.privateKey = privateKey;
|
this.privateKey = privateKey;
|
||||||
this.minClient = minClient;
|
this.minClient = minClient;
|
||||||
this.maxClient = maxClient;
|
this.maxClient = maxClient;
|
||||||
this.maxTimediff = maxTimediff;
|
this.maxTimediff = maxTimediff;
|
||||||
this.shortIds = shortIds instanceof Array ? shortIds.join(",") : shortIds;
|
this.shortIds = Array.isArray(shortIds) ? shortIds.join(",") : shortIds;
|
||||||
this.settings = settings;
|
this.settings = settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
static fromJson(json = {}) {
|
static fromJson(json = {}) {
|
||||||
let settings;
|
let settings;
|
||||||
if (!ObjectUtil.isEmpty(json.settings)) {
|
if (!ObjectUtil.isEmpty(json.settings)) {
|
||||||
settings = new RealityStreamSettings.Settings(json.settings.publicKey , json.settings.fingerprint, json.settings.serverName, json.settings.spiderX);
|
settings = new RealityStreamSettings.Settings(
|
||||||
}
|
json.settings.publicKey,
|
||||||
|
json.settings.fingerprint,
|
||||||
|
json.settings.serverName,
|
||||||
|
json.settings.spiderX);}
|
||||||
return new RealityStreamSettings(
|
return new RealityStreamSettings(
|
||||||
json.show,
|
json.show,
|
||||||
json.xver,
|
json.xver,
|
||||||
|
@ -902,8 +937,8 @@ class RealityStreamSettings extends XrayCommonClass {
|
||||||
json.shortIds,
|
json.shortIds,
|
||||||
json.settings,
|
json.settings,
|
||||||
);
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
toJson() {
|
toJson() {
|
||||||
return {
|
return {
|
||||||
show: this.show,
|
show: this.show,
|
||||||
|
@ -921,7 +956,12 @@ class RealityStreamSettings extends XrayCommonClass {
|
||||||
}
|
}
|
||||||
|
|
||||||
RealityStreamSettings.Settings = class extends XrayCommonClass {
|
RealityStreamSettings.Settings = class extends XrayCommonClass {
|
||||||
constructor(publicKey = '', fingerprint = UTLS_FINGERPRINT.UTLS_RANDOM, serverName = '', spiderX= '/') {
|
constructor(
|
||||||
|
publicKey = '',
|
||||||
|
fingerprint = UTLS_FINGERPRINT.UTLS_RANDOM,
|
||||||
|
serverName = '',
|
||||||
|
spiderX = '/'
|
||||||
|
) {
|
||||||
super();
|
super();
|
||||||
this.publicKey = publicKey;
|
this.publicKey = publicKey;
|
||||||
this.fingerprint = fingerprint;
|
this.fingerprint = fingerprint;
|
||||||
|
@ -1180,7 +1220,8 @@ class Sniffing extends XrayCommonClass {
|
||||||
}
|
}
|
||||||
|
|
||||||
class Inbound extends XrayCommonClass {
|
class Inbound extends XrayCommonClass {
|
||||||
constructor(port=RandomUtil.randomIntRange(10000, 60000),
|
constructor(
|
||||||
|
port = RandomUtil.randomIntRange(10000, 60000),
|
||||||
listen = '',
|
listen = '',
|
||||||
protocol = Protocols.VLESS,
|
protocol = Protocols.VLESS,
|
||||||
settings = null,
|
settings = null,
|
||||||
|
|
|
@ -100,11 +100,21 @@ class RandomUtil {
|
||||||
}
|
}
|
||||||
|
|
||||||
static randomShortId() {
|
static randomShortId() {
|
||||||
let str = '';
|
const lengths = [2, 4, 6, 8, 10, 12, 14, 16];
|
||||||
for (let i = 0; i < 8; ++i) {
|
for (let i = lengths.length - 1; i > 0; i--) {
|
||||||
str += seq[this.randomInt(16)];
|
const j = Math.floor(Math.random() * (i + 1));
|
||||||
|
[lengths[i], lengths[j]] = [lengths[j], lengths[i]];
|
||||||
}
|
}
|
||||||
return str;
|
|
||||||
|
let shortIds = [];
|
||||||
|
for (let length of lengths) {
|
||||||
|
let shortId = '';
|
||||||
|
for (let i = 0; i < length; i++) {
|
||||||
|
shortId += seq[this.randomInt(16)];
|
||||||
|
}
|
||||||
|
shortIds.push(shortId);
|
||||||
|
}
|
||||||
|
return shortIds;
|
||||||
}
|
}
|
||||||
|
|
||||||
static randomLowerAndNum(len) {
|
static randomLowerAndNum(len) {
|
||||||
|
|
|
@ -45,7 +45,7 @@ var defaultValueMap = map[string]string{
|
||||||
"tgRunTime": "@daily",
|
"tgRunTime": "@daily",
|
||||||
"tgBotBackup": "false",
|
"tgBotBackup": "false",
|
||||||
"tgBotLoginNotify": "true",
|
"tgBotLoginNotify": "true",
|
||||||
"tgCpu": "0",
|
"tgCpu": "80",
|
||||||
"tgLang": "en-US",
|
"tgLang": "en-US",
|
||||||
"secretEnable": "false",
|
"secretEnable": "false",
|
||||||
"subEnable": "false",
|
"subEnable": "false",
|
||||||
|
|
Loading…
Reference in a new issue