From a2fe70509b8e8aeca91f5a760b5c3e9ce1a22df5 Mon Sep 17 00:00:00 2001 From: xchacha20-poly1305 <139959885+xchacha20-poly1305@users.noreply.github.com> Date: Sat, 16 Sep 2023 17:27:16 +0800 Subject: [PATCH] refactor: show default fingerprint in ui Not add it to configuration in slient. fix(sub): add fingerprint for vmess --- fmt/Bean2CoreObj_box.cpp | 4 ++-- fmt/Bean2CoreObj_ray.cpp | 5 ++--- fmt/Bean2Link.cpp | 6 +++++- fmt/Link2Bean.cpp | 6 ++++++ sub/GroupUpdater.cpp | 8 ++++++++ ui/edit/dialog_edit_profile.cpp | 6 +++++- 6 files changed, 28 insertions(+), 7 deletions(-) diff --git a/fmt/Bean2CoreObj_box.cpp b/fmt/Bean2CoreObj_box.cpp index 13f32159d..70624a986 100644 --- a/fmt/Bean2CoreObj_box.cpp +++ b/fmt/Bean2CoreObj_box.cpp @@ -52,14 +52,14 @@ namespace NekoGui_fmt { if (!alpn.trimmed().isEmpty()) { tls["alpn"] = QList2QJsonArray(alpn.split(",")); } - auto fp = utlsFingerprint.isEmpty() ? NekoGui::dataStore->utlsFingerprint : utlsFingerprint; + QString fp = utlsFingerprint; if (!reality_pbk.trimmed().isEmpty()) { tls["reality"] = QJsonObject{ {"enabled", true}, {"public_key", reality_pbk}, {"short_id", reality_sid.split(",")[0]}, }; - if (fp.isEmpty()) fp = "chrome"; + if (fp.isEmpty()) fp = "random"; } if (!fp.isEmpty()) { tls["utls"] = QJsonObject{ diff --git a/fmt/Bean2CoreObj_ray.cpp b/fmt/Bean2CoreObj_ray.cpp index 276303eb1..bb1ccf3bd 100644 --- a/fmt/Bean2CoreObj_ray.cpp +++ b/fmt/Bean2CoreObj_ray.cpp @@ -43,9 +43,8 @@ namespace NekoGui_fmt { } if (security == "tls") { - auto fp = utlsFingerprint.isEmpty() ? NekoGui::dataStore->utlsFingerprint : utlsFingerprint; QJsonObject tls; - if (!fp.isEmpty()) tls["fingerprint"] = fp; + if (!utlsFingerprint.isEmpty()) tls["fingerprint"] = utlsFingerprint; if (!sni.trimmed().isEmpty()) tls["serverName"] = sni; if (reality_pbk.trimmed().isEmpty()) { if (allow_insecure || NekoGui::dataStore->skip_cert) tls["allowInsecure"] = true; @@ -65,7 +64,7 @@ namespace NekoGui_fmt { tls["publicKey"] = reality_pbk; tls["shortId"] = reality_sid; tls["spiderX"] = reality_spx; - if (fp.isEmpty()) tls["fingerprint"] = "chrome"; + if (utlsFingerprint.isEmpty()) tls["fingerprint"] = "chrome"; streamSettings["realitySettings"] = tls; streamSettings["security"] = "reality"; } diff --git a/fmt/Bean2Link.cpp b/fmt/Bean2Link.cpp index 7abbd2a32..2e9654018 100644 --- a/fmt/Bean2Link.cpp +++ b/fmt/Bean2Link.cpp @@ -136,7 +136,11 @@ namespace NekoGui_fmt { if (!stream->sni.isEmpty()) query.addQueryItem("sni", stream->sni); 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") { query.addQueryItem("pbk", stream->reality_pbk); diff --git a/fmt/Link2Bean.cpp b/fmt/Link2Bean.cpp index 89c757465..1d9d1c96a 100644 --- a/fmt/Link2Bean.cpp +++ b/fmt/Link2Bean.cpp @@ -69,6 +69,9 @@ namespace NekoGui_fmt { stream->reality_sid = GetQueryValue(query, "sid", ""); stream->reality_spx = GetQueryValue(query, "spx", ""); stream->utlsFingerprint = GetQueryValue(query, "fp", ""); + if (stream->utlsFingerprint.isEmpty()) { + stream->utlsFingerprint = NekoGui::dataStore->utlsFingerprint; + } // type if (stream->network == "ws") { @@ -184,6 +187,9 @@ namespace NekoGui_fmt { stream->reality_sid = GetQueryValue(query, "sid", ""); stream->reality_spx = GetQueryValue(query, "spx", ""); stream->utlsFingerprint = GetQueryValue(query, "fp", ""); + if (stream->utlsFingerprint.isEmpty()) { + stream->utlsFingerprint = NekoGui::dataStore->utlsFingerprint; + } // type if (stream->network == "ws") { diff --git a/sub/GroupUpdater.cpp b/sub/GroupUpdater.cpp index 033a45c32..ccea0497e 100644 --- a/sub/GroupUpdater.cpp +++ b/sub/GroupUpdater.cpp @@ -308,6 +308,9 @@ namespace NekoGui_sub { bean->stream->alpn = Node2QStringList(proxy["alpn"]).join(","); bean->stream->allow_insecure = Node2Bool(proxy["skip-cert-verify"]); bean->stream->utlsFingerprint = Node2QString(proxy["client-fingerprint"]); + if (bean->stream->utlsFingerprint.isEmpty()) { + bean->stream->utlsFingerprint = NekoGui::dataStore->utlsFingerprint; + } // sing-mux auto smux = NodeChild(proxy, {"smux"}); @@ -348,6 +351,11 @@ namespace NekoGui_sub { bean->stream->alpn = Node2QStringList(proxy["alpn"]).join(","); if (Node2Bool(proxy["tls"])) bean->stream->security = "tls"; 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 auto smux = NodeChild(proxy, {"smux"}); diff --git a/ui/edit/dialog_edit_profile.cpp b/ui/edit/dialog_edit_profile.cpp index 4eb524fd1..95a733f79 100644 --- a/ui/edit/dialog_edit_profile.cpp +++ b/ui/edit/dialog_edit_profile.cpp @@ -221,7 +221,11 @@ void DialogEditProfile::typeSelected(const QString &newType) { ui->host->setText(stream->host); ui->sni->setText(stream->sni); ui->alpn->setText(stream->alpn); - ui->utlsFingerprint->setCurrentText(stream->utlsFingerprint); + if (newEnt) { + ui->utlsFingerprint->setCurrentText(NekoGui::dataStore->utlsFingerprint); + } else { + ui->utlsFingerprint->setCurrentText(stream->utlsFingerprint); + } ui->insecure->setChecked(stream->allow_insecure); ui->header_type->setCurrentText(stream->header_type); ui->ws_early_data_name->setText(stream->ws_early_data_name);