From a973c3f4ad873d77d5412df7fe74217e3920a2c7 Mon Sep 17 00:00:00 2001 From: arm64v8a <48624112+arm64v8a@users.noreply.github.com> Date: Tue, 29 Nov 2022 10:15:57 +0900 Subject: [PATCH] bug fix --- db/Database.cpp | 3 ++- fmt/Bean2CoreObj_box.cpp | 2 ++ fmt/Bean2External.cpp | 10 ++++++++-- fmt/Bean2Link.cpp | 16 ++++++++-------- main/NekoRay_Utils.hpp | 4 ---- 5 files changed, 20 insertions(+), 15 deletions(-) diff --git a/db/Database.cpp b/db/Database.cpp index 30cee93..b02ef46 100644 --- a/db/Database.cpp +++ b/db/Database.cpp @@ -19,7 +19,8 @@ namespace NekoRay { void ProfileManager::LoadManager() { for (auto id: _profiles) { auto ent = LoadProxyEntity(QString("profiles/%1.json").arg(id)); - if (ent->bean->version == -114514) { // clear invaild profile + if (ent == nullptr || ent->bean == nullptr || ent->bean->version == -114514) { + // clear invaild profile DeleteProfile(id); continue; } diff --git a/fmt/Bean2CoreObj_box.cpp b/fmt/Bean2CoreObj_box.cpp index 6384a34..77d600d 100644 --- a/fmt/Bean2CoreObj_box.cpp +++ b/fmt/Bean2CoreObj_box.cpp @@ -89,6 +89,7 @@ namespace NekoRay::fmt { CoreObjOutboundBuildResult VMessBean::BuildCoreObjSingBox() { CoreObjOutboundBuildResult result; + QJsonObject outbound{ {"type", "vmess"}, {"server", serverAddress}, @@ -105,6 +106,7 @@ namespace NekoRay::fmt { CoreObjOutboundBuildResult TrojanVLESSBean::BuildCoreObjSingBox() { CoreObjOutboundBuildResult result; + QJsonObject outbound{ {"type", proxy_type == proxy_VLESS ? "vless" : "trojan"}, {"server", serverAddress}, diff --git a/fmt/Bean2External.cpp b/fmt/Bean2External.cpp index c213849..d260a49 100644 --- a/fmt/Bean2External.cpp +++ b/fmt/Bean2External.cpp @@ -51,10 +51,16 @@ namespace NekoRay::fmt { domain_address = WrapIPV6Host(domain_address); connect_address = WrapIPV6Host(connect_address); + auto proxy_url = QUrl(); + proxy_url.setScheme(protocol); + proxy_url.setUserName(username); + proxy_url.setPassword(password); + proxy_url.setPort(connect_port); + proxy_url.setHost(domain_address); + result.arguments += "--log"; result.arguments += "--listen=socks://127.0.0.1:" + Int2String(socks_port); - result.arguments += "--proxy=" + protocol + "://" + username + ":" + password + "@" + - domain_address + ":" + Int2String(connect_port); + result.arguments += "--proxy=" + proxy_url.toString(QUrl::FullyEncoded); if (domain_address != connect_address) result.arguments += "--host-resolver-rules=MAP " + domain_address + " " + connect_address; if (insecure_concurrency > 0) result.arguments += "--insecure-concurrency=" + Int2String(insecure_concurrency); diff --git a/fmt/Bean2Link.cpp b/fmt/Bean2Link.cpp index 1d1eff7..b2126ea 100644 --- a/fmt/Bean2Link.cpp +++ b/fmt/Bean2Link.cpp @@ -15,12 +15,12 @@ namespace NekoRay::fmt { } else { url.setScheme(QString("socks%1").arg(socks_http_type)); } - if (!name.isEmpty()) url.setFragment(UrlSafe_encode(name)); + if (!name.isEmpty()) url.setFragment(name); if (!username.isEmpty()) url.setUserName(username); if (!password.isEmpty()) url.setPassword(password); url.setHost(serverAddress); url.setPort(serverPort); - return url.toString(); + return url.toString(QUrl::FullyEncoded); } QString TrojanVLESSBean::ToShareLink() { @@ -30,7 +30,7 @@ namespace NekoRay::fmt { url.setUserName(password); url.setHost(serverAddress); url.setPort(serverPort); - if (!name.isEmpty()) url.setFragment(UrlSafe_encode(name)); + if (!name.isEmpty()) url.setFragment(name); if (!stream->sni.isEmpty()) query.addQueryItem("sni", stream->sni); query.addQueryItem("security", stream->security); query.addQueryItem("type", stream->network); @@ -43,7 +43,7 @@ namespace NekoRay::fmt { } url.setQuery(query); - return url.toString(); + return url.toString(QUrl::FullyEncoded); } QString ShadowSocksBean::ToShareLink() { @@ -53,11 +53,11 @@ namespace NekoRay::fmt { url.setUserName(username.toUtf8().toBase64(QByteArray::Base64Option::Base64UrlEncoding)); url.setHost(serverAddress); url.setPort(serverPort); - if (!name.isEmpty()) url.setFragment(UrlSafe_encode(name)); + if (!name.isEmpty()) url.setFragment(name); QUrlQuery q; if (!plugin.isEmpty()) q.addQueryItem("plugin", plugin); if (!q.isEmpty()) url.setQuery(q); - return url.toString(); + return url.toString(QUrl::FullyEncoded); } QString VMessBean::ToShareLink() { @@ -86,8 +86,8 @@ namespace NekoRay::fmt { url.setPassword(password); url.setHost(serverAddress); url.setPort(serverPort); - if (!name.isEmpty()) url.setFragment(UrlSafe_encode(name)); - return url.toString(); + if (!name.isEmpty()) url.setFragment(name); + return url.toString(QUrl::FullyEncoded); } } // namespace NekoRay::fmt \ No newline at end of file diff --git a/main/NekoRay_Utils.hpp b/main/NekoRay_Utils.hpp index 1e76744..e267d8c 100644 --- a/main/NekoRay_Utils.hpp +++ b/main/NekoRay_Utils.hpp @@ -57,10 +57,6 @@ QString GetRandomString(int randomStringLength); quint64 GetRandomUint64(); -inline QString UrlSafe_encode(const QString &s) { - return s.toUtf8().toPercentEncoding().replace(" ", "%20"); -} - // JSON class QJsonObject;