diff --git a/doc/lucky1.png b/doc/lucky1.png new file mode 100644 index 00000000..a5b41b6e Binary files /dev/null and b/doc/lucky1.png differ diff --git a/doc/lucky2.png b/doc/lucky2.png new file mode 100644 index 00000000..ba4c026f Binary files /dev/null and b/doc/lucky2.png differ diff --git a/doc/lucky3.png b/doc/lucky3.png new file mode 100644 index 00000000..6fa7982f Binary files /dev/null and b/doc/lucky3.png differ diff --git a/doc/taskplan1.png b/doc/taskplan1.png deleted file mode 100644 index 1f8db7be..00000000 Binary files a/doc/taskplan1.png and /dev/null differ diff --git a/doc/taskplan2.png b/doc/taskplan2.png deleted file mode 100644 index edb45d6d..00000000 Binary files a/doc/taskplan2.png and /dev/null differ diff --git a/doc/taskplan3.png b/doc/taskplan3.png deleted file mode 100644 index d4794702..00000000 Binary files a/doc/taskplan3.png and /dev/null differ diff --git a/doc/view.png b/doc/view.png deleted file mode 100644 index 169e112f..00000000 Binary files a/doc/view.png and /dev/null differ diff --git a/doc/view2.png b/doc/view2.png deleted file mode 100644 index 9058c632..00000000 Binary files a/doc/view2.png and /dev/null differ diff --git a/luci-app-passwall/root/usr/share/passwall/0_default_config b/luci-app-passwall/root/usr/share/passwall/0_default_config index 3dd9379e..ee1ffcdc 100644 --- a/luci-app-passwall/root/usr/share/passwall/0_default_config +++ b/luci-app-passwall/root/usr/share/passwall/0_default_config @@ -103,30 +103,7 @@ config nodes 'myshunt' config shunt_rules 'DirectGame' option remarks 'DirectGame' option network 'tcp,udp' - option domain_list '# steam直连域名获取国内CDN走国内线路下载 -cm.steampowered.com -steamserver.net - -# steam国内CDN华为云 -steampipe.steamcontent.tnkjmec.com -# steam国内CDN白山云 -st.dl.eccdnx.com -st.dl.bscstorage.net -st.dl.pinyuncloud.com -# steam国内CDN新流云(原金山云)(支持ipv6) -dl.steam.clngaa.com -# steam国内CDN网宿 -cdn.mileweb.cs.steampowered.com.8686c.com -cdn-ws.content.steamchina.com -# steam国内CDN腾讯云 (蒸汽中国独占) -cdn-qc.content.steamchina.com -# steam国内CDN阿里云(支持ipv6) -cdn-ali.content.steamchina.com -xz.pphimalayanrt.com -lv.queniujq.cn -alibaba.cdn.steampipe.steamcontent.com - -# 国内游戏geosite域名 + option domain_list '# 国内游戏geosite域名 geosite:category-games@cn' option ip_list '# steam直连IP 45.121.184.0/24 @@ -196,6 +173,9 @@ steamcloud-sydney.storage.googleapis.com steamcloud-taiwan.storage.googleapis.com steamcloud-eu.storage.googleapis.com domain:blizzard.com +#Steam支付 +domain:checkout.steampowered.com +domain:globalapi.smart2pay.com geosite:category-games' config shunt_rules 'AIGC' diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl_config.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl_config.lua index 2ba194c7..1272d660 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl_config.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl_config.lua @@ -23,17 +23,6 @@ for k, e in ipairs(api.get_valid_nodes()) do nodes_table[#nodes_table + 1] = e end -local dynamicList_write = function(self, section, value) - local new_t = {} - if type(value) == "table" then - new_t = api.table_remove_duplicates(value) - else - new_t = { value } - end - local new_val = table.concat(new_t, " ") - return DynamicList.write(self, section, new_val) -end - local doh_validate = function(self, value, t) if value ~= "" then local flag = 0 @@ -168,7 +157,6 @@ sources.validate = function(self, value, t) return value end -sources.write = dynamicList_write o = s:option(ListValue, "mode", translate("Mode")) o:value("0", translate("No Proxy")) diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/shunt_rules.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/shunt_rules.lua index f751a04a..2e59c050 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/shunt_rules.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/shunt_rules.lua @@ -167,19 +167,6 @@ source.validate = function(self, value, t) return value end -local dynamicList_write = function(self, section, value) - local new_t = {} - if type(value) == "table" then - new_t = api.table_remove_duplicates(value) - else - new_t = { value } - end - local new_val = table.concat(new_t, " ") - return DynamicList.write(self, section, new_val) -end - -source.write = dynamicList_write - --[[ -- Too low usage rate, hidden sourcePort = s:option(Value, "sourcePort", translate("Source port")) 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 3b1198ec..69c74cb9 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 @@ -116,12 +116,12 @@ if load_balancing_options then -- [[ Load balancing Start ]] end end -- Reading the old DynamicList - function o.cfgvalue(self, section) - return m.uci:get_list(appname, section, "balancing_node") or {} + function o.custom_cfgvalue(self, section) + return table.concat(m:get(section, "balancing_node") or {}, " ") end -- Write-and-hold DynamicList function o.custom_write(self, section, value) - local old = m.uci:get_list(appname, section, "balancing_node") or {} + local old = m:get(section, "balancing_node") or {} local new, set = {}, {} for v in value:gmatch("%S+") do new[#new + 1] = v @@ -129,13 +129,13 @@ if load_balancing_options then -- [[ Load balancing Start ]] end for _, v in ipairs(old) do if not set[v] then - m.uci:set_list(appname, section, "balancing_node", new) + m:set(section, "balancing_node", new) return end set[v] = nil end for _ in pairs(set) do - m.uci:set_list(appname, section, "balancing_node", new) + m:set(section, "balancing_node", new) return end end @@ -533,15 +533,6 @@ 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 new_t - if type(value) == "table" then - new_t = api.table_remove_duplicates(value) - else - new_t = { value } - end - m:set(section, self.option:sub(1 + #option_prefix), new_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 bdbff970..d5828592 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 @@ -118,12 +118,12 @@ if load_urltest_options then -- [[ URLTest Start ]] end end -- Reading the old DynamicList - function o.cfgvalue(self, section) - return m.uci:get_list(appname, section, "urltest_node") or {} + function o.custom_cfgvalue(self, section) + return table.concat(m:get(section, "urltest_node") or {}, " ") end -- Write-and-hold DynamicList function o.custom_write(self, section, value) - local old = m.uci:get_list(appname, section, "urltest_node") or {} + local old = m:get(section, "urltest_node") or {} local new, set = {}, {} for v in value:gmatch("%S+") do new[#new + 1] = v @@ -131,13 +131,13 @@ if load_urltest_options then -- [[ URLTest Start ]] end for _, v in ipairs(old) do if not set[v] then - m.uci:set_list(appname, section, "urltest_node", new) + m:set(section, "urltest_node", new) return end set[v] = nil end for _ in pairs(set) do - m.uci:set_list(appname, section, "urltest_node", new) + m:set(section, "urltest_node", new) return end end @@ -589,15 +589,6 @@ 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 new_t - if type(value) == "table" then - new_t = api.table_remove_duplicates(value) - else - new_t = { value } - end - m:set(section, self.option:sub(1 + #option_prefix), new_t) -end o = s:option(Flag, _n("ech"), translate("ECH")) o.default = "0" diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua index c07ec992..7fa58696 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua @@ -218,15 +218,6 @@ o:depends({ [_n("reality")] = true }) o = s:option(DynamicList, _n("reality_serverNames"), translate("serverNames")) o:depends({ [_n("reality")] = true }) -function o.custom_write(self, section, value) - local new_t = {} - if type(value) == "table" then - new_t = api.table_remove_duplicates(value) - else - new_t = { value } - end - m:set(section, self.option:sub(1 + #option_prefix), new_t) -end o = s:option(ListValue, _n("alpn"), translate("alpn")) o.default = "default" diff --git a/luci-app-passwall2/luasrc/passwall2/api.lua b/luci-app-passwall2/luasrc/passwall2/api.lua index c1d3dee7..27d6485a 100644 --- a/luci-app-passwall2/luasrc/passwall2/api.lua +++ b/luci-app-passwall2/luasrc/passwall2/api.lua @@ -5,6 +5,7 @@ nixio = require "nixio" fs = require "nixio.fs" sys = require "luci.sys" uci = require"luci.model.uci".cursor() +cbi = require "luci.cbi" util = require "luci.util" datatypes = require "luci.cbi.datatypes" jsonc = require "luci.jsonc" @@ -1386,7 +1387,6 @@ function set_apply_on_parse(map) end function set_default_cbi() - local cbi = require "luci.cbi" if true then --TextValue local TextValue = cbi.TextValue @@ -1396,10 +1396,28 @@ function set_default_cbi() self.template = appname .. "/cbi/tvalue" end end + if true then + --DynamicList + local DynamicList = cbi.DynamicList + function DynamicList.write(self, section, value) + local new_t = {} + if type(value) == "table" then + new_t = table_remove_duplicates(value) + else + new_t = { value } + end + local new_val + if self.cast == "string" then + new_val = table.concat(new_t, " ") + else + new_val = new_t + end + return cbi.AbstractValue.write(self, section, new_val) + end + end end function return_map(map) - local cbi = require "luci.cbi" local api = require "luci.passwall2.api" if true then -- header @@ -1457,11 +1475,25 @@ function luci_types(id, m, s, type_name, option_prefix) if self.custom_write then self:custom_write(section, value) else + local new_val = value + if util.instanceof(self, cbi.DynamicList) then + local new_t = {} + if type(value) == "table" then + new_t = table_remove_duplicates(value) + else + new_t = { value } + end + if self.cast == "string" then + new_val = table.concat(new_t, " ") + else + new_val = new_t + end + end if self.rewrite_option then - m:set(section, self.rewrite_option, value) + m:set(section, self.rewrite_option, new_val) else if self.option:find(option_prefix) == 1 then - m:set(section, self.option:sub(1 + #option_prefix), value) + m:set(section, self.option:sub(1 + #option_prefix), new_val) end end end