update 2023-11-15 09:14:36

This commit is contained in:
github-actions[bot] 2023-11-15 09:14:36 +08:00
parent 059b0789f1
commit 008a73d6e5
13 changed files with 175 additions and 188 deletions

View File

@ -7,7 +7,7 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-lucky PKG_NAME:=luci-app-lucky
PKG_VERSION:=1.0.4 PKG_VERSION:=1.1.1
PKG_RELEASE:=5 PKG_RELEASE:=5
LUCI_TITLE:=LuCI Support for Dynamic lucky Client LUCI_TITLE:=LuCI Support for Dynamic lucky Client

View File

@ -1,32 +1,54 @@
-- Copyright (C) 2021-2022 sirpdboy <herboy2008@gmail.com> https://github.com/sirpdboy/luci-app-lucky -- Copyright (C) 2021-2022 sirpdboy <herboy2008@gmail.com> https://github.com/sirpdboy/luci-app-lucky
-- Licensed to the public under the Apache License 2.0. -- Licensed to the public under the Apache License 2.0.
local SYS = require "luci.sys"
module("luci.controller.lucky", package.seeall) module("luci.controller.lucky", package.seeall)
function index() function index()
local e=entry({"admin", "services", "lucky"}, alias("admin", "services", "lucky", "setting"),_("Lucky"), 57)
entry({"admin", "services", "lucky"}, alias("admin", "services", "lucky", "setting"),_("Lucky"), 57).dependent = true e.dependent=false
e.acl_depends={ "luci-app-lucky" }
entry({"admin", "services", "lucky", "setting"}, cbi("lucky"), _("Base Setting"), 20).leaf=true entry({"admin", "services", "lucky", "setting"}, cbi("lucky"), _("Base Setting"), 20).leaf=true
entry({"admin", "services", "lucky", "lucky"}, template("lucky"), _("Lucky"), 30).leaf = true entry({"admin", "services", "lucky", "lucky"}, template("lucky"), _("Lucky"), 30).leaf = true
entry({"admin", "services", "lucky", "lucky_admin"}, call("lucky_admin")).leaf = true entry({"admin", "services", "lucky_status"}, call("lucky_status"))
entry({"admin", "services", "lucky_status"}, call("act_status")) entry({"admin", "services", "lucky_config"}, call("lucky_config"))
end end
function act_status()
local uci = require 'luci.model.uci'.cursor() function lucky_config()
local port = tonumber(uci:get_first("lucky", "lucky", "port"))
local e = { } local e = { }
e.running = luci.sys.call("pidof lucky >/dev/null") == 0 local luckyInfo = SYS.exec("/usr/bin/lucky -info")
e.port = (port or 16601) if (luckyInfo~=nil)
e.safeurl = luci.sys.exec("cat /etc/lucky/lucky.conf | grep SafeURL | sed -e 's/,//g' -e 's/\"//g' -e 's/\ //g' | awk -F ':' '{print $2}' ") then
local configObj = ConfigureObj()
if (configObj~=nil)
then
e.BaseConfigure = configObj["BaseConfigure"]
end
end
e.luckyArch = SYS.exec("/usr/bin/luckyarch")
luci.http.prepare_content("application/json") luci.http.prepare_content("application/json")
luci.http.write_json(e) luci.http.write_json(e)
end end
function lucky_admin()
function lucky_status()
local e = { } local e = { }
e.username = luci.sys.exec("cat /etc/lucky/lucky.conf | grep AdminAccount | sed -e 's/,//g' -e 's/\"//g' | awk -F ':' '{print $2}' ") e.status = SYS.call("pgrep -f 'lucky -c' >/dev/null") == 0
e.password = luci.sys.exec("cat /etc/lucky/lucky.conf | grep AdminPassword | sed -e 's/,//g' -e 's/\"//g' | awk -F ':' '{print $2}' ")
luci.http.prepare_content("application/json") luci.http.prepare_content("application/json")
luci.http.write_json(e) luci.http.write_json(e)
end end
function trim(s)
return (string.gsub(s, "^%s*(.-)%s*$", "%1"))
end
function ConfigureObj()
configPath = trim(luci.sys.exec("uci get lucky.@lucky[0].configdir"))
local configContent = luci.sys.exec("lucky -baseConfInfo -cd "..configPath)
configObj = luci.jsonc.parse(trim(configContent))
return configObj
end

View File

@ -4,7 +4,7 @@ local m, s ,o
m = Map("lucky") m = Map("lucky")
m.title = translate("Lucky") m.title = translate("Lucky")
m.description = translate("Main functions of Lucky: dynamic domain name ddns-go service, which replaces socat. It is mainly used for public IPv6 tcp/udp to intranet ipv4, http/https reverse proxy frp")..translate("</br>For specific usage, see:")..translate("<a href=\'https://github.com/sirpdboy/luci-app-lucky.git' target=\'_blank\'>GitHub @sirpdboy/luci-app-lucky </a>。") m.description = translate("ipv4/ipv6 portforward,ddns,reverseproxy proxy,wake on lan,IOT and more,Default username and password 666")
m:section(SimpleSection).template = "lucky_status" m:section(SimpleSection).template = "lucky_status"
@ -19,12 +19,9 @@ o = s:option(Value, "port",translate("Set the Lucky access port"))
o.datatype = "uinteger" o.datatype = "uinteger"
o.default = 16601 o.default = 16601
o = s:option(Flag, "AllowInternetaccess", translate("Enable Internet access")) o = s:option( Value, "configdir", translate("Config dir path"),translate("The path to store the config file"))
o.default=0 o.placeholder = "/etc/lucky"
o.default="/etc/lucky"
o = s:option(Button, "lucky_admin", translate("View Password"))
o.rawhtml = true
o.template = "lucky_admin"
m.apply_on_parse = true m.apply_on_parse = true
m.on_after_apply = function(self,map) m.on_after_apply = function(self,map)

View File

@ -2,36 +2,38 @@
Copyright 2021-2022 sirpdboy Wich <herboy2008@gmail.com> Copyright 2021-2022 sirpdboy Wich <herboy2008@gmail.com>
https://github.com/sirpdboy/luci-app-lucky https://github.com/sirpdboy/luci-app-lucky
Licensed to the public under the Apache License 2.0. Licensed to the public under the Apache License 2.0.
-%> %>
<%
local safeURL = luci.sys.exec("cat /etc/lucky/lucky.conf | grep SafeURL | sed -e 's/,//g' -e 's/\"//g' -e 's/\ //g' | awk -F ':' '{print $2}' ")
local luckyHttpPort = luci.model.uci.cursor():get("lucky", "lucky", "port");
-%>
<%+header%> <%+header%>
<script type="text/javascript">//<![CDATA[
var URL = ""
XHR.get('<%=url([[admin]], [[services]], [[lucky_config]])%>', null,
function (x, d) {
if (d) {
URL = "http://" + window.location.hostname + ":" + d.BaseConfigure.AdminWebListenPort;
if (d.BaseConfigure.SafeURL != undefined) {
URL += d.BaseConfigure.SafeURL;
console.log("test" + URL)
document.getElementById("luckyiframe").src = URL
document.getElementById("luckyiframe").height = document.documentElement.clientHeight;
window.onresize = function(){
document.getElementById("luckyiframe").height = document.documentElement.clientHeight;
}
}
}
}
);
//]]></script>
<div class="cbi-map"> <div class="cbi-map">
<iframe id="lucky" style="width: 100%; min-height: 780px; border: none; border-radius: .375rem;box-shadow: rgba(0, 0, 0, 0.75) 0px 0px 15px -5px;"><br/><em style=\"color:red\"> <iframe id="luckyiframe" style="width: 100%; min-height: 780px; border: none; border-radius: .375rem;box-shadow: rgba(0, 0, 0, 0.75) 0px 0px 15px -5px;"><br/><em style=\"color:red\">
<p ><em><%:The Lucky service is not running.%></em></p> <p ><em><%:The Lucky service is not running.%></em></p>
</iframe> </iframe>
</div> </div>
<script type="text/javascript">
var luckyAdminURL = ""+ window.location.protocol + "//" + window.location.hostname +":"+ `<%=luckyHttpPort%>`+`<%=safeURL%>`;
document.getElementById("lucky").src = luckyAdminURL
document.getElementById("lucky").height = document.documentElement.clientHeight;
window.onresize = function(){
document.getElementById("lucky").height = document.documentElement.clientHeight;
}
</script>
<%+footer%> <%+footer%>

View File

@ -1,26 +0,0 @@
<%+cbi/valueheader%>
<script type="text/javascript">//<![CDATA[
function admin_info(btn)
{
btn.disabled = true;
btn.value = '<%:Reading...%>';
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "lucky", "lucky_admin")%>',
null,
function(x,d)
{
var tb = document.getElementById('<%=self.option%>-status');
if (tb)
{
tb.innerHTML = "<%:Username:%>" + "<font color='green'>" + d.username + "</font>";
tb.innerHTML += "<%:Password:%>" + "<font color='green'>" + d.password + "</font>";
}
btn.disabled = false;
btn.value = '<%:Read%>';
}
);
return false;
}
//]]></script>
<input type="button" class="btn cbi-button cbi-button-apply" value="<%:Read%>" onclick="return admin_info(this)" />
<span id="<%=self.option%>-status"><em><%=self.value%></em></span>
<%+cbi/valuefooter%>

View File

@ -1,26 +1,45 @@
<%
protocol="http://"
%>
<script type="text/javascript">//<![CDATA[ <script type="text/javascript">//<![CDATA[
var URL = ""
var URLSAFE = ""
function Luckyconfig() {
XHR.get('<%=url([[admin]], [[services]], [[lucky_config]])%>', null,
function (x, d) {
if (d) {
URL = "http://" + window.location.hostname + ":" + d.BaseConfigure.AdminWebListenPort;
URLSAFE = "http://" + window.location.hostname + ":" + d.BaseConfigure.AdminWebListenPort;
if (d.BaseConfigure.SafeURL != undefined) {
URL += d.BaseConfigure.SafeURL;
}
}
}
);
}
XHR.poll(3, '<%=url([[admin]], [[services]], [[lucky_status]])%>', null, XHR.poll(3, '<%=url([[admin]], [[services]], [[lucky_status]])%>', null,
function(x, d) { function(x, d) {
var tb = document.getElementById('lucky_status'); var tb = document.getElementById('lucky_status');
if (d && tb) if (d && tb)
{ {
if (d.running) if (d.status)
{ {
var luckyAdminURL = ""+ window.location.protocol + "//" + window.location.hostname +":"+ d.port+d.safeurl+""; Luckyconfig()
tb.innerHTML = '<em><b style=\"color:green\"><%:The Lucky service is running.%></b></em>'; tb.innerHTML = '<em><b style=\"color:green\"><%:The Lucky service is running.%></b></em>';
tb.innerHTML +='<em> <br/><br/>' + ' <b > <%:Click the new page to open Lucky%> <a href="' +luckyAdminURL+'"'+' target="_blank">' + luckyAdminURL + ' </a><br/> </em>'; tb.innerHTML +='<em> <br/><br/><%:Click the new page to open Lucky%> </em>';
tb.innerHTML += "<input class=\"cbi-button cbi-button-reload \" type=\"button\" value=\" "+ URLSAFE+ "\" onclick=\"window.open('"+URL+"')\"/>";
} }
else else
{ {
tb.innerHTML = '<em><b style=\"color:red\"><%:The Lucky service is not running.%></b></em>'; tb.innerHTML = '<em style=\"color:red\"><%:The Lucky service is not running.%></em><br/>';
} }
} }
} }
); );
//]]></script> //]]></script>
<style>.mar-10 {margin-left: 50px; margin-right: 10px;}</style> <style>.mar-10 {margin-left: 50px; margin-right: 10px;}</style>
<fieldset class="cbi-section"> <fieldset class="cbi-section">

View File

@ -1,11 +1,14 @@
msgid "" msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8" msgstr "Content-Type: text/plain; charset=UTF-8"
msgid "Config dir path"
msgstr "配置文件夹位置"
msgid "Lucky" msgid "Lucky"
msgstr "Lucky大吉" msgstr "Lucky大吉"
msgid "Main functions of Lucky: dynamic domain name ddns-go service, which replaces socat. It is mainly used for public IPv6 tcp/udp to intranet ipv4, http/https reverse proxy frp" msgid "ipv4/ipv6 portforward,ddns,reverseproxy proxy,wake on lan,IOT and more,Default username and password 666"
msgstr "大吉主要功能动态域名ddns-go服务,替代socat主要用于公网IPv6 tcp/udp转内网ipv4,http/https反向代理网络唤醒(可通过第三方物联网平台接入各大语音助手实现语音控制开关电脑)" msgstr "IPv4/IPv6端口转发,动态域名服务,http/https反向代理默认用户名密码666.."
msgid "Running state" msgid "Running state"
msgstr "运行状态" msgstr "运行状态"
@ -28,29 +31,15 @@ msgstr "设置访问端口"
msgid "Lucky configuration file" msgid "Lucky configuration file"
msgstr "Lucky 配置文件" msgstr "Lucky 配置文件"
msgid "The path to store the config file"
msgstr "存放配置文件的位置"
msgid "</br>For specific usage, see:" msgid "</br>For specific usage, see:"
msgstr "</br>具体使用方法参见:" msgstr "</br>具体使用方法参见:"
msgid "Base Setting" msgid "Base Setting"
msgstr "基本设置" msgstr "基本设置"
msgid "Enable Internet access"
msgstr "开启外网访问"
msgid "Click the new page to open Lucky" msgid "Click the new page to open Lucky"
msgstr "点击新页面打开大吉" msgstr "点击新页面打开大吉"
msgid "View Password"
msgstr "查看密码"
msgid "Username:"
msgstr "用户名:"
msgid "Password:"
msgstr "密码:"
msgid "Reading..."
msgstr "读取中..."
msgid "Read"
msgstr "读取"

View File

@ -1 +0,0 @@
zh-cn

View File

@ -0,0 +1,45 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
msgid "Config dir path"
msgstr "配置文件夹位置"
msgid "Lucky"
msgstr "Lucky大吉"
msgid "ipv4/ipv6 portforward,ddns,reverseproxy proxy,wake on lan,IOT and more,Default username and password 666"
msgstr "IPv4/IPv6端口转发,动态域名服务,http/https反向代理默认用户名密码666.."
msgid "Running state"
msgstr "运行状态"
msgid "The Lucky service is running."
msgstr "大吉服务已启动"
msgid "The Lucky service is not running."
msgstr "大吉服务未启动"
msgid "Lucky Status"
msgstr "大吉服务状态"
msgid "Collecting data..."
msgstr "收集数据..."
msgid "Set the Lucky access port"
msgstr "设置访问端口"
msgid "Lucky configuration file"
msgstr "Lucky 配置文件"
msgid "The path to store the config file"
msgstr "存放配置文件的位置"
msgid "</br>For specific usage, see:"
msgstr "</br>具体使用方法参见:"
msgid "Base Setting"
msgstr "基本设置"
msgid "Click the new page to open Lucky"
msgstr "点击新页面打开大吉"

View File

@ -1,5 +1,5 @@
config lucky 'lucky' config lucky 'lucky'
option enabled '0'
option logger '1' option logger '1'
option port '16601' option port '16601'
option AllowInternetaccess '0' option configdir '/etc/lucky'
option enabled '0'

48
luci-app-lucky/root/etc/init.d/lucky Executable file → Normal file
View File

@ -9,50 +9,52 @@
USE_PROCD=1 USE_PROCD=1
START=99 START=99
STOP=10 STOP=15
CONF="lucky" CONF="lucky"
PROG=/usr/bin/lucky PROG=/usr/bin/lucky
LUCKYDIR=/etc/lucky DEFAULT_DIR='/etc/config/lucky.daji/'
LUCKYCONF=/etc/lucky/lucky.conf
get_tz()
{
SET_TZ=""
[ -e "/etc/localtime" ] && return
for tzfile in /etc/TZ /var/etc/TZ
do
[ -e "$tzfile" ] || continue
tz="$(cat $tzfile 2>/dev/null)"
done
[ -z "$tz" ] && return
SET_TZ=$tz
}
get_config() { get_config() {
config_get_bool enabled $1 enabled 1 config_get_bool enabled $1 enabled 1
config_get_bool logger $1 logger 1 config_get_bool logger $1 logger 1
config_get port $1 port 16601 config_get configdir $1 configdir $DEFAULT_DIR
config_get AllowInternetaccess $1 AllowInternetaccess 0
} }
lucky_prepare() {
pgrep -f $PROG | xargs kill -9 >/dev/null 2>&1
}
start_service() { start_service() {
stop_service
config_load "$CONF" config_load "$CONF"
config_foreach get_config "$CONF" config_foreach get_config "$CONF"
[ "x$enabled" = "x1" ] || return 1 [ "x$enabled" = "x1" ] || return 1
if [ "x$AllowInternetaccess" = "x1" ] ;then [ ! -d $configdir ] && mkdir -p $configdir 2>/dev/null
sed -i 's/"AllowInternetaccess": false,/"AllowInternetaccess": true,/g' "$LUCKYCONF"
else
sed -i 's/"AllowInternetaccess": true,/"AllowInternetaccess": false,/g' "$LUCKYCONF"
fi
# set_firewall
procd_open_instance procd_open_instance
procd_set_param command "$PROG" get_tz
procd_append_param command -c "$LUCKYCONF" -p $port [[ -z "$SET_TZ" ]] || procd_set_param env TZ="$SET_TZ"
procd_set_param command $PROG -cd "$configdir"
[ "x$logger" == x1 ] && procd_set_param stderr 1 [ "x$logger" == x1 ] && procd_set_param stderr 1
procd_set_param respawn procd_set_param respawn
procd_close_instance procd_close_instance
} }
stop_service() {
lucky_prepare
}
service_triggers() { service_triggers() {
procd_add_reload_trigger "$CONF" procd_add_reload_trigger lucky
} }

View File

@ -1,62 +0,0 @@
{
"BaseConfigure": {
"AdminWebListenPort": 16601,
"AdminWebListenTLS": false,
"AdminWebListenHttpsPort": 16626,
"AdminAccount": "666",
"AdminPassword": "666",
"AllowInternetaccess": false,
"LogMaxSize": 2048,
"HttpClientTimeout": 20,
"InsecureSkipVerify": false,
"DisableModules": null,
"SafeURL": ""
},
"WhiteListConfigure": {
"BaseConfigure": {
"URL": "",
"ActivelifeDuration": 36,
"BasicAccount": "666",
"BasicPassword": "666"
},
"WhiteList": null
},
"BlackListConfigure": {
"BlackList": null
},
"DDNSConfigure": {
"Enable": false,
"FirstCheckDelay": 0,
"Intervals": 0
},
"DDNSTaskList": null,
"ReverseProxyRuleList": null,
"SSLCertficateList": null,
"PortForwardsRuleList": null,
"PortForwardsConfigure": {
"PortForwardsLimit": 128,
"TCPPortforwardMaxConnections": 1024,
"UDPReadTargetDataMaxgoroutineCount": 1024
},
"WOLDeviceList": null,
"WOLServiceConfigure": {
"Server": {
"Enable": false,
"Token": "666666"
},
"Client": {
"Enable": false,
"ServerURL": "",
"Token": "",
"Relay": false,
"Key": "",
"DeviceName": "",
"Mac": "",
"BroadcastIP": "",
"Port": 9,
"Repeat": 5,
"PowerOffCMD": "",
"UpdateTime": 0
}
}
}

View File

@ -6,6 +6,6 @@ uci -q batch <<-EOF >/dev/null
set ucitrack.@lucky[-1].init=lucky set ucitrack.@lucky[-1].init=lucky
commit ucitrack commit ucitrack
EOF EOF
[[ -f /etc/config/lucky ]] || echo "config lucky 'lucky' " > /etc/config/lucky
rm -rf /tmp/luci* rm -rf /tmp/luci*
exit 0 exit 0