Compare commits

...

11 Commits

Author SHA1 Message Date
zhengyi cdb69f7919 Merge pull request 'v1.0.0 Releases' (PR#9) from dev into main
Reviewed-on: #9
2023-12-20 21:43:41 +08:00
zhengyi 6f59534ffa Fix #2 2023-12-20 13:42:40 +00:00
zhengyi 4251559d0a 🐛 Fix #4 2023-12-20 13:29:26 +00:00
zhengyi 2d254823cc Add #6 2023-12-20 13:24:57 +00:00
zhengyi 124d8fe5d1 Merge branch 'dev' of ssh://git.mczhengyi.top:222/zhengyi/luci-app-multi-frpc into dev 2023-12-20 11:10:39 +00:00
zhengyi e063bc9d5c Add log to new page 2023-12-20 10:52:04 +00:00
zhengyi d833cc8c0e 🐛 Fix log url 2023-12-20 18:24:22 +08:00
zhengyi a1728228a8 ♻️ Refactor 2023-12-20 18:21:31 +08:00
zhengyi 3a661a7a21 Add more log in client 2023-12-20 17:44:19 +08:00
zhengyi 083d81c7e5 🐛 Server config page not have name field 2023-12-20 17:34:29 +08:00
zhengyi fb528ff9c3 🐛 Basic setting read a wrong log file 2023-12-20 17:27:50 +08:00
9 changed files with 143 additions and 20 deletions

View File

@ -1,14 +1,21 @@
module("luci.controller.frp", package.seeall)
local uci=require"luci.model.uci".cursor()
local fs = require "nixio.fs"
function index()
if not nixio.fs.access("/etc/config/frp") then
return
end
entry({"admin", "services", "frp"}, cbi("frp/basic"), _("Frp Setting"), 100).dependent = true
entry({"admin", "services", "frp"}, alias("admin", "services", "frp", "base"), _("Multi Frpc"), 100).dependent = true
entry({"admin", "services", "frp", "base"}, cbi("frp/basic"), _("Frp Setting"), 1).leaf = true
entry({"admin", "services", "frp", "service_log"}, cbi("frp/log"), _("Plugin Log"), 2).leaf = true
entry({"admin", "services", "frp", "client_log"}, cbi("frp/client_log"), _("Client Log"), 3).leaf = true
entry({"admin", "services", "frp", "config"}, cbi("frp/config")).leaf = true
entry({"admin", "services", "frp", "server"}, cbi("frp/server")).leaf = true
entry({"admin", "services", "frp", "status"}, call("act_status")).leaf = true
entry({"admin", "services", "frp", "server_list"}, call("get_server")).leaf = true
entry({"admin", "services", "frp", "get_log"}, call("get_log")).leaf = true
end
function act_status()
@ -18,3 +25,18 @@ function act_status()
luci.http.prepare_content("application/json")
luci.http.write_json(e)
end
function get_server()
local ret = {}
uci.foreach("frp", "server", function (s)
ret[#ret + 1] = s["name"]
end)
luci.http.prepare_content("application/json")
luci.http.write_json(ret)
end
function get_log()
local name = luci.http.formvalue("name")
local log = fs.readfile(string.format("/var/etc/frp/frpc-%s.log", name))or"NOT FOUND"
luci.http.write(log)
end

View File

@ -18,7 +18,6 @@ t.addremove = false
t:tab("base", translate("Basic Settings"))
t:tab("other", translate("Other Settings"))
t:tab("log", translate("Kernal Log"))
e = t:taboption("base", Flag, "enabled", translate("Enabled"))
e.rmempty = false
@ -141,17 +140,6 @@ e.default = "admin"
e.password = true
e:depends("admin_enable", 1)
-- LOG
e = t:taboption("log", TextValue, "log")
e.rows = 26
e.wrap = "off"
e.readonly = true
e.cfgvalue = function(t,t)
return s.readfile("/var/etc/frp/frpc.log")or""
end
e.write = function(e,e,e)
end
-- Server List
@ -173,16 +161,19 @@ function t.remove(e,t)
end
e = t:option(DummyValue, "name", translate("Server Remark Name"))
e.width = "10%"
e = t:option(DummyValue, "server_addr", translate("Server Address"))
e.width = "10%"
e.width = "30%"
e = t:option(DummyValue, "server_port", translate("Server Port"))
e.width = "10%"
e.width = "15%"
e = t:option(DummyValue, "user", translate("Server User"))
e.width = "15%"
e = t:option(Flag, "enable", translate("Enable State"))
e.width = "10%"
e.rmempty = false
-- Service Lists

View File

@ -0,0 +1,12 @@
local fs=require"nixio.fs"
local uci=require"luci.model.uci".cursor()
local f,t
f=SimpleForm("logview")
f.reset = false
f.submit = false
t=f:field(TextValue,"conf")
t.rmempty=true
t.rows=20
t.template="frp/client_log"
t.readonly="readonly"
return f

View File

@ -0,0 +1,17 @@
local fs = require "nixio.fs"
local uci = luci.model.uci.cursor()
f = SimpleForm("log view")
f.reset = false
f.submit = false
t=f:field(TextValue,"conf")
t.rows=26
t.readonly="readonly"
t.wrap = "off"
t.cfgvalue = function(t,t)
return fs.readfile("/var/etc/frp/frp.log")or""
end
t.write = function(e,e,e)
end
return f

View File

@ -7,7 +7,7 @@ local a, t, e
arg[1] = arg[1]or""
a = Map("frp")
a.title = translate("Frp Domain Config")
a.title = translate("Frp Server Config")
a.redirect = i.build_url("admin", "services", "frp")
t = a:section(NamedSection, arg[1], "frp")
@ -23,6 +23,11 @@ e.rmempty = false
e:value("1", translate("Enable"))
e:value("0", translate("Disable"))
e = t:taboption("base", Value, "name", translate("Server Name"))
e.optional = false
e.rmempty = false
e = t:taboption("base", Value, "server_addr", translate("Server"))
e.optional = false
e.rmempty = false

View File

@ -0,0 +1,43 @@
<form>
<div style="padding: 20px 20px 5px;">
<label for="server-list"><%:Choose a server%>:
<select name="server" id="server-list"></select>
</label>
<input class="cbi-button cbi-button-apply" type="button" id="reload" value="<%:Reload%>" />
</div>
<div style="padding: 5px 20px 20px;">
<textarea readonly id="content" style="width: 100%; min-height: 800px!important;"></textarea>
</div>
</form>
<script>
var tb = document.getElementById('server-list');
let current = ""
tb.addEventListener("change", e => {
const vl = e.currentTarget.value
current = vl
startRecieveLog(vl)
})
document.getElementById("reload").addEventListener("click", () => {
startRecieveLog(current)
})
XHR.get('<%=url([[admin]], [[services]], [[frp]], [[server_list]])%>', null, function(x, data) {
const dt = Array.from(data)
dt.forEach(node => {
tb.innerHTML += `<option value="${node}">${node}</option>`
})
if (dt.length > 0) {
tb.value = dt[0]
current = dt[0]
startRecieveLog(dt[0])
}
})
function startRecieveLog(log) {
XHR.get('<%=url([[admin]], [[services]], [[frp]], [[get_log]])%>', {name: log},
function(x, data) {
var tb = document.getElementById('content');
tb.value = x.responseText
}
);
}
</script>

View File

@ -321,3 +321,27 @@ msgstr "插件 Host Header 重写"
msgid "plugin_header_X-From-Where"
msgstr "插件X-From-Where请求头"
msgid "Multi Frpc"
msgstr "Frpc内网穿透"
msgid "Server List"
msgstr "服务器列表"
msgid "Server Remark Name"
msgstr "服务器备注“
msgid "Server User"
msgstr "登陆用户"
msgid "Plugin Log"
msgstr "插件日志"
msgid "Client Log"
msgstr "客户端日志"
msgid "Choose a server"
msgstr "选择一个配置"
msgid "Reload"
msgstr "刷新"

View File

@ -240,7 +240,8 @@ start() {
[ ! -f "$LOGFILE" ] && touch $LOGFILE
[ ! -f "/usr/bin/frpc" ] && download_binary
[ ! -f "/usr/bin/frpc" ] && logger -t Frp 'Download frpc failed, please retry.' && exit 0
[ ! -f "/usr/bin/frpc" ] && logger -t Frp 'Download frpc failed, please retry.'
[ ! -f "/usr/bin/frpc" ] && echo_date "Frp客户端下载失败, 请重试!" && exit 0
local tmpconf="/var/etc/frp"
local service_conf="/var/etc/frp/service.conf"
@ -287,6 +288,8 @@ start_service() {
[ "$server_name" != "" ] || return 1
logger -t FRPC "Starting frp service $server_name"
echo_date "正在启动Frp客户端: $server_name"
SERVICE_DAEMONIZE=1 \
"/usr/bin/frpc" -c "$2/frpc-$server_name.conf" &
}
@ -294,11 +297,13 @@ start_service() {
stop() {
frp_del_cru
[ "$(pidof frpc)" != "" ] || return 1
echo_date "frpc shutting down service!"
logger -t FRPC 'Shutting down frp service'
echo_date "停止所有Frp客户端!"
kill $(pidof frpc)
# if [ -n "`pidof frpc`" ]; then
# logger -t FRPC 'Shutting down frp service'
# service_stop /usr/bin/frpc
# # Reduce_Log $LOGFILE
# fi

4
update.sh Normal file
View File

@ -0,0 +1,4 @@
opkg remove luci-app-multi-frpc
opkg install /tmp/luci-app-multi-frpc_1.0-2_all.ipk
rm -rf /tmp/luci-modulecache/*
rm /tmp/luci-indexcache