diff --git a/dae/Makefile b/dae/Makefile index e9b80315..61cbca36 100644 --- a/dae/Makefile +++ b/dae/Makefile @@ -5,12 +5,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=dae -PKG_VERSION:=2026.08.08 +PKG_VERSION:=2026.08.09 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_PROTO:=git -PKG_SOURCE_VERSION:=0e757f29d5c82deb1fcf687004a8b7b1fe7afb9d +PKG_SOURCE_VERSION:=5b380d5713b846f50052ecf7e23f98eee51bae2a PKG_SOURCE_URL:=https://github.com/olicesx/dae.git PKG_MIRROR_HASH:=skip diff --git a/luci-app-passwall/luasrc/view/passwall/node_config/footer.htm b/luci-app-passwall/luasrc/view/passwall/node_config/footer.htm index 819243f9..5c0737fd 100644 --- a/luci-app-passwall/luasrc/view/passwall/node_config/footer.htm +++ b/luci-app-passwall/luasrc/view/passwall/node_config/footer.htm @@ -48,7 +48,7 @@ protocol: getOption("<%=self.config%>", "<%=self.section%>", name).value, }, node_config_url); } else { - window.location.href = node_config_url + "?select_proto=" + el.value; + window.location.href = node_config_url + "?select_proto=" + encodeURIComponent(el.value); } } }); diff --git a/luci-app-passwall/luasrc/view/passwall/node_list/node_list.htm b/luci-app-passwall/luasrc/view/passwall/node_list/node_list.htm index f005c294..85eb3e85 100644 --- a/luci-app-passwall/luasrc/view/passwall/node_list/node_list.htm +++ b/luci-app-passwall/luasrc/view/passwall/node_list/node_list.htm @@ -1255,11 +1255,11 @@ table td, .table .td { this.section = cbi_id; document.getElementById("set_node_div").style.display="block"; const node_name = document.getElementById("cbid.<%=appname%>." + cbi_id + ".remarks").value; - document.getElementById("set_node_name").innerHTML = node_name; + document.getElementById("set_node_name").textContent = node_name; }, close() { document.getElementById("set_node_div").style.display="none"; - document.getElementById("set_node_name").innerHTML = ""; + document.getElementById("set_node_name").textContent = ""; }, set(protocol) { if (confirm('<%:Are you sure set to%> ' + protocol.toUpperCase() + ' <%:the server?%>') == true){ 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 0bcba726..2ba194c7 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 @@ -24,24 +24,16 @@ for k, e in ipairs(api.get_valid_nodes()) do end local dynamicList_write = function(self, section, value) - local t = {} - local t2 = {} + local new_t = {} 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 + new_t = api.table_remove_duplicates(value) else - t = { value } + new_t = { value } end - t = table.concat(t, " ") - return DynamicList.write(self, section, t) + 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 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 bb46df0b..f751a04a 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 @@ -168,23 +168,14 @@ source.validate = function(self, value, t) end local dynamicList_write = function(self, section, value) - local t = {} - local t2 = {} + local new_t = {} 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 + new_t = api.table_remove_duplicates(value) else - t = { value } + new_t = { value } end - t = table.concat(t, " ") - return DynamicList.write(self, section, t) + local new_val = table.concat(new_t, " ") + return DynamicList.write(self, section, new_val) end source.write = dynamicList_write 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 ad40219e..3b1198ec 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,30 @@ 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 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 934c3945..bdbff970 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,30 @@ 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 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 11bfc669..c07ec992 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,23 +218,14 @@ o:depends({ [_n("reality")] = true }) o = s:option(DynamicList, _n("reality_serverNames"), translate("serverNames")) o:depends({ [_n("reality")] = true }) -function o.write(self, section, value) - local t = {} - local t2 = {} +function o.custom_write(self, section, value) + local new_t = {} 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 + new_t = api.table_remove_duplicates(value) else - t = { value } + new_t = { value } end - return DynamicList.write(self, section, t) + m:set(section, self.option:sub(1 + #option_prefix), new_t) end o = s:option(ListValue, _n("alpn"), translate("alpn")) diff --git a/luci-app-passwall2/luasrc/passwall2/api.lua b/luci-app-passwall2/luasrc/passwall2/api.lua index 5437f4f7..c1d3dee7 100644 --- a/luci-app-passwall2/luasrc/passwall2/api.lua +++ b/luci-app-passwall2/luasrc/passwall2/api.lua @@ -1863,3 +1863,19 @@ function get_network_devices() table.sort(_devices, function(a, b) return a.sort < b.sort end) return _devices end + +function table_remove_duplicates(t) + if not t or #t == 0 then return nil end + local t_lookup = {} + local new_t = {} + local x + for _, x in ipairs(t) do + if x and #x > 0 then + if not t_lookup[x] then + t_lookup[x] = x + new_t[#new_t+1] = x + end + end + end + return new_t +end diff --git a/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua b/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua index f6f87fd8..c63b53c4 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 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 d3031ba9..530670c9 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/node_config/footer.htm b/luci-app-passwall2/luasrc/view/passwall2/node_config/footer.htm index b2cfd367..85585217 100644 --- a/luci-app-passwall2/luasrc/view/passwall2/node_config/footer.htm +++ b/luci-app-passwall2/luasrc/view/passwall2/node_config/footer.htm @@ -48,7 +48,7 @@ protocol: getOption("<%=self.config%>", "<%=self.section%>", name).value, }, node_config_url); } else { - window.location.href = node_config_url + "?select_proto=" + el.value; + window.location.href = node_config_url + "?select_proto=" + encodeURIComponent(el.value); } } }); diff --git a/luci-app-passwall2/luasrc/view/passwall2/node_list/node_list.htm b/luci-app-passwall2/luasrc/view/passwall2/node_list/node_list.htm index d9c91c7c..d2d42741 100644 --- a/luci-app-passwall2/luasrc/view/passwall2/node_list/node_list.htm +++ b/luci-app-passwall2/luasrc/view/passwall2/node_list/node_list.htm @@ -1257,16 +1257,16 @@ table td, .table .td { this.section = cbi_id; document.getElementById("set_node_div").style.display="block"; const node_name = document.getElementById("cbid.<%=appname%>." + cbi_id + ".remarks").value; - document.getElementById("set_node_name").innerHTML = node_name; + document.getElementById("set_node_name").textContent = node_name; }, close() { document.getElementById("set_node_div").style.display="none"; - document.getElementById("set_node_name").innerHTML = ""; + document.getElementById("set_node_name").textContent = ""; }, set(type, config) { if (confirm('<%:Are you sure set this node?%>') == true){ ajax.abortAll(); - window.location.href = '<%=api.url("set_node")%>?type=' + type + '&config=' + config + '§ion=' + section; + window.location.href = '<%=api.url("set_node")%>?type=' + type + '&config=' + config + '§ion=' + this.section; } } } diff --git a/luci-app-passwall2/po/fa/passwall2.po b/luci-app-passwall2/po/fa/passwall2.po index 8d0f000b..0cbfa1a0 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 0d3b7c3a..205665bf 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 326e3f82..e6823a2e 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 e6962d53..57fc9b65 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-syncthing/Makefile b/luci-app-syncthing/Makefile new file mode 100644 index 00000000..2219fcb2 --- /dev/null +++ b/luci-app-syncthing/Makefile @@ -0,0 +1,22 @@ +# Copyright (C) 2020 Gyj1109 +# 适配 OpenWrt 25.12 修改版 + +include $(TOPDIR)/rules.mk + +PKG_NAME:=luci-app-syncthing +PKG_VERSION:=1.0 +PKG_RELEASE:=3 + +LUCI_TITLE:=LuCI support for Syncthing +LUCI_PKGARCH:=all +# 适配 25.12:确保安装了 syncthing 后,LuCI 界面能正确拉起 +LUCI_DEPENDS:=+syncthing + +include $(TOPDIR)/feeds/luci/luci.mk + +# 明确定义配置文件的归属,这对 25.12 的 apk 管理器非常重要 +define Package/$(PKG_NAME)/conffiles +/etc/config/syncthing +endef + +$(eval $(call BuildPackage,$(PKG_NAME))) diff --git a/luci-app-syncthing/README.md b/luci-app-syncthing/README.md new file mode 100644 index 00000000..b07298c1 --- /dev/null +++ b/luci-app-syncthing/README.md @@ -0,0 +1,2 @@ +# luci-app-syncthing +在Potat0000源码基础上进行了汉化优化,官方openwrt23.05.3编译后可使用 diff --git a/luci-app-syncthing/luasrc/controller/syncthing.lua b/luci-app-syncthing/luasrc/controller/syncthing.lua new file mode 100644 index 00000000..ee2ca7ef --- /dev/null +++ b/luci-app-syncthing/luasrc/controller/syncthing.lua @@ -0,0 +1,17 @@ +module("luci.controller.syncthing", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/syncthing") then + return + end + + entry({"admin", "services", "syncthing"}, cbi("syncthing"), _("文件同步"), 10).dependent = true + entry({"admin", "services", "syncthing", "status"}, call("act_status")).leaf = true +end + +function act_status() + local e = {} + e.running = luci.sys.call("pgrep syncthing >/dev/null") == 0 + luci.http.prepare_content("application/json") + luci.http.write_json(e) +end diff --git a/luci-app-syncthing/luasrc/model/cbi/syncthing.lua b/luci-app-syncthing/luasrc/model/cbi/syncthing.lua new file mode 100644 index 00000000..324ea054 --- /dev/null +++ b/luci-app-syncthing/luasrc/model/cbi/syncthing.lua @@ -0,0 +1,48 @@ +require("nixio.fs") + +m = Map("syncthing", translate("Syncthing同步工具")) + +m:section(SimpleSection).template = "syncthing/syncthing_status" + +s = m:section(TypedSection, "syncthing") + +s.anonymous = true + +o = s:option(Flag, "enabled", translate("启用")) +o.default = 0 +o.rmempty = false + +gui_address = s:option(Value, "gui_address", translate("GUI访问地址")) +gui_address.description = translate("使用0.0.0.0以监控所有访问。") +gui_address.default = "http://0.0.0.0:8384" +gui_address.placeholder = "http://0.0.0.0:8384" +gui_address.rmempty = false + +home = s:option(Value, "home", translate("配置文件目录")) +home.description = translate("只有保存在/etc/syncthing中的配置会自动备份!") +home.default = "/etc/syncthing" +home.placeholder = "/etc/syncthing" +home.rmempty = false + +user = s:option(ListValue, "user", translate("用户")) +user.description = translate("默认是syncthing,但这可能会导致权限被拒绝。Syncthing官方不建议以root身份运行。") +user:value("", translate("syncthing")) +for u in luci.util.execi("cat /etc/passwd | cut -d ':' -f1") do + user:value(u) +end + +macprocs = s:option(Value, "macprocs", translate("线程限制")) +macprocs.description = translate("0表示匹配CPU数量(默认),>0表示显式指定并发数。") +macprocs.default = "0" +macprocs.placeholder = "0" +macprocs.datatype = "range(0,32)" +macprocs.rmempty = false + +nice = s:option(Value, "nice", translate("优先级")) +nice.description = translate("显式指定优先级值。0是最高,19是最低。(暂时不允许设置负值)") +nice.default = "19" +nice.placeholder = "19" +nice.datatype = "range(0,19)" +nice.rmempty = false + +return m diff --git a/luci-app-syncthing/luasrc/view/syncthing/syncthing_status.htm b/luci-app-syncthing/luasrc/view/syncthing/syncthing_status.htm new file mode 100644 index 00000000..566cc020 --- /dev/null +++ b/luci-app-syncthing/luasrc/view/syncthing/syncthing_status.htm @@ -0,0 +1,27 @@ + + +
+

+ <%:正在收集数据...%> +

+
diff --git a/luci-app-syncthing/root/etc/uci-defaults/luci-syncthing b/luci-app-syncthing/root/etc/uci-defaults/luci-syncthing new file mode 100644 index 00000000..3adb7997 --- /dev/null +++ b/luci-app-syncthing/root/etc/uci-defaults/luci-syncthing @@ -0,0 +1,12 @@ +#!/bin/sh +touch /etc/config/syncthing + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@syncthing[-1] + add ucitrack syncthing + set ucitrack.@syncthing[-1].exec='/etc/init.d/syncthing stop && /etc/init.d/syncthing start' + commit ucitrack +EOF +# remove LuCI cache +rm -f /tmp/luci* +exit 0 diff --git a/luci-app-syncthing/root/usr/share/rpcd/acl.d/luci-app-syncthing.json b/luci-app-syncthing/root/usr/share/rpcd/acl.d/luci-app-syncthing.json new file mode 100644 index 00000000..9fc9cc54 --- /dev/null +++ b/luci-app-syncthing/root/usr/share/rpcd/acl.d/luci-app-syncthing.json @@ -0,0 +1,11 @@ +{ + "luci-app-syncthing": { + "description": "Grant UCI access for luci-app-syncthing", + "read": { + "uci": [ "syncthing" ] + }, + "write": { + "uci": [ "syncthing" ] + } + } +} diff --git a/sing-box/Makefile b/sing-box/Makefile index f37fbc2e..60235564 100644 --- a/sing-box/Makefile +++ b/sing-box/Makefile @@ -5,12 +5,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=sing-box -PKG_VERSION:=1.13.16 +PKG_VERSION:=1.13.18 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/SagerNet/sing-box/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=5d8201669387d0caded7a22c71682b3c025afef7bac8704cceabed52ea8bde5d +PKG_HASH:=e41ed9d7adecd7597c1d5cc91818366a9538d94b41c244225ac40ac948c643f5 PKG_LICENSE:=GPL-3.0-or-later PKG_LICENSE_FILES:=LICENSE diff --git a/v2raya/Makefile b/v2raya/Makefile index 582f02c4..2839917e 100644 --- a/v2raya/Makefile +++ b/v2raya/Makefile @@ -5,12 +5,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=v2rayA -PKG_VERSION:=2.4.9 +PKG_VERSION:=2.4.10 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/v2rayA/v2rayA/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=3be8db2f84950a111e6aaacf4b67726e6552a2c7b6e8bf768a05584eb83cc8b7 +PKG_HASH:=7257d6a167428e973e624865a3530d806c53217d315c3514339d5168fd43c1c6 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)/service PKG_LICENSE:=AGPL-3.0-only @@ -60,7 +60,7 @@ define Download/v2raya-web URL:=https://github.com/v2rayA/v2rayA/releases/download/v$(PKG_VERSION)/ URL_FILE:=web.tar.gz FILE:=$(WEB_FILE) - HASH:=52940a0a47c38751c2199aac6f17eb4ef3e005ec9d9e0486d182bfe2bc7ca51b + HASH:=aaab3016709b649bd23fc628ee27780bf43b9a9d5bd18bb6061f1742abe588b9 endef define Build/Prepare