Skip to content

Commit

Permalink
reality for trojan
Browse files Browse the repository at this point in the history
  • Loading branch information
MHSanaei committed Apr 11, 2023
1 parent 4e7ad9e commit c38d75f
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 22 deletions.
74 changes: 52 additions & 22 deletions web/assets/js/model/xray.js
Original file line number Diff line number Diff line change
Expand Up @@ -600,8 +600,20 @@ TlsStreamSettings.Settings = class extends XrayCommonClass {
};

class RealityStreamSettings extends XrayCommonClass {
constructor(show = false,xver = 0, fingerprint = UTLS_FINGERPRINT.UTLS_FIREFOX, dest = 'github.io:443', serverNames = 'github.io,www.github.io,', privateKey = RandomUtil.randomX25519PrivateKey(), publicKey = '', minClient = '',
maxClient = '', maxTimediff = 0, shortIds = RandomUtil.randowShortId()) {

constructor(
show = false,xver = 0,
fingerprint = UTLS_FINGERPRINT.UTLS_FIREFOX,
dest = 'yahoo.com:443',
serverNames = 'yahoo.com,www.yahoo.com',
privateKey = RandomUtil.randomX25519PrivateKey(),
publicKey = '',
minClient = '',
maxClient = '',
maxTimediff = 0,
shortIds = RandomUtil.randowShortId()
)
{
super();
this.show = show;
this.xver = xver;
Expand All @@ -613,11 +625,9 @@ class RealityStreamSettings extends XrayCommonClass {
this.minClient = minClient;
this.maxClient = maxClient;
this.maxTimediff = maxTimediff;
this.shortIds = shortIds instanceof Array ? shortIds.join(",") : shortIds;

}

static fromJson(json = {}) {
this.shortIds = shortIds instanceof Array ? shortIds.join(",") : shortIds;
}
static fromJson(json = {}) {
return new RealityStreamSettings(
json.show,
json.xver,
Expand All @@ -631,9 +641,8 @@ class RealityStreamSettings extends XrayCommonClass {
json.maxTimediff,
json.shortIds
);

}
toJson() {
}
toJson() {
return {
show: this.show,
xver: this.xver,
Expand All @@ -646,22 +655,22 @@ class RealityStreamSettings extends XrayCommonClass {
maxClient: this.maxClient,
maxTimediff: this.maxTimediff,
shortIds: this.shortIds.split(/,||\s+/)
};
};
}
}
}

class StreamSettings extends XrayCommonClass {
constructor(network='tcp',
security='none',
tlsSettings=new TlsStreamSettings(),
realitySettings = new RealityStreamSettings(),
tcpSettings=new TcpStreamSettings(),
kcpSettings=new KcpStreamSettings(),
wsSettings=new WsStreamSettings(),
httpSettings=new HttpStreamSettings(),
quicSettings=new QuicStreamSettings(),
grpcSettings=new GrpcStreamSettings(),
) {
security='none',
tlsSettings=new TlsStreamSettings(),
realitySettings = new RealityStreamSettings(),
tcpSettings=new TcpStreamSettings(),
kcpSettings=new KcpStreamSettings(),
wsSettings=new WsStreamSettings(),
httpSettings=new HttpStreamSettings(),
quicSettings=new QuicStreamSettings(),
grpcSettings=new GrpcStreamSettings(),
) {
super();
this.network = network;
this.security = security;
Expand Down Expand Up @@ -1056,6 +1065,7 @@ class Inbound extends XrayCommonClass {
canEnableReality() {
switch (this.protocol) {
case Protocols.VLESS:
case Protocols.TROJAN:
break;
default:
return false;
Expand Down Expand Up @@ -1379,6 +1389,26 @@ class Inbound extends XrayCommonClass {
}
}

if (this.reality) {
params.set("security", "reality");
if (!ObjectUtil.isArrEmpty(this.stream.reality.serverNames)) {
params.set("sni", this.stream.reality.serverNames.split(/,||\s+/)[0]);
}
if (this.stream.reality.publicKey != "") {
//params.set("pbk", Ed25519.getPublicKey(this.stream.reality.privateKey));
params.set("pbk", this.stream.reality.publicKey);
}
if (this.stream.network === 'tcp') {
params.set("flow", this.settings.trojans[clientIndex].flow);
}
if (this.stream.reality.shortIds != "") {
params.set("sid", this.stream.reality.shortIds);
}
if (this.stream.reality.fingerprint != "") {
params.set("fp", this.stream.reality.fingerprint);
}
}

if (this.XTLS) {
params.set("security", "xtls");
params.set("alpn", this.stream.tls.alpn);
Expand Down
24 changes: 24 additions & 0 deletions web/service/sub.go
Original file line number Diff line number Diff line change
Expand Up @@ -442,6 +442,30 @@ func (s *SubService) genTrojanLink(inbound *model.Inbound, email string) string
}
}

if security == "reality" {
params["security"] = "reality"
realitySetting, _ := stream["realitySettings"].(map[string]interface{})
realitySettings, _ := searchKey(realitySetting, "settings")
if realitySetting != nil {
if sniValue, ok := searchKey(realitySettings, "serverName"); ok {
params["sni"], _ = sniValue.(string)
}
if pbkValue, ok := searchKey(realitySettings, "publicKey"); ok {
params["pbk"], _ = pbkValue.(string)
}
if sidValue, ok := searchKey(realitySettings, "shortIds"); ok {
params["sid"], _ = sidValue.(string)
}
if fpValue, ok := searchKey(realitySettings, "fingerprint"); ok {
params["fp"], _ = fpValue.(string)
}
}
serverName, _ := realitySetting["serverName"].(string)
if serverName != "" {
address = serverName
}
}

if security == "xtls" {
params["security"] = "xtls"
xtlsSetting, _ := stream["XTLSSettings"].(map[string]interface{})
Expand Down

0 comments on commit c38d75f

Please sign in to comment.