From 80095dfd816bfd10ff756a8b7ae9dea4e2892473 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 9 Aug 2026 19:12:46 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Sync=202026-08-09=2019:12:46?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- luci-app-passwall2/Makefile | 2 +- .../model/cbi/passwall2/client/type/ray.lua | 33 ++++++++++++++++++- .../cbi/passwall2/client/type/sing-box.lua | 33 ++++++++++++++++++- .../luasrc/passwall2/util_sing-box.lua | 17 +++++++++- .../luasrc/passwall2/util_xray.lua | 17 +++++++++- .../view/passwall2/global/status_bottom.htm | 8 ++--- luci-app-passwall2/po/fa/passwall2.po | 4 +-- luci-app-passwall2/po/ru/passwall2.po | 4 +-- luci-app-passwall2/po/zh-cn/passwall2.po | 4 +-- luci-app-passwall2/po/zh-tw/passwall2.po | 4 +-- luci-app-ssr-plus/Makefile | 2 +- .../view/shadowsocksr/status_bottom.htm | 8 ++--- 12 files changed, 110 insertions(+), 26 deletions(-) diff --git a/luci-app-passwall2/Makefile b/luci-app-passwall2/Makefile index b07c45b61..1609a0161 100644 --- a/luci-app-passwall2/Makefile +++ b/luci-app-passwall2/Makefile @@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-passwall2 PKG_VERSION:=26.8.7 -PKG_RELEASE:=72 +PKG_RELEASE:=73 PKG_PO_VERSION:=$(PKG_VERSION) PKG_CONFIG_DEPENDS:= \ diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua index ad40219e4..fdffb931b 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua @@ -518,8 +518,39 @@ o = s:option(Flag, _n("use_mldsa65Verify"), translate("ML-DSA-65")) o.default = "0" o:depends({ [_n("tls")] = true, [_n("reality")] = true }) -o = s:option(Value, _n("cipherSuites"), translate("Cipher Suites"), '***' .. " " .. translate("Configures the list of supported cipher suites, separated by :")) +o = s:option(DynamicList, _n("cipherSuites"), translate("Cipher Suites"), '***' .. " " .. translate("Configures the list of supported cipher suites.")) +o:value("TLS_AES_128_GCM_SHA256") +o:value("TLS_AES_256_GCM_SHA384") +o:value("TLS_CHACHA20_POLY1305_SHA256") +o:value("TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA") +o:value("TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA") +o:value("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA") +o:value("TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA") +o:value("TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256") +o:value("TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384") +o:value("TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256") +o:value("TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384") +o:value("TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256") +o:value("TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256") o:depends({ [_n("tls")] = true, [_n("reality")] = false }) +function o.custom_write(self, section, value) + local t = {} + local t2 = {} + if type(value) == "table" then + local x + for _, x in ipairs(value) do + if x and #x > 0 then + if not t2[x] then + t2[x] = x + t[#t+1] = x + end + end + end + else + t = { value } + end + m:set(section, self.option:sub(1 + #option_prefix), t) +end o = s:option(TextValue, _n("reality_mldsa65Verify"), "ML-DSA-65 " .. translate("Public key")) o.default = "" diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua index 934c3945a..9c3e39475 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua @@ -574,8 +574,39 @@ o.validate = function(self, value) return value end -o = s:option(Value, _n("cipherSuites"), translate("Cipher Suites"), '***' .. " " .. translate("Configures the list of supported cipher suites, separated by :")) +o = s:option(DynamicList, _n("cipherSuites"), translate("Cipher Suites"), '***' .. " " .. translate("Configures the list of supported cipher suites.")) +o:value("TLS_AES_128_GCM_SHA256") +o:value("TLS_AES_256_GCM_SHA384") +o:value("TLS_CHACHA20_POLY1305_SHA256") +o:value("TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA") +o:value("TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA") +o:value("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA") +o:value("TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA") +o:value("TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256") +o:value("TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384") +o:value("TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256") +o:value("TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384") +o:value("TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256") +o:value("TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256") o:depends({ [_n("tls")] = true }) +function o.custom_write(self, section, value) + local t = {} + local t2 = {} + if type(value) == "table" then + local x + for _, x in ipairs(value) do + if x and #x > 0 then + if not t2[x] then + t2[x] = x + t[#t+1] = x + end + end + end + else + t = { value } + end + m:set(section, self.option:sub(1 + #option_prefix), t) +end o = s:option(Flag, _n("ech"), translate("ECH")) o.default = "0" diff --git a/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua b/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua index 238478723..c63b53c40 100644 --- a/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua +++ b/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua @@ -96,6 +96,21 @@ local function get_log_level(s) return s end +--[[ +local cipherSuites = { + "TLS_AES_128_GCM_SHA256", "TLS_AES_256_GCM_SHA384", "TLS_CHACHA20_POLY1305_SHA256", + "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", + "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", + "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", + "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", + "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256" +} +local cipherSuites_lookup = {} +for i, v in ipairs(cipherSuites) do + cipherSuites_lookup[v] = true +end +]]-- + function parseDNS(str) local result_dns_server -- [proto]://[ip] @@ -261,7 +276,7 @@ function gen_outbound(flag, node, tag, proxy_table) fragment = fragment, record_fragment = record_fragment, certificate = (node.tls_certificate == "1" and node.tls_certificate_pem ~= "") and split(node.tls_certificate_pem, "\n") or nil, - cipher_suites = (node.cipherSuites and node.cipherSuites ~= "") and api.split(node.cipherSuites, ":") or nil, + cipher_suites = (node.cipherSuites and #node.cipherSuites > 0) and node.cipherSuites or nil, ech = (node.ech == "1") and (function() local function get_ech_domain(s) --兼容xray "域名+DNS" 格式ech local domain, dns = s:match("^([^+]+)%+(.+)$") diff --git a/luci-app-passwall2/luasrc/passwall2/util_xray.lua b/luci-app-passwall2/luasrc/passwall2/util_xray.lua index d3031ba90..530670c9c 100644 --- a/luci-app-passwall2/luasrc/passwall2/util_xray.lua +++ b/luci-app-passwall2/luasrc/passwall2/util_xray.lua @@ -36,6 +36,21 @@ local function get_log_level(s) return s end +--[[ +local cipherSuites = { + "TLS_AES_128_GCM_SHA256", "TLS_AES_256_GCM_SHA384", "TLS_CHACHA20_POLY1305_SHA256", + "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", + "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", + "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", + "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", + "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256" +} +local cipherSuites_lookup = {} +for i, v in ipairs(cipherSuites) do + cipherSuites_lookup[v] = true +end +]]-- + function parseDNS(str) local result_dns_server -- [proto]://[ip] @@ -195,7 +210,7 @@ function gen_outbound(flag, node, tag, proxy_table) certificate = api.split(node.tls_certificate_pem, "\n"), usage = "verify" } or nil, - cipherSuites = node.cipherSuites or nil + cipherSuites = (node.cipherSuites and #node.cipherSuites > 0) and table.concat(node.cipherSuites, ":") or nil, } or nil, realitySettings = (node.stream_security == "reality") and { serverName = node.tls_serverName, diff --git a/luci-app-passwall2/luasrc/view/passwall2/global/status_bottom.htm b/luci-app-passwall2/luasrc/view/passwall2/global/status_bottom.htm index 0a5aea90f..1a07b84e9 100644 --- a/luci-app-passwall2/luasrc/view/passwall2/global/status_bottom.htm +++ b/luci-app-passwall2/luasrc/view/passwall2/global/status_bottom.htm @@ -38,12 +38,8 @@ text-align: right; } -#cbi-passwall2+.cbi-page-actions.control-group.fixed { - bottom: 3.3rem; -} - -footer{ -display:block !important; +.pure-u-1-2, .pure-u-12-24 { + width: 50%; } @media screen and (max-width: 700px) { diff --git a/luci-app-passwall2/po/fa/passwall2.po b/luci-app-passwall2/po/fa/passwall2.po index 8d0f000b4..0cbfa1a05 100644 --- a/luci-app-passwall2/po/fa/passwall2.po +++ b/luci-app-passwall2/po/fa/passwall2.po @@ -2441,5 +2441,5 @@ msgstr "تنظیم نشده" msgid "Cipher Suites" msgstr "سوئیت‌های رمزدار" -msgid "Configures the list of supported cipher suites, separated by :" -msgstr "فهرست مجموعه‌های رمز پشتیبانی‌شده را که با موارد زیر از هم جدا شده‌اند، پیکربندی می‌کند:" +msgid "Configures the list of supported cipher suites." +msgstr "فهرست مجموعه‌های رمز پشتیبانی‌شده را پیکربندی می‌کند." diff --git a/luci-app-passwall2/po/ru/passwall2.po b/luci-app-passwall2/po/ru/passwall2.po index 0d3b7c3ab..205665bfe 100644 --- a/luci-app-passwall2/po/ru/passwall2.po +++ b/luci-app-passwall2/po/ru/passwall2.po @@ -2439,5 +2439,5 @@ msgstr "Не задано" msgid "Cipher Suites" msgstr "Наборы шифров" -msgid "Configures the list of supported cipher suites, separated by :" -msgstr "Задает список поддерживаемых наборов шифров, разделенных двоеточием (:)." +msgid "Configures the list of supported cipher suites." +msgstr "Задает список поддерживаемых наборов шифров." diff --git a/luci-app-passwall2/po/zh-cn/passwall2.po b/luci-app-passwall2/po/zh-cn/passwall2.po index 326e3f825..e6823a2e0 100644 --- a/luci-app-passwall2/po/zh-cn/passwall2.po +++ b/luci-app-passwall2/po/zh-cn/passwall2.po @@ -2427,5 +2427,5 @@ msgstr "未设置" msgid "Cipher Suites" msgstr "密码套件" -msgid "Configures the list of supported cipher suites, separated by :" -msgstr "配置支持的密码套件列表,以冒号 (:) 分隔。" +msgid "Configures the list of supported cipher suites." +msgstr "配置支持的密码套件列表。" diff --git a/luci-app-passwall2/po/zh-tw/passwall2.po b/luci-app-passwall2/po/zh-tw/passwall2.po index e6962d538..57fc9b651 100644 --- a/luci-app-passwall2/po/zh-tw/passwall2.po +++ b/luci-app-passwall2/po/zh-tw/passwall2.po @@ -2433,5 +2433,5 @@ msgstr "未設置" msgid "Cipher Suites" msgstr "密碼套件" -msgid "Configures the list of supported cipher suites, separated by :" -msgstr "配置支援的密碼套件列表,以冒號 (:) 分隔。" +msgid "Configures the list of supported cipher suites." +msgstr "配置支援的密碼套件列表。" diff --git a/luci-app-ssr-plus/Makefile b/luci-app-ssr-plus/Makefile index df86b9ba4..e2fb70335 100644 --- a/luci-app-ssr-plus/Makefile +++ b/luci-app-ssr-plus/Makefile @@ -4,7 +4,7 @@ LUCI_TITLE:=luci-app-ssr-plus LUCI_PKGARCH:=all PKG_NAME:=luci-app-ssr-plus PKG_VERSION:=196 -PKG_RELEASE:=54 +PKG_RELEASE:=55 PKG_CONFIG_DEPENDS:= \ CONFIG_PACKAGE_$(PKG_NAME)_Iptables_Transparent_Proxy \ diff --git a/luci-app-ssr-plus/luasrc/view/shadowsocksr/status_bottom.htm b/luci-app-ssr-plus/luasrc/view/shadowsocksr/status_bottom.htm index fbc6886fc..b301122b3 100644 --- a/luci-app-ssr-plus/luasrc/view/shadowsocksr/status_bottom.htm +++ b/luci-app-ssr-plus/luasrc/view/shadowsocksr/status_bottom.htm @@ -38,12 +38,8 @@ text-align: right; } -#cbi-shadowsocksr+.cbi-page-actions.control-group.fixed { - bottom: 3.3rem; -} - -footer{ -display:block !important; +.pure-u-1-2, .pure-u-12-24 { + width: 50%; } @media screen and (max-width: 700px) {