From 030d9d82a4b4637ab73701f936fb149ba16a98f3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 11 Aug 2026 20:54:16 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=8D=93=20Sync=202026-08-11=2020:54:16?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- UnblockNeteaseMusic/Makefile | 4 +- baidudrive/Makefile | 4 +- luci-app-passwall/Makefile | 4 +- .../luasrc/controller/passwall.lua | 2 +- .../root/etc/uci-defaults/luci-passwall | 6 +- .../root/usr/share/passwall/app.sh | 24 ++-- .../root/usr/share/passwall/iptables.sh | 24 ++-- .../root/usr/share/passwall/nftables.sh | 24 ++-- luci-app-passwall2/Makefile | 2 +- .../luasrc/controller/passwall2.lua | 2 +- .../root/etc/uci-defaults/luci-passwall2 | 14 ++- .../root/usr/share/passwall2/app.sh | 22 ++-- luci-app-ssr-plus/Makefile | 2 +- .../root/usr/share/shadowsocksr/subscribe.lua | 8 +- luci-theme-footstrap/Makefile | 2 +- .../htdocs/luci-static/resources/fs-router.js | 63 ++++------ .../htdocs/luci-static/resources/fs-sheets.js | 38 +++++- luci-theme-footstrap/styles/02-tokens.css | 7 ++ .../styles/pages/70-syslog.css | 110 ++++++++---------- .../styles/theme/25-progressbar.css | 64 +++++----- .../styles/theme/60-inputs.css | 2 +- .../styles/theme/65-dropdown.css | 9 +- natflow/Makefile | 4 +- 23 files changed, 228 insertions(+), 213 deletions(-) diff --git a/UnblockNeteaseMusic/Makefile b/UnblockNeteaseMusic/Makefile index 44db4f3a..0931aeaa 100644 --- a/UnblockNeteaseMusic/Makefile +++ b/UnblockNeteaseMusic/Makefile @@ -6,12 +6,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=UnblockNeteaseMusic PKG_BASE_VERSION:=0.27.0 -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://github.com/UnblockNeteaseMusic/server.git PKG_SOURCE_DATE:=2022-10-09 -PKG_SOURCE_VERSION:=39e21bfb4b7581f39785b190aeced201d23f0d41 +PKG_SOURCE_VERSION:=c29ff1bfaf138afe3c41ee1be43daa91097afc9f PKG_MIRROR_HASH:=skip PKG_VERSION:=$(PKG_BASE_VERSION)-$(PKG_SOURCE_DATE)-$(call version_abbrev,$(PKG_SOURCE_VERSION)) diff --git a/baidudrive/Makefile b/baidudrive/Makefile index 384be4ed..98f847e1 100644 --- a/baidudrive/Makefile +++ b/baidudrive/Makefile @@ -10,8 +10,8 @@ include $(TOPDIR)/rules.mk PKG_ARCH_BAIDUDRIVE:=$(ARCH) PKG_NAME:=baidudrive -PKG_VERSION:=linkeasefull-runtime-v3.0.5 -PKG_RELEASE:=7 +PKG_VERSION:=baidudrive-runtime-v1.0.5 +PKG_RELEASE:=8 PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://github.com/istoreos/istoreos-app-hub/releases/download/baidudrive-runtime-v$(PKG_VERSION)/ PKG_HASH:=skip diff --git a/luci-app-passwall/Makefile b/luci-app-passwall/Makefile index 83c43980..a174b1f1 100644 --- a/luci-app-passwall/Makefile +++ b/luci-app-passwall/Makefile @@ -7,8 +7,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-passwall -PKG_VERSION:=26.8.10 -PKG_RELEASE:=213 +PKG_VERSION:=26.8.11 +PKG_RELEASE:=214 PKG_PO_VERSION:=$(PKG_VERSION) PKG_CONFIG_DEPENDS:= \ diff --git a/luci-app-passwall/luasrc/controller/passwall.lua b/luci-app-passwall/luasrc/controller/passwall.lua index c3b3afa9..cc43be8f 100644 --- a/luci-app-passwall/luasrc/controller/passwall.lua +++ b/luci-app-passwall/luasrc/controller/passwall.lua @@ -471,7 +471,7 @@ function socks_status() e.use_http = 0 if tonumber(use_http) > 0 then e.use_http = 1 - e.http_status = luci.sys.call(string.format("/bin/busybox top -bn1 | grep -v 'grep' | grep '/tmp/etc/passwall/bin/' | grep -v '_acl_' | grep '%s' | grep -E 'HTTP_|HTTP2SOCKS' > /dev/null", id)) == 0 + e.http_status = luci.sys.call(string.format("/bin/busybox top -bn1 | grep -v -E 'grep|acl/|acl_' | grep '%s/bin/' | grep '%s' | grep -E '\\+http|_http' > /dev/null", appname, id)) == 0 end http_write_json(e) end diff --git a/luci-app-passwall/root/etc/uci-defaults/luci-passwall b/luci-app-passwall/root/etc/uci-defaults/luci-passwall index 39a56e9f..2c347783 100644 --- a/luci-app-passwall/root/etc/uci-defaults/luci-passwall +++ b/luci-app-passwall/root/etc/uci-defaults/luci-passwall @@ -64,8 +64,12 @@ uci -q delete passwall.@global_xray[0].route_only for sid in $(uci show passwall | grep "=socks" | awk -F '.' '{print $2}' | awk -F '=' '{print $1}'); do if [ -z "$(echo ${sid} | grep '^socks_')" ]; then new_id="socks_$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 5)" + old_ref="Socks_${sid}" uci -q rename passwall.${sid}="${new_id}" - unset sid new_id + for item in $(uci show passwall | grep "='${old_ref}'\$" | cut -d '=' -sf 1); do + uci -q set ${item}="${new_id}" + done + unset sid new_id old_ref item fi done for sid in $(uci show passwall | grep "@acl_rule" | cut -d '.' -sf 2 | cut -d '=' -sf 1); do diff --git a/luci-app-passwall/root/usr/share/passwall/app.sh b/luci-app-passwall/root/usr/share/passwall/app.sh index 947a2622..24c5a5c1 100755 --- a/luci-app-passwall/root/usr/share/passwall/app.sh +++ b/luci-app-passwall/root/usr/share/passwall/app.sh @@ -407,7 +407,7 @@ run_socks() { fi [ "$http_port" != "0" ] && { http_flag=1 - config_file="${config_file//SOCKS/HTTP_SOCKS}" + config_file="${config_file%%.*}+http${config_file#${config_file%%.*}}" json_add_string "local_http_address" "$bind" json_add_string "local_http_port" "$http_port" } @@ -438,7 +438,7 @@ run_socks() { sing-box) [ "$http_port" != "0" ] && { http_flag=1 - config_file="${config_file//SOCKS/HTTP_SOCKS}" + config_file="${config_file%%.*}+http${config_file#${config_file%%.*}}" local _args="http_address=$bind http_port=$http_port" } [ -n "$relay_port" ] && _args="${_args} server_host=$server_host server_port=$server_port" @@ -448,7 +448,7 @@ run_socks() { xray) [ "$http_port" != "0" ] && { http_flag=1 - config_file="${config_file//SOCKS/HTTP_SOCKS}" + config_file="${config_file%%.*}+http${config_file#${config_file%%.*}}" local _args="http_address=$bind http_port=$http_port" } [ -n "$relay_port" ] && _args="${_args} server_host=$server_host server_port=$server_port" @@ -471,7 +471,7 @@ run_socks() { ss-rust) [ "$http_port" != "0" ] && { http_flag=1 - config_file="${config_file//SOCKS/HTTP_SOCKS}" + config_file="${config_file%%.*}+http${config_file#${config_file%%.*}}" json_add_string "local_http_address" "$bind" json_add_string "local_http_port" "$http_port" } @@ -487,7 +487,7 @@ run_socks() { hysteria2) [ "$http_port" != "0" ] && { http_flag=1 - config_file="${config_file//SOCKS/HTTP_SOCKS}" + config_file="${config_file%%.*}+http${config_file#${config_file%%.*}}" json_add_string "local_http_address" "$bind" json_add_string "local_http_port" "$http_port" } @@ -1003,7 +1003,7 @@ start_socks() { local log=$(config_n_get $id log 1) [ "$log" = "0" ] && log_file="" local http_port=$(config_n_get $id http_port 0) - local http_config_file="HTTP2SOCKS_${id}.json" + local http_config_file="${flag}_http.json" local enable_autoswitch=$(config_n_get $id enable_autoswitch 0) local no_rec=0 [ "$enable_autoswitch" = "1" ] && no_rec=1 @@ -1020,16 +1020,16 @@ socks_node_switch() { local flag new_node eval_set_val "$@" [ -n "$flag" ] && [ -n "$new_node" ] && { - local prefix pf filename + local suffix pf filename # 结束 SS 插件进程 - for prefix in "" "HTTP_"; do - pf="$TMP_PATH/${prefix}${flag}_plugin.pid" + for suffix in "" "+http"; do + pf="$TMP_PATH/${flag}${suffix}_plugin.pid" [ -s "$pf" ] && kill -9 "$(head -n1 "$pf")" >/dev/null 2>&1 done busybox pgrep -af "$TMP_BIN_PATH" | awk -v P1="${flag}" 'BEGIN{IGNORECASE=1}$0~P1 && !/acl\/|acl_/{print $1}' | xargs kill -9 >/dev/null 2>&1 - for prefix in "" "HTTP_" "HTTP2"; do - rm -rf "$TMP_PATH/${prefix}${flag}"* + for suffix in "" "+http" "_http"; do + rm -rf "$TMP_PATH/${flag}${suffix}"* done for filename in $(ls ${TMP_SCRIPT_FUNC_PATH}); do @@ -1045,7 +1045,7 @@ socks_node_switch() { local log=$(config_n_get $flag log 1) [ "$log" = "0" ] && log_file="" local http_port=$(config_n_get $flag http_port 0) - local http_config_file="HTTP2SOCKS_${flag}.json" + local http_config_file="${flag}_http.json" LOG_FILE="/dev/null" run_socks flag=$flag node=$new_node bind=$bind socks_port=$port config_file=$config_file http_port=$http_port http_config_file=$http_config_file log_file=$log_file set_cache_var "${flag}" "$new_node" diff --git a/luci-app-passwall/root/usr/share/passwall/iptables.sh b/luci-app-passwall/root/usr/share/passwall/iptables.sh index 6454d1c9..34a8ceb4 100755 --- a/luci-app-passwall/root/usr/share/passwall/iptables.sh +++ b/luci-app-passwall/root/usr/share/passwall/iptables.sh @@ -236,15 +236,15 @@ load_acl() { [ -n "$(get_cache_var "ACL_${sid}_dns_port")" ] && dns_redirect_port=$(get_cache_var "ACL_${sid}_dns_port") [ -n "$(get_cache_var "ACL_${sid}_fakedns")" ] && use_fakedns=$(get_cache_var "ACL_${sid}_fakedns") [ -n "$tcp_node" ] && { - if is_socks_wrap "$tcp_node"; then - tcp_node_remark="Socks 配置($(config_n_get ${tcp_node#Socks_} port) 端口)" + if [ "$(config_get_type $tcp_node)" = "socks" ]; then + tcp_node_remark="Socks 配置($(config_n_get $tcp_node port) 端口)" else tcp_node_remark=$(config_n_get $tcp_node remarks) fi } [ -n "$udp_node" ] && { - if is_socks_wrap "$udp_node"; then - udp_node_remark="Socks 配置($(config_n_get ${udp_node#Socks_} port) 端口)" + if [ "$(config_get_type $udp_node)" = "socks" ]; then + udp_node_remark="Socks 配置($(config_n_get $udp_node port) 端口)" else udp_node_remark=$(config_n_get $udp_node remarks) fi @@ -256,13 +256,13 @@ load_acl() { [ -n "$udp_node" ] && [ "$(config_n_get $udp_node protocol)" = "_shunt" ] && use_shunt_udp=1 [ "${use_global_config}" = "1" ] && { - if is_socks_wrap "$TCP_NODE"; then - tcp_node_remark="Socks 配置($(config_n_get ${TCP_NODE#Socks_} port) 端口)" + if [ "$(config_get_type $TCP_NODE)" = "socks" ]; then + tcp_node_remark="Socks 配置($(config_n_get $TCP_NODE} port) 端口)" else tcp_node_remark=$(config_n_get $TCP_NODE remarks) fi - if is_socks_wrap "$UDP_NODE"; then - udp_node_remark="Socks 配置($(config_n_get ${UDP_NODE#Socks_} port) 端口)" + if [ "$(config_get_type $UDP_NODE)" = "socks" ]; then + udp_node_remark="Socks 配置($(config_n_get $UDP_NODE port) 端口)" else udp_node_remark=$(config_n_get $UDP_NODE remarks) fi @@ -651,8 +651,8 @@ load_acl() { # 加载TCP默认代理模式 if [ -n "${TCP_PROXY_MODE}" ]; then [ -n "$TCP_NODE" ] && { - if is_socks_wrap "$TCP_NODE"; then - msg2="${msg}使用 TCP 节点[Socks 配置($(config_n_get ${TCP_NODE#Socks_} port) 端口)]" + if [ "$(config_get_type $TCP_NODE)" = "socks" ]; then + msg2="${msg}使用 TCP 节点[Socks 配置($(config_n_get $TCP_NODE port) 端口)]" else msg2="${msg}使用 TCP 节点[$(config_n_get $TCP_NODE remarks)]" fi @@ -710,8 +710,8 @@ load_acl() { # 加载UDP默认代理模式 if [ -n "${UDP_PROXY_MODE}" ]; then [ -n "$UDP_NODE" ] || [ "$TCP_UDP" = "1" ] && { - if is_socks_wrap "$UDP_NODE"; then - msg2="${msg}使用 UDP 节点[Socks 配置($(config_n_get ${UDP_NODE#Socks_} port) 端口)](TPROXY:${UDP_REDIR_PORT})" + if [ "$(config_get_type $UDP_NODE)" = "socks" ]; then + msg2="${msg}使用 UDP 节点[Socks 配置($(config_n_get $UDP_NODE port) 端口)](TPROXY:${UDP_REDIR_PORT})" else msg2="${msg}使用 UDP 节点[$(config_n_get $UDP_NODE remarks)](TPROXY:${UDP_REDIR_PORT})" fi diff --git a/luci-app-passwall/root/usr/share/passwall/nftables.sh b/luci-app-passwall/root/usr/share/passwall/nftables.sh index e71c4568..21c4428c 100755 --- a/luci-app-passwall/root/usr/share/passwall/nftables.sh +++ b/luci-app-passwall/root/usr/share/passwall/nftables.sh @@ -296,15 +296,15 @@ load_acl() { [ -n "$(get_cache_var "ACL_${sid}_dns_port")" ] && dns_redirect_port=$(get_cache_var "ACL_${sid}_dns_port") [ -n "$(get_cache_var "ACL_${sid}_fakedns")" ] && use_fakedns=$(get_cache_var "ACL_${sid}_fakedns") [ -n "$tcp_node" ] && { - if is_socks_wrap "$tcp_node"; then - tcp_node_remark="Socks 配置($(config_n_get ${tcp_node#Socks_} port) 端口)" + if [ "$(config_get_type $tcp_node)" = "socks" ]; then + tcp_node_remark="Socks 配置($(config_n_get $tcp_node port) 端口)" else tcp_node_remark=$(config_n_get $tcp_node remarks) fi } [ -n "$udp_node" ] && { - if is_socks_wrap "$udp_node"; then - udp_node_remark="Socks 配置($(config_n_get ${udp_node#Socks_} port) 端口)" + if [ "$(config_get_type $udp_node)" = "socks" ]; then + udp_node_remark="Socks 配置($(config_n_get $udp_node port) 端口)" else udp_node_remark=$(config_n_get $udp_node remarks) fi @@ -315,13 +315,13 @@ load_acl() { [ -n "$udp_node" ] && [ "$(config_n_get $udp_node protocol)" = "_shunt" ] && use_shunt_udp=1 [ "${use_global_config}" = "1" ] && { - if is_socks_wrap "$TCP_NODE"; then - tcp_node_remark="Socks 配置($(config_n_get ${TCP_NODE#Socks_} port) 端口)" + if [ "$(config_get_type $TCP_NODE)" = "socks" ]; then + tcp_node_remark="Socks 配置($(config_n_get $TCP_NODE port) 端口)" else tcp_node_remark=$(config_n_get $TCP_NODE remarks) fi - if is_socks_wrap "$UDP_NODE"; then - udp_node_remark="Socks 配置($(config_n_get ${UDP_NODE#Socks_} port) 端口)" + if [ "$(config_get_type $UDP_NODE)" = "socks" ]; then + udp_node_remark="Socks 配置($(config_n_get $UDP_NODE port) 端口)" else udp_node_remark=$(config_n_get $UDP_NODE remarks) fi @@ -709,8 +709,8 @@ load_acl() { # 加载TCP默认代理模式 if [ -n "${TCP_PROXY_MODE}" ]; then [ -n "$TCP_NODE" ] && { - if is_socks_wrap "$TCP_NODE"; then - msg2="${msg}使用 TCP 节点[Socks 配置($(config_n_get ${TCP_NODE#Socks_} port) 端口)]" + if [ "$(config_get_type $TCP_NODE)" = "socks" ]; then + msg2="${msg}使用 TCP 节点[Socks 配置($(config_n_get $TCP_NODE port) 端口)]" else msg2="${msg}使用 TCP 节点[$(config_n_get $TCP_NODE remarks)]" fi @@ -773,8 +773,8 @@ load_acl() { # 加载UDP默认代理模式 if [ -n "${UDP_PROXY_MODE}" ]; then [ -n "$UDP_NODE" ] || [ "$TCP_UDP" = "1" ] && { - if is_socks_wrap "$UDP_NODE"; then - msg2="${msg}使用 UDP 节点[Socks 配置($(config_n_get ${UDP_NODE#Socks_} port) 端口)](TPROXY:${UDP_REDIR_PORT})" + if [ "$(config_get_type $UDP_NODE)" = "socks" ]; then + msg2="${msg}使用 UDP 节点[Socks 配置($(config_n_get $UDP_NODE port) 端口)](TPROXY:${UDP_REDIR_PORT})" else msg2="${msg}使用 UDP 节点[$(config_n_get $UDP_NODE remarks)](TPROXY:${UDP_REDIR_PORT})" fi diff --git a/luci-app-passwall2/Makefile b/luci-app-passwall2/Makefile index bd94dbda..fa82c4cc 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.10 -PKG_RELEASE:=77 +PKG_RELEASE:=78 PKG_PO_VERSION:=$(PKG_VERSION) PKG_CONFIG_DEPENDS:= \ diff --git a/luci-app-passwall2/luasrc/controller/passwall2.lua b/luci-app-passwall2/luasrc/controller/passwall2.lua index c9fb53b6..8659f5ad 100644 --- a/luci-app-passwall2/luasrc/controller/passwall2.lua +++ b/luci-app-passwall2/luasrc/controller/passwall2.lua @@ -370,7 +370,7 @@ function socks_status() e.use_http = 0 if tonumber(use_http) > 0 then e.use_http = 1 - e.http_status = luci.sys.call(string.format("/bin/busybox top -bn1 | grep -v -E 'grep|acl/|acl_' | grep '%s/bin/' | grep '%s' | grep -E 'HTTP_|HTTP2SOCKS' > /dev/null", appname, id)) == 0 + e.http_status = luci.sys.call(string.format("/bin/busybox top -bn1 | grep -v -E 'grep|acl/|acl_' | grep '%s/bin/' | grep '%s' | grep -E '\\+http|_http' > /dev/null", appname, id)) == 0 end http_write_json(e) end diff --git a/luci-app-passwall2/root/etc/uci-defaults/luci-passwall2 b/luci-app-passwall2/root/etc/uci-defaults/luci-passwall2 index 76ce2eca..7f401791 100644 --- a/luci-app-passwall2/root/etc/uci-defaults/luci-passwall2 +++ b/luci-app-passwall2/root/etc/uci-defaults/luci-passwall2 @@ -68,11 +68,15 @@ frag_dly=$(uci -q get passwall2.@global_xray[0].fragment_delay) [ -n "$frag_dly" ] && uci -q set passwall2.@global_xray[0].fragment_delays="$frag_dly" && uci -q delete passwall2.@global_xray[0].fragment_delay for sid in $(uci show passwall2 | grep "=socks" | awk -F '.' '{print $2}' | awk -F '=' '{print $1}'); do - if [ -z "$(echo ${sid} | grep '^socks_')" ]; then - new_id="socks_$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 5)" - uci -q rename passwall2.${sid}="${new_id}" - unset sid new_id - fi + if [ -z "$(echo ${sid} | grep '^socks_')" ]; then + new_id="socks_$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 5)" + old_ref="Socks_${sid}" + uci -q rename passwall2.${sid}="${new_id}" + for item in $(uci show passwall2 | grep "='${old_ref}'\$" | cut -d '=' -sf 1); do + uci -q set ${item}="${new_id}" + done + unset sid new_id old_ref item + fi done for sid in $(uci show passwall2 | grep "@acl_rule" | cut -d '.' -sf 2 | cut -d '=' -sf 1); do new_id="acl_$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 5)" diff --git a/luci-app-passwall2/root/usr/share/passwall2/app.sh b/luci-app-passwall2/root/usr/share/passwall2/app.sh index ea032845..a36fdcf0 100755 --- a/luci-app-passwall2/root/usr/share/passwall2/app.sh +++ b/luci-app-passwall2/root/usr/share/passwall2/app.sh @@ -402,7 +402,7 @@ run_socks() { sing-box) [ "$http_port" != "0" ] && { http_flag=1 - config_file="${config_file//SOCKS/HTTP_SOCKS}" + config_file="${config_file%%.*}+http${config_file#${config_file%%.*}}" json_add_string "local_http_address" "${bind}" json_add_string "local_http_port" "${http_port}" } @@ -430,7 +430,7 @@ run_socks() { xray) [ "$http_port" != "0" ] && { http_flag=1 - config_file="${config_file//SOCKS/HTTP_SOCKS}" + config_file="${config_file%%.*}+http${config_file#${config_file%%.*}}" json_add_string "local_http_address" "${bind}" json_add_string "local_http_port" "${http_port}" } @@ -474,7 +474,7 @@ run_socks() { json_add_string "local_socks_port" "${socks_port}" [ "$http_port" != "0" ] && { http_flag=1 - config_file="${config_file//SOCKS/HTTP_SOCKS}" + config_file="${config_file%%.*}+http${config_file#${config_file%%.*}}" json_add_string "local_http_address" "${bind}" json_add_string "local_http_port" "${http_port}" } @@ -491,7 +491,7 @@ run_socks() { json_add_string "local_socks_port" "${socks_port}" [ "$http_port" != "0" ] && { http_flag=1 - config_file="${config_file//SOCKS/HTTP_SOCKS}" + config_file="${config_file%%.*}+http${config_file#${config_file%%.*}}" json_add_string "local_http_address" "${bind}" json_add_string "local_http_port" "${http_port}" } @@ -535,16 +535,16 @@ socks_node_switch() { local flag new_node eval_set_val $@ [ -n "$flag" ] && [ -n "$new_node" ] && { - local prefix pf filename + local suffix pf filename # Kill the SS plugin process - for prefix in "" "HTTP_"; do - pf="$TMP_PATH/${prefix}${flag}_plugin.pid" + for suffix in "" "+http"; do + pf="$TMP_PATH/${flag}${suffix}_plugin.pid" [ -s "$pf" ] && kill -9 "$(head -n1 "$pf")" >/dev/null 2>&1 done busybox pgrep -af "$TMP_BIN_PATH" | awk -v P1="${flag}" 'BEGIN{IGNORECASE=1}$0~P1 && !/acl\/|acl_/{print $1}' | xargs kill -9 >/dev/null 2>&1 - for prefix in "" "HTTP_" "HTTP2"; do - rm -rf "$TMP_PATH/${prefix}${flag}"* + for suffix in "" "+http" "_http"; do + rm -rf "$TMP_PATH/${flag}${suffix}"* done for filename in $(ls ${TMP_SCRIPT_FUNC_PATH}); do @@ -560,7 +560,7 @@ socks_node_switch() { local log=$(config_n_get $flag log 1) [ "$log" == "0" ] && log_file="" local http_port=$(config_n_get $flag http_port 0) - local http_config_file="HTTP2SOCKS_${flag}.json" + local http_config_file="${flag}_http.json" LOG_FILE="/dev/null" run_socks flag=$flag node=$new_node bind=$bind socks_port=$port config_file=$config_file http_port=$http_port http_config_file=$http_config_file log_file=$log_file set_cache_var "${flag}" "$new_node" @@ -727,7 +727,7 @@ start_socks() { local log=$(config_n_get $id log 1) [ "$log" == "0" ] && log_file="" local http_port=$(config_n_get $id http_port 0) - local http_config_file="HTTP2SOCKS_${id}.json" + local http_config_file="${id}_http.json" run_socks flag=$id node=$node bind=$bind socks_port=$port config_file=$config_file http_port=$http_port http_config_file=$http_config_file log_file=$log_file set_cache_var "${id}" "$node" diff --git a/luci-app-ssr-plus/Makefile b/luci-app-ssr-plus/Makefile index e2fb7033..dd62f23a 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:=55 +PKG_RELEASE:=56 PKG_CONFIG_DEPENDS:= \ CONFIG_PACKAGE_$(PKG_NAME)_Iptables_Transparent_Proxy \ diff --git a/luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.lua b/luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.lua index 11b70ab7..7f33052c 100755 --- a/luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.lua +++ b/luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.lua @@ -519,7 +519,7 @@ local function anytls_to_mihomo_node(entry) return nil end - return { + local result = { type = "anytls", alias = entry.name, raw_alias = entry.name, @@ -530,6 +530,12 @@ local function anytls_to_mihomo_node(entry) insecure = entry.allow_insecure and "1" or "0", fingerprint = entry.client_fingerprint } + + local saved_alias = result.alias + result.alias = nil + result.hashkey = md5(jsonStringify(result) .. "_" .. (saved_alias or "")) + result.alias = saved_alias + return result end local function split_csv_values(value) diff --git a/luci-theme-footstrap/Makefile b/luci-theme-footstrap/Makefile index 8a2d37a7..ec406bac 100644 --- a/luci-theme-footstrap/Makefile +++ b/luci-theme-footstrap/Makefile @@ -17,7 +17,7 @@ LUCI_NAME:=luci-theme-footstrap FOOTSTRAP_VERSION?= ifneq ($(FOOTSTRAP_VERSION),) PKG_VERSION:=$(FOOTSTRAP_VERSION) -PKG_RELEASE:=11 +PKG_RELEASE:=12 endif LUCI_TITLE:=Footstrap Theme diff --git a/luci-theme-footstrap/htdocs/luci-static/resources/fs-router.js b/luci-theme-footstrap/htdocs/luci-static/resources/fs-router.js index 3d311ad6..3d9db6ca 100644 --- a/luci-theme-footstrap/htdocs/luci-static/resources/fs-router.js +++ b/luci-theme-footstrap/htdocs/luci-static/resources/fs-router.js @@ -381,33 +381,6 @@ function seed() { adoptEntry(); } -/* Does this document already carry the stylesheet a menu.d node names? - * - * The value is a path under /luci-static/resources (`view/foo/foo.css`), and head.ut prints it with - * a `?v=` cache key, so compare the PATH only and by suffix — the theme does not get to assume the - * resource base, and a re-hosted sheet keeps its element and its href (fs-sheets.js disables the - * , it never removes it), which is exactly the "already here" this asks about. */ -function documentHasSheet(css) { - const want = '/' + css.replace(/^\/+/, ''); - for (const link of document.querySelectorAll('link[rel~="stylesheet"][href]')) { - /* A INSIDE the view tree dies with the swap — it is the one shape fs-sheets.js needs - * no handling for, and every scan there skips it for the same reason (VIEW_SHEETS, and the - * `closest('#view')` guards in documentPoisoned/scopeToCurrentPage/dedupeViewSheets). - * Counting it here would answer the wrong question: `luci-app-nlbwmon` returns - * `E('link', { rel: 'stylesheet', href: L.resource('view/nlbw.css') })` from render(), so - * standing on that page its sheet IS in the document — and it is exactly the sheet the next - * dom.content() throws away. An app in that shape moving to a menu.d `css` is the migration - * #8920 was written for, so the guard has to survive it: leaving from that page must be a - * full load, not a swap into an unstyled document. */ - if (link.closest('#view')) - continue; - const href = (link.getAttribute('href') || '').split('?')[0]; - if (href.endsWith(want)) - return true; - } - return false; -} - /* Attempt an in-place navigation to `pathname`. Returns true if handled as a * SPA nav (caller should preventDefault), false to let the browser do a normal * full navigation. `push` adds a history entry (false when replaying popstate). @@ -432,25 +405,29 @@ function navigate(pathname, push, kbd) { /* A PAGE WHOSE STYLESHEET ONLY THE SERVER CAN EMIT IS NOT OURS TO SWAP INTO. * - * A menu.d node may name its own sheet (`"css": "view/foo/foo.css"`), and the server links it - * from on a full load (partials/head.ut). Nothing here can: a swap replaces #view's - * children, it does not re-render a document, so reaching such a page by CLICK would show it - * with the app's CSS missing — while reaching the same page by URL or F5 showed it styled. One - * page, two appearances, decided by how the user got there. + * A menu.d node may name its own sheet (`"css": "view/foo/foo.css"`), and the server links it from + * on a full load (partials/head.ut). Nothing here can: a swap replaces #view's children, it + * does not re-render a document, so reaching such a page by CLICK would show it with the app's CSS + * missing — while reaching the same page by URL or F5 showed it styled. One page, two appearances, + * decided by how the user got there. * - * So decline, exactly as the poisoned-document bail above does: speed is traded for - * correctness, never the other way. It costs ONE full load per such page — after it the - * is in the document, this test passes, and every later visit is a swap again (fs-sheets.js - * owns the sheet from then on and re-lights it per page). + * So decline, exactly as the poisoned-document bail above does: speed is traded for correctness, + * never the other way. It costs ONE full load per such page — after it the is in the + * document, this test passes, and every later visit is a swap again (fs-sheets.js owns the sheet + * from then on and re-lights it per page). * - * Injecting the here instead would work and is deliberately not done: it would put the - * theme in charge of fetching and ordering a foreign stylesheet, which is the job fs-sheets.js - * exists to keep out of the theme. The server already does it correctly. + * Injecting the here instead would work and is deliberately not done: it would put the theme + * in charge of fetching and ordering a foreign stylesheet, which is the job fs-sheets.js exists to + * keep out of the theme. The server already does it correctly. * - * `node.css` reaches the client because /admin/menu serves the dispatcher's own tree and - * ui.js's scrubMenu() only rewrites `satisfied`. On a luci-base that predates the `css` schema - * entry the property is dropped server-side, so this is simply never true there. */ - if (typeof node.css === 'string' && node.css !== '' && !documentHasSheet(node.css)) + * The QUESTION is fs-sheets.js's, not this module's: which sheets a document carries, and which of + * them a swap is about to delete, is the one thing that file knows — see documentCarries(). What is + * decided here is only what to do about the answer. + * + * `node.css` reaches the client because /admin/menu serves the dispatcher's own tree and ui.js's + * scrubMenu() only rewrites `satisfied`. On a luci-base that predates the `css` schema entry the + * property is dropped server-side, so this is simply never true there. */ + if (typeof node.css === 'string' && node.css !== '' && !sheets.documentCarries(node.css)) return false; const rsegs = res.segs; diff --git a/luci-theme-footstrap/htdocs/luci-static/resources/fs-sheets.js b/luci-theme-footstrap/htdocs/luci-static/resources/fs-sheets.js index e5ed6e10..3b1dcdfb 100644 --- a/luci-theme-footstrap/htdocs/luci-static/resources/fs-sheets.js +++ b/luci-theme-footstrap/htdocs/luci-static/resources/fs-sheets.js @@ -307,6 +307,37 @@ function judgeSheet(el, universe) { * INSIDE the view tree (`luci-app-nlbwmon`) needs no handling: it dies with the swap. */ const VIEW_SHEETS = 'style:not([data-fs-shell]), link[rel~="stylesheet"]:not([data-fs-shell])'; +/* DOES THIS SHEET OUTLIVE THE PAGE IT ARRIVED WITH? Everything this module decides hangs off that + * one question, and the answer is where the element sits: a