mirror of
https://github.com/MatsuriDayo/nekoray.git
synced 2025-12-17 20:44:38 +03:00
refactor: show default fingerprint in ui
Not add it to configuration in slient. fix(sub): add fingerprint for vmess
This commit is contained in:
committed by
arm64v8a
parent
6029b4236f
commit
a2fe70509b
@@ -52,14 +52,14 @@ namespace NekoGui_fmt {
|
|||||||
if (!alpn.trimmed().isEmpty()) {
|
if (!alpn.trimmed().isEmpty()) {
|
||||||
tls["alpn"] = QList2QJsonArray(alpn.split(","));
|
tls["alpn"] = QList2QJsonArray(alpn.split(","));
|
||||||
}
|
}
|
||||||
auto fp = utlsFingerprint.isEmpty() ? NekoGui::dataStore->utlsFingerprint : utlsFingerprint;
|
QString fp = utlsFingerprint;
|
||||||
if (!reality_pbk.trimmed().isEmpty()) {
|
if (!reality_pbk.trimmed().isEmpty()) {
|
||||||
tls["reality"] = QJsonObject{
|
tls["reality"] = QJsonObject{
|
||||||
{"enabled", true},
|
{"enabled", true},
|
||||||
{"public_key", reality_pbk},
|
{"public_key", reality_pbk},
|
||||||
{"short_id", reality_sid.split(",")[0]},
|
{"short_id", reality_sid.split(",")[0]},
|
||||||
};
|
};
|
||||||
if (fp.isEmpty()) fp = "chrome";
|
if (fp.isEmpty()) fp = "random";
|
||||||
}
|
}
|
||||||
if (!fp.isEmpty()) {
|
if (!fp.isEmpty()) {
|
||||||
tls["utls"] = QJsonObject{
|
tls["utls"] = QJsonObject{
|
||||||
|
|||||||
@@ -43,9 +43,8 @@ namespace NekoGui_fmt {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (security == "tls") {
|
if (security == "tls") {
|
||||||
auto fp = utlsFingerprint.isEmpty() ? NekoGui::dataStore->utlsFingerprint : utlsFingerprint;
|
|
||||||
QJsonObject tls;
|
QJsonObject tls;
|
||||||
if (!fp.isEmpty()) tls["fingerprint"] = fp;
|
if (!utlsFingerprint.isEmpty()) tls["fingerprint"] = utlsFingerprint;
|
||||||
if (!sni.trimmed().isEmpty()) tls["serverName"] = sni;
|
if (!sni.trimmed().isEmpty()) tls["serverName"] = sni;
|
||||||
if (reality_pbk.trimmed().isEmpty()) {
|
if (reality_pbk.trimmed().isEmpty()) {
|
||||||
if (allow_insecure || NekoGui::dataStore->skip_cert) tls["allowInsecure"] = true;
|
if (allow_insecure || NekoGui::dataStore->skip_cert) tls["allowInsecure"] = true;
|
||||||
@@ -65,7 +64,7 @@ namespace NekoGui_fmt {
|
|||||||
tls["publicKey"] = reality_pbk;
|
tls["publicKey"] = reality_pbk;
|
||||||
tls["shortId"] = reality_sid;
|
tls["shortId"] = reality_sid;
|
||||||
tls["spiderX"] = reality_spx;
|
tls["spiderX"] = reality_spx;
|
||||||
if (fp.isEmpty()) tls["fingerprint"] = "chrome";
|
if (utlsFingerprint.isEmpty()) tls["fingerprint"] = "chrome";
|
||||||
streamSettings["realitySettings"] = tls;
|
streamSettings["realitySettings"] = tls;
|
||||||
streamSettings["security"] = "reality";
|
streamSettings["security"] = "reality";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -136,7 +136,11 @@ namespace NekoGui_fmt {
|
|||||||
|
|
||||||
if (!stream->sni.isEmpty()) query.addQueryItem("sni", stream->sni);
|
if (!stream->sni.isEmpty()) query.addQueryItem("sni", stream->sni);
|
||||||
if (stream->allow_insecure) query.addQueryItem("allowInsecure", "1");
|
if (stream->allow_insecure) query.addQueryItem("allowInsecure", "1");
|
||||||
if (!stream->utlsFingerprint.isEmpty()) query.addQueryItem("fp", stream->utlsFingerprint);
|
if (stream->utlsFingerprint.isEmpty()) {
|
||||||
|
query.addQueryItem("fp", NekoGui::dataStore->utlsFingerprint);
|
||||||
|
} else {
|
||||||
|
query.addQueryItem("fp", stream->utlsFingerprint);
|
||||||
|
}
|
||||||
|
|
||||||
if (security == "reality") {
|
if (security == "reality") {
|
||||||
query.addQueryItem("pbk", stream->reality_pbk);
|
query.addQueryItem("pbk", stream->reality_pbk);
|
||||||
|
|||||||
@@ -69,6 +69,9 @@ namespace NekoGui_fmt {
|
|||||||
stream->reality_sid = GetQueryValue(query, "sid", "");
|
stream->reality_sid = GetQueryValue(query, "sid", "");
|
||||||
stream->reality_spx = GetQueryValue(query, "spx", "");
|
stream->reality_spx = GetQueryValue(query, "spx", "");
|
||||||
stream->utlsFingerprint = GetQueryValue(query, "fp", "");
|
stream->utlsFingerprint = GetQueryValue(query, "fp", "");
|
||||||
|
if (stream->utlsFingerprint.isEmpty()) {
|
||||||
|
stream->utlsFingerprint = NekoGui::dataStore->utlsFingerprint;
|
||||||
|
}
|
||||||
|
|
||||||
// type
|
// type
|
||||||
if (stream->network == "ws") {
|
if (stream->network == "ws") {
|
||||||
@@ -184,6 +187,9 @@ namespace NekoGui_fmt {
|
|||||||
stream->reality_sid = GetQueryValue(query, "sid", "");
|
stream->reality_sid = GetQueryValue(query, "sid", "");
|
||||||
stream->reality_spx = GetQueryValue(query, "spx", "");
|
stream->reality_spx = GetQueryValue(query, "spx", "");
|
||||||
stream->utlsFingerprint = GetQueryValue(query, "fp", "");
|
stream->utlsFingerprint = GetQueryValue(query, "fp", "");
|
||||||
|
if (stream->utlsFingerprint.isEmpty()) {
|
||||||
|
stream->utlsFingerprint = NekoGui::dataStore->utlsFingerprint;
|
||||||
|
}
|
||||||
|
|
||||||
// type
|
// type
|
||||||
if (stream->network == "ws") {
|
if (stream->network == "ws") {
|
||||||
|
|||||||
@@ -308,6 +308,9 @@ namespace NekoGui_sub {
|
|||||||
bean->stream->alpn = Node2QStringList(proxy["alpn"]).join(",");
|
bean->stream->alpn = Node2QStringList(proxy["alpn"]).join(",");
|
||||||
bean->stream->allow_insecure = Node2Bool(proxy["skip-cert-verify"]);
|
bean->stream->allow_insecure = Node2Bool(proxy["skip-cert-verify"]);
|
||||||
bean->stream->utlsFingerprint = Node2QString(proxy["client-fingerprint"]);
|
bean->stream->utlsFingerprint = Node2QString(proxy["client-fingerprint"]);
|
||||||
|
if (bean->stream->utlsFingerprint.isEmpty()) {
|
||||||
|
bean->stream->utlsFingerprint = NekoGui::dataStore->utlsFingerprint;
|
||||||
|
}
|
||||||
|
|
||||||
// sing-mux
|
// sing-mux
|
||||||
auto smux = NodeChild(proxy, {"smux"});
|
auto smux = NodeChild(proxy, {"smux"});
|
||||||
@@ -348,6 +351,11 @@ namespace NekoGui_sub {
|
|||||||
bean->stream->alpn = Node2QStringList(proxy["alpn"]).join(",");
|
bean->stream->alpn = Node2QStringList(proxy["alpn"]).join(",");
|
||||||
if (Node2Bool(proxy["tls"])) bean->stream->security = "tls";
|
if (Node2Bool(proxy["tls"])) bean->stream->security = "tls";
|
||||||
if (Node2Bool(proxy["skip-cert-verify"])) bean->stream->allow_insecure = true;
|
if (Node2Bool(proxy["skip-cert-verify"])) bean->stream->allow_insecure = true;
|
||||||
|
bean->stream->utlsFingerprint = Node2QString(proxy["client-fingerprint"]);
|
||||||
|
bean->stream->utlsFingerprint = Node2QString(proxy["client-fingerprint"]);
|
||||||
|
if (bean->stream->utlsFingerprint.isEmpty()) {
|
||||||
|
bean->stream->utlsFingerprint = NekoGui::dataStore->utlsFingerprint;
|
||||||
|
}
|
||||||
|
|
||||||
// sing-mux
|
// sing-mux
|
||||||
auto smux = NodeChild(proxy, {"smux"});
|
auto smux = NodeChild(proxy, {"smux"});
|
||||||
|
|||||||
@@ -221,7 +221,11 @@ void DialogEditProfile::typeSelected(const QString &newType) {
|
|||||||
ui->host->setText(stream->host);
|
ui->host->setText(stream->host);
|
||||||
ui->sni->setText(stream->sni);
|
ui->sni->setText(stream->sni);
|
||||||
ui->alpn->setText(stream->alpn);
|
ui->alpn->setText(stream->alpn);
|
||||||
|
if (newEnt) {
|
||||||
|
ui->utlsFingerprint->setCurrentText(NekoGui::dataStore->utlsFingerprint);
|
||||||
|
} else {
|
||||||
ui->utlsFingerprint->setCurrentText(stream->utlsFingerprint);
|
ui->utlsFingerprint->setCurrentText(stream->utlsFingerprint);
|
||||||
|
}
|
||||||
ui->insecure->setChecked(stream->allow_insecure);
|
ui->insecure->setChecked(stream->allow_insecure);
|
||||||
ui->header_type->setCurrentText(stream->header_type);
|
ui->header_type->setCurrentText(stream->header_type);
|
||||||
ui->ws_early_data_name->setText(stream->ws_early_data_name);
|
ui->ws_early_data_name->setText(stream->ws_early_data_name);
|
||||||
|
|||||||
Reference in New Issue
Block a user