diff --git a/.github/update.log b/.github/update.log index 5af877296f..a4c273b745 100644 --- a/.github/update.log +++ b/.github/update.log @@ -1139,3 +1139,4 @@ Update On Mon Sep 29 20:38:41 CEST 2025 Update On Tue Sep 30 20:35:53 CEST 2025 Update On Wed Oct 1 20:41:09 CEST 2025 Update On Thu Oct 2 20:40:58 CEST 2025 +Update On Fri Oct 3 20:39:08 CEST 2025 diff --git a/filebrowser/frontend/src/views/settings/Global.vue b/filebrowser/frontend/src/views/settings/Global.vue index e397c6f7ca..0a42a293be 100644 --- a/filebrowser/frontend/src/views/settings/Global.vue +++ b/filebrowser/frontend/src/views/settings/Global.vue @@ -65,7 +65,7 @@ {{ t("settings.documentation") }} diff --git a/lede/package/firmware/linux-firmware/aeonsemi.mk b/lede/package/firmware/linux-firmware/aeonsemi.mk new file mode 100644 index 0000000000..cbc45fff50 --- /dev/null +++ b/lede/package/firmware/linux-firmware/aeonsemi.mk @@ -0,0 +1,9 @@ +Package/aeonsemi-as21xxx-firmware = $(call Package/firmware-default,Aeonsemi AS21xxx Ethernet PHY firmware) +define Package/aeonsemi-as21xxx-firmware/install + $(INSTALL_DIR) $(1)/lib/firmware/aeonsemi + $(CP) \ + $(PKG_BUILD_DIR)/aeonsemi/as21x1x_fw.bin \ + $(1)/lib/firmware +endef + +$(eval $(call BuildPackage,aeonsemi-as21xxx-firmware)) diff --git a/small/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm b/small/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm index 805d1acec4..1ae1d9553e 100644 --- a/small/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm +++ b/small/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm @@ -94,13 +94,13 @@ function import_ssr_url(btn, urlname, sid) { } s.innerHTML = ""; //var ssu = ssrurl.match(/ssr:\/\/([A-Za-z0-9_-]+)/i); + ssrurl = ssrurl.replace(/&([a-zA-Z]+);/g, '&').replace(/\s*#\s*/, '#').trim(); //一些奇葩的链接用"&"当做"&","#"前后带空格 var ssu = ssrurl.split('://'); //console.log(ssu.length); if (ssu[0] === "ss") { var queryStr = ""; if (ssu[1].indexOf("?") > -1) { queryStr = ssu[1].split("?")[1]; // 提取 ? 后面的参数 - queryStr = queryStr.replace(/&([a-zA-Z]+);/g, '&'); // 转义 & 为 & } var params = new URLSearchParams(queryStr); if (params.get("type")) { @@ -177,7 +177,7 @@ function import_ssr_url(btn, urlname, sid) { s.innerHTML = "<%:Import configuration information successfully.%>"; return false; case "ss": - var url0 = ((ssu[1] || "").replace(/&([a-zA-Z]+);/g, '&').replace(/\s*#\s*/, '#').trim()); + var url0 = (ssu[1] || ""); var param = ""; // 先分离 #(alias) @@ -667,7 +667,7 @@ function import_ssr_url(btn, urlname, sid) { case "shadowsocks": try { // 处理完整 ss:// 链接 - var urlinfo = ssu[1].replace(/&([a-zA-Z]+);/g, '&').replace(/\s*#\s*/, '#').trim(); + var urlinfo = ssu[1]; // 拆分 @,判断是否是 base64 userinfo 的格式 var parts = urlinfo.split("@"); if (parts.length > 1) { @@ -676,7 +676,7 @@ function import_ssr_url(btn, urlname, sid) { var sepIndex = userinfo.indexOf(":"); if (sepIndex > -1) { method = userinfo.slice(0, sepIndex); - password = userinfo.slice(sepIndex + 1); + password = userinfo.slice(sepIndex + 1); //一些链接用明文uuid做密码 } } var url = new URL("http://" + urlinfo); diff --git a/small/ssocks/Makefile b/small/ssocks/Makefile index dbfc03e6de..cb02254e64 100644 --- a/small/ssocks/Makefile +++ b/small/ssocks/Makefile @@ -18,7 +18,7 @@ PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://github.com/tostercx/ssocks.git PKG_SOURCE_DATE:=2020-07-09 PKG_SOURCE_VERSION:=c2024789c1ee076d171fd6061d7c133302216ea7 -PKG_MIRROR_HASH:=3654e9f1fb54646e1e89c19e7aa3e105b84b2e20b5b634662c21c66691d1d22e +PKG_MIRROR_HASH:=2e9d1a2e6b47303389410952867d204e03054763d024a22a838a9707c2daca03 PKG_LICENSE:=MIT PKG_LICENSE_FILES:=LICENSE @@ -75,3 +75,4 @@ endef $(eval $(call BuildPackage,ssocks)) $(eval $(call BuildPackage,ssocksd)) + diff --git a/v2rayn/v2rayN/ServiceLib/Common/Utils.cs b/v2rayn/v2rayN/ServiceLib/Common/Utils.cs index 358d4e9a5c..85182a607c 100644 --- a/v2rayn/v2rayN/ServiceLib/Common/Utils.cs +++ b/v2rayn/v2rayN/ServiceLib/Common/Utils.cs @@ -85,13 +85,19 @@ public class Utils /// Base64 Encode /// /// + /// /// - public static string Base64Encode(string plainText) + public static string Base64Encode(string plainText, bool removePadding = false) { try { var plainTextBytes = Encoding.UTF8.GetBytes(plainText); - return Convert.ToBase64String(plainTextBytes); + var base64 = Convert.ToBase64String(plainTextBytes); + if (removePadding) + { + base64 = base64.TrimEnd('='); + } + return base64; } catch (Exception ex) { @@ -112,7 +118,7 @@ public class Utils { if (plainText.IsNullOrEmpty()) { - return ""; + return string.Empty; } plainText = plainText.Trim() @@ -947,7 +953,7 @@ public class Utils if (SetUnixFileMode(fileName)) { Logging.SaveLog($"Successfully set the file execution permission, {fileName}"); - return ""; + return string.Empty; } if (fileName.Contains(' ')) diff --git a/v2rayn/v2rayN/ServiceLib/Handler/Fmt/FmtHandler.cs b/v2rayn/v2rayN/ServiceLib/Handler/Fmt/FmtHandler.cs index 814d753db3..decda17fbc 100644 --- a/v2rayn/v2rayN/ServiceLib/Handler/Fmt/FmtHandler.cs +++ b/v2rayn/v2rayN/ServiceLib/Handler/Fmt/FmtHandler.cs @@ -27,7 +27,7 @@ public class FmtHandler catch (Exception ex) { Logging.SaveLog(_tag, ex); - return ""; + return string.Empty; } } diff --git a/v2rayn/v2rayN/ServiceLib/Handler/Fmt/ShadowsocksFmt.cs b/v2rayn/v2rayN/ServiceLib/Handler/Fmt/ShadowsocksFmt.cs index 2c9898e9f9..2ec9769fb1 100644 --- a/v2rayn/v2rayN/ServiceLib/Handler/Fmt/ShadowsocksFmt.cs +++ b/v2rayn/v2rayN/ServiceLib/Handler/Fmt/ShadowsocksFmt.cs @@ -42,7 +42,7 @@ public class ShadowsocksFmt : BaseFmt // item.port); //url = Utile.Base64Encode(url); //new Sip002 - var pw = Utils.Base64Encode($"{item.Security}:{item.Id}"); + var pw = Utils.Base64Encode($"{item.Security}:{item.Id}", true); return ToUri(EConfigType.Shadowsocks, item.Address, item.Port, pw, null, remark); } diff --git a/v2rayn/v2rayN/ServiceLib/Handler/Fmt/SocksFmt.cs b/v2rayn/v2rayN/ServiceLib/Handler/Fmt/SocksFmt.cs index 6110d78470..dbecdade65 100644 --- a/v2rayn/v2rayN/ServiceLib/Handler/Fmt/SocksFmt.cs +++ b/v2rayn/v2rayN/ServiceLib/Handler/Fmt/SocksFmt.cs @@ -33,7 +33,7 @@ public class SocksFmt : BaseFmt remark = "#" + Utils.UrlEncode(item.Remarks); } //new - var pw = Utils.Base64Encode($"{item.Security}:{item.Id}"); + var pw = Utils.Base64Encode($"{item.Security}:{item.Id}", true); return ToUri(EConfigType.SOCKS, item.Address, item.Port, pw, null, remark); } diff --git a/v2rayn/v2rayN/ServiceLib/Manager/AppManager.cs b/v2rayn/v2rayN/ServiceLib/Manager/AppManager.cs index 16aa425375..fb2a3f3989 100644 --- a/v2rayn/v2rayN/ServiceLib/Manager/AppManager.cs +++ b/v2rayn/v2rayN/ServiceLib/Manager/AppManager.cs @@ -8,7 +8,6 @@ public sealed class AppManager private Config _config; private int? _statePort; private int? _statePort2; - private WindowsJob? _processJob; public static AppManager Instance => _instance.Value; public Config Config => _config; @@ -136,21 +135,6 @@ public sealed class AppManager return localPort + (int)protocol; } - public void AddProcess(nint processHandle) - { - if (Utils.IsWindows()) - { - _processJob ??= new(); - try - { - _processJob?.AddProcess(processHandle); - } - catch - { - } - } - } - #endregion Config #region SqliteHelper diff --git a/v2rayn/v2rayN/ServiceLib/Manager/CoreManager.cs b/v2rayn/v2rayN/ServiceLib/Manager/CoreManager.cs index 04f34d7538..07876db8b3 100644 --- a/v2rayn/v2rayN/ServiceLib/Manager/CoreManager.cs +++ b/v2rayn/v2rayN/ServiceLib/Manager/CoreManager.cs @@ -8,6 +8,7 @@ public class CoreManager private static readonly Lazy _instance = new(() => new()); public static CoreManager Instance => _instance.Value; private Config _config; + private WindowsJob? _processJob; private ProcessService? _processService; private ProcessService? _processPreService; private bool _linuxSudo = false; @@ -264,14 +265,28 @@ public class CoreManager await procService.StartAsync(); await Task.Delay(100); - AppManager.Instance.AddProcess(procService.Handle); + if (procService is null or { HasExited: true }) { throw new Exception(ResUI.FailedToRunCore); } + AddProcessJob(procService.Handle); return procService; } + private void AddProcessJob(nint processHandle) + { + if (Utils.IsWindows()) + { + _processJob ??= new(); + try + { + _processJob?.AddProcess(processHandle); + } + catch { } + } + } + #endregion Process } diff --git a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/fmt/ShadowsocksFmt.kt b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/fmt/ShadowsocksFmt.kt index 87ba74f8de..dda9ac898c 100644 --- a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/fmt/ShadowsocksFmt.kt +++ b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/fmt/ShadowsocksFmt.kt @@ -122,7 +122,7 @@ object ShadowsocksFmt : FmtBase() { fun toUri(config: ProfileItem): String { val pw = "${config.method}:${config.password}" - return toUri(config, Utils.encode(pw), null) + return toUri(config, Utils.encode(pw, true), null) } /** diff --git a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/fmt/SocksFmt.kt b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/fmt/SocksFmt.kt index 30bc08e4bc..ba7b86a941 100644 --- a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/fmt/SocksFmt.kt +++ b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/fmt/SocksFmt.kt @@ -51,7 +51,7 @@ object SocksFmt : FmtBase() { else ":" - return toUri(config, Utils.encode(pw), null) + return toUri(config, Utils.encode(pw, true), null) } /** diff --git a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/util/Utils.kt b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/util/Utils.kt index 148ce4ec13..0864c09d65 100644 --- a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/util/Utils.kt +++ b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/util/Utils.kt @@ -134,11 +134,16 @@ object Utils { * Encode a string to base64. * * @param text The string to encode. + * @param removePadding * @return The base64 encoded string, or an empty string if encoding fails. */ - fun encode(text: String): String { + fun encode(text: String, removePadding : Boolean = false): String { return try { - Base64.encodeToString(text.toByteArray(Charsets.UTF_8), Base64.NO_WRAP) + var encoded = Base64.encodeToString(text.toByteArray(Charsets.UTF_8), Base64.NO_WRAP) + if (removePadding) { + encoded = encoded.trimEnd('=') + } + encoded } catch (e: Exception) { Log.e(AppConfig.TAG, "Failed to encode text to base64", e) "" diff --git a/v2rayng/V2rayNG/gradle/libs.versions.toml b/v2rayng/V2rayNG/gradle/libs.versions.toml index 34ea1c9685..a5b642bd23 100644 --- a/v2rayng/V2rayNG/gradle/libs.versions.toml +++ b/v2rayng/V2rayNG/gradle/libs.versions.toml @@ -20,8 +20,8 @@ swiperefreshlayout = "1.1.0" toasty = "1.5.2" editorkit = "2.9.0" core = "3.5.3" -workRuntimeKtx = "2.10.3" -lifecycleViewmodelKtx = "2.9.2" +workRuntimeKtx = "2.10.5" +lifecycleViewmodelKtx = "2.9.4" multidex = "2.0.1" mockitoMockitoInline = "5.2.0" flexbox = "3.0.0"