From d52ec71bb952c5e0eeeed21d9ded8d850d2fe79b Mon Sep 17 00:00:00 2001 From: arm64v8a <48624112+arm64v8a@users.noreply.github.com> Date: Thu, 29 Jun 2023 21:39:54 +0900 Subject: [PATCH] Fix socksfmt --- .../sagernet/fmt/socks/SOCKSFmt.kt | 50 ++++++++----------- .../main/java/moe/matsuri/nb4a/utils/Util.kt | 2 +- 2 files changed, 21 insertions(+), 31 deletions(-) diff --git a/app/src/main/java/io/nekohasekai/sagernet/fmt/socks/SOCKSFmt.kt b/app/src/main/java/io/nekohasekai/sagernet/fmt/socks/SOCKSFmt.kt index 8eee291..b9fd409 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/fmt/socks/SOCKSFmt.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/fmt/socks/SOCKSFmt.kt @@ -6,42 +6,32 @@ import io.nekohasekai.sagernet.ktx.unUrlSafe import io.nekohasekai.sagernet.ktx.urlSafe import moe.matsuri.nb4a.SingBoxOptions import moe.matsuri.nb4a.utils.NGUtil +import moe.matsuri.nb4a.utils.Util import okhttp3.HttpUrl import okhttp3.HttpUrl.Companion.toHttpUrlOrNull fun parseSOCKS(link: String): SOCKSBean { - if (!link.substringAfter("://").contains(":")) { - // v2rayN shit format - var url = link.substringAfter("://") - if (url.contains("#")) { - url = url.substringBeforeLast("#") - } - url = url.decodeBase64UrlSafe() - val httpUrl = "http://$url".toHttpUrlOrNull() ?: error("Invalid v2rayN link content: $url") - return SOCKSBean().apply { - serverAddress = httpUrl.host - serverPort = httpUrl.port - username = httpUrl.username.takeIf { it != "null" } ?: "" - password = httpUrl.password.takeIf { it != "null" } ?: "" - if (link.contains("#")) { - name = link.substringAfter("#").unUrlSafe() - } - } - } else { - val url = ("http://" + link.substringAfter("://")).toHttpUrlOrNull() - ?: error("Not supported: $link") + val url = ("http://" + link.substringAfter("://")).toHttpUrlOrNull() + ?: error("Not supported: $link") - return SOCKSBean().apply { - protocol = when { - link.startsWith("socks4://") -> SOCKSBean.PROTOCOL_SOCKS4 - link.startsWith("socks4a://") -> SOCKSBean.PROTOCOL_SOCKS4A - else -> SOCKSBean.PROTOCOL_SOCKS5 + return SOCKSBean().apply { + protocol = when { + link.startsWith("socks4://") -> SOCKSBean.PROTOCOL_SOCKS4 + link.startsWith("socks4a://") -> SOCKSBean.PROTOCOL_SOCKS4A + else -> SOCKSBean.PROTOCOL_SOCKS5 + } + serverAddress = url.host + serverPort = url.port + username = url.username + password = url.password + // v2rayN fmt + if (password.isNullOrBlank() && !username.isNullOrBlank()) { + try { + val n = username.decodeBase64UrlSafe() + username = n.substringBefore(":") + password = n.substringAfter(":") + } catch (_: Exception) { } - serverAddress = url.host - serverPort = url.port - username = url.username - password = url.password - name = url.fragment } } } diff --git a/app/src/main/java/moe/matsuri/nb4a/utils/Util.kt b/app/src/main/java/moe/matsuri/nb4a/utils/Util.kt index 8db2d02..81f59bb 100644 --- a/app/src/main/java/moe/matsuri/nb4a/utils/Util.kt +++ b/app/src/main/java/moe/matsuri/nb4a/utils/Util.kt @@ -72,7 +72,7 @@ object Util { for (flag in flags) { try { ret = Base64.decode(str, flag) - } catch (e: Exception) { + } catch (_: Exception) { } if (ret != null) return ret }