mirror of
https://github.com/caiwx86/small-packages.git
synced 2026-10-29 06:45:13 +08:00
update 2026-08-09 20:38:34
This commit is contained in:
1 parent
b50cf2822f
commit
32070715c4
26 files changed
+271
-68
No files matched your search
+2
-2
@@ -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
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -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){
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"), '<a href="https://go.dev/src/crypto/tls/cipher_suites.go#L44" target="_blank">***</a>' .. " " .. translate("Configures the list of supported cipher suites, separated by :"))
|
||||
o = s:option(DynamicList, _n("cipherSuites"), translate("Cipher Suites"), '<a href="https://go.dev/src/crypto/tls/cipher_suites.go#L44" target="_blank">***</a>' .. " " .. 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 = ""
|
||||
|
||||
@@ -574,8 +574,30 @@ o.validate = function(self, value)
|
||||
return value
|
||||
end
|
||||
|
||||
o = s:option(Value, _n("cipherSuites"), translate("Cipher Suites"), '<a href="https://go.dev/src/crypto/tls/cipher_suites.go#L44" target="_blank">***</a>' .. " " .. translate("Configures the list of supported cipher suites, separated by :"))
|
||||
o = s:option(DynamicList, _n("cipherSuites"), translate("Cipher Suites"), '<a href="https://go.dev/src/crypto/tls/cipher_suites.go#L44" target="_blank">***</a>' .. " " .. 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"
|
||||
|
||||
@@ -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"))
|
||||
|
||||
@@ -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
|
||||
@@ -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("^([^+]+)%+(.+)$")
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 "فهرست مجموعههای رمز پشتیبانیشده را پیکربندی میکند."
|
||||
@@ -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 "Задает список поддерживаемых наборов шифров."
|
||||
@@ -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 "配置支持的密码套件列表。"
|
||||
@@ -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 "配置支援的密碼套件列表。"
|
||||
@@ -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)))
|
||||
@@ -0,0 +1,2 @@
|
||||
# luci-app-syncthing
|
||||
在Potat0000源码基础上进行了汉化优化,官方openwrt23.05.3编译后可使用
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -0,0 +1,27 @@
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
XHR.poll(1, '<%=url([[admin]], [[services]], [[syncthing]], [[status]])%>', null,
|
||||
function (x, data) {
|
||||
var tb = document.getElementById('syncthing_status');
|
||||
if (data && tb) {
|
||||
if (data.running) {
|
||||
var links = '<em><b><font color="green">Syncthing <%:运行中%></font></b></em><input class="btn cbi-button mar-10" type="button" value="<%:打开Syncthing页面%>" onclick="openwebui();" />';
|
||||
tb.innerHTML = links;
|
||||
} else {
|
||||
tb.innerHTML = '<em><b><font color="red">Syncthing <%:未运行%></font></b></em>';
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
function openwebui(){
|
||||
var url = window.location.host+":<%=luci.sys.exec("uci -q get syncthing.syncthing.gui_address"):match(":[0-9]+"):gsub(":", "")%>";
|
||||
window.open('http://'+url,'target','');
|
||||
}
|
||||
//]]>
|
||||
</script>
|
||||
<style>.mar-10 {margin-left: 50px; margin-right: 10px;}</style>
|
||||
<fieldset class="cbi-section">
|
||||
<p id="syncthing_status">
|
||||
<em><%:正在收集数据...%></em>
|
||||
</p>
|
||||
</fieldset>
|
||||
@@ -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
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"luci-app-syncthing": {
|
||||
"description": "Grant UCI access for luci-app-syncthing",
|
||||
"read": {
|
||||
"uci": [ "syncthing" ]
|
||||
},
|
||||
"write": {
|
||||
"uci": [ "syncthing" ]
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -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
|
||||
|
||||
+3
-3
@@ -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
|
||||
|
||||
Reference in new issue
Block a user