From f9a8dc640a6890968b37c463ed8ee2c2b790e00c Mon Sep 17 00:00:00 2001 From: tdjnodj <108401163+tdjnodj@users.noreply.github.com> Date: Sat, 20 May 2023 13:24:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=80=E4=BA=9B=E5=8E=86?= =?UTF-8?q?=E5=8F=B2=E9=97=AE=E9=A2=98=20(#592)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix desktop * SIP002-URI-Scheme --------- Co-authored-by: arm64v8a <48624112+arm64v8a@users.noreply.github.com> --- fmt/Bean2Link.cpp | 15 ++++++++++++--- fmt/Link2Bean.cpp | 19 +++++++++---------- libs/package_debian.sh | 25 +++++++++++++++---------- 3 files changed, 36 insertions(+), 23 deletions(-) diff --git a/fmt/Bean2Link.cpp b/fmt/Bean2Link.cpp index dd381e3..9fb0bc1 100644 --- a/fmt/Bean2Link.cpp +++ b/fmt/Bean2Link.cpp @@ -72,18 +72,27 @@ namespace NekoRay::fmt { return url.toString(QUrl::FullyEncoded); } + const char* fixShadowsocksUserNameEncodeMagic = "fixShadowsocksUserNameEncodeMagic-holder-for-QUrl"; + QString ShadowSocksBean::ToShareLink() { QUrl url; url.setScheme("ss"); - auto username = method + ":" + password; - url.setUserName(username.toUtf8().toBase64(QByteArray::Base64Option::Base64UrlEncoding)); + if (method.startsWith("2022-")) { + url.setUserName(fixShadowsocksUserNameEncodeMagic); + } else { + auto method_password = method + ":" + password; + url.setUserName(method_password.toUtf8().toBase64(QByteArray::Base64Option::Base64UrlEncoding)); + } url.setHost(serverAddress); url.setPort(serverPort); if (!name.isEmpty()) url.setFragment(name); QUrlQuery q; if (!plugin.isEmpty()) q.addQueryItem("plugin", plugin); if (!q.isEmpty()) url.setQuery(q); - return url.toString(QUrl::FullyEncoded); + // + auto link = url.toString(QUrl::FullyEncoded); + link = link.replace(fixShadowsocksUserNameEncodeMagic, method + ":" + QUrl::toPercentEncoding(password)); + return link; } QString VMessBean::ToShareLink() { diff --git a/fmt/Link2Bean.cpp b/fmt/Link2Bean.cpp index 9b1d2e6..0ff14bc 100644 --- a/fmt/Link2Bean.cpp +++ b/fmt/Link2Bean.cpp @@ -101,18 +101,17 @@ namespace NekoRay::fmt { serverAddress = url.host(); serverPort = url.port(); - auto urlUserName = url.userName(); - QString method_password; - if (urlUserName.contains(":")) { - // 2022 format - method_password = urlUserName; - } else { + if (url.password().isEmpty()) { // traditional format - method_password = DecodeB64IfValid(urlUserName, QByteArray::Base64Option::Base64UrlEncoding); + auto method_password = DecodeB64IfValid(url.userName(), QByteArray::Base64Option::Base64UrlEncoding); + if (method_password.isEmpty()) return false; + method = SubStrBefore(method_password, ":"); + password = SubStrAfter(method_password, ":"); + } else { + // 2022 format + method = url.userName(); + password = url.password(); } - if (method_password.isEmpty()) return false; - method = SubStrBefore(method_password, ":"); - password = SubStrAfter(method_password, ":"); auto query = GetQuery(url); plugin = query.queryItemValue("plugin").replace("simple-obfs;", "obfs-local;"); diff --git a/libs/package_debian.sh b/libs/package_debian.sh index 0c79a48..57e49a8 100644 --- a/libs/package_debian.sh +++ b/libs/package_debian.sh @@ -20,17 +20,22 @@ Description: Qt based cross-platform GUI proxy configuration manager (backend: v EOF cat >nekoray/DEBIAN/postinst <<-EOF -cat >/usr/share/applications/nekoray.desktop<<-END -[Desktop Entry] -Name=nekoray -Version=$version -Comment=Qt based cross-platform GUI proxy configuration manager (backend: v2ray / sing-box) -Exec=/opt/nekoray/nekoray -appdata -Icon=/opt/nekoray/nekoray.png -Terminal=false -Type=Application -Categories=Network;Application; +if [ -z /usr/share/applications/nekoray.desktop ]; then + cat >/usr/share/applications/nekoray.desktop<<-END + [Desktop Entry] + Name=nekoray + Version=$version + Comment=Qt based cross-platform GUI proxy configuration manager (backend: v2ray / sing-box) + Exec=/opt/nekoray/nekoray -appdata + Icon=/opt/nekoray/nekoray.png + Terminal=false + Type=Application + Categories=Network;Application; END +else + sed -i "s/^Version=.*/Version=$version/" /usr/share/applications/nekoray.desktop +fi + update-desktop-database EOF