* applications/luci-splash: Rewrote luci-splash using an own daemon implementation
* Minor tweaks in luci.dispatcher
This commit is contained in:
parent
4c7df626b2
commit
ee324cb3a7
11 changed files with 42 additions and 89 deletions
|
@ -1,4 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
echo "Status: 302 Found"
|
|
||||||
echo "Location: /cgi-bin/luci/splash/splash$PATH_INFO"
|
|
||||||
echo
|
|
|
@ -2,9 +2,9 @@
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="refresh" content="0; URL=/cgi-bin/index.cgi" />
|
<meta http-equiv="refresh" content="0; URL=/cgi-bin/luci/splash" />
|
||||||
</head>
|
</head>
|
||||||
<body style="background-color: black">
|
<body style="background-color: black">
|
||||||
<a style="color: white; text-decoration: none" href="/cgi-bin/index.cgi">LuCI - Lua Configuration Interface</a>
|
<a style="color: white; text-decoration: none" href="/cgi-bin/luci/splash">LuCI - Lua Configuration Interface</a>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
|
@ -1,16 +1,23 @@
|
||||||
module("luci.controller.splash.splash", package.seeall)
|
module("luci.controller.splash.splash", package.seeall)
|
||||||
|
|
||||||
function index()
|
function index()
|
||||||
local page = node("admin", "services", "splash")
|
entry({"admin", "services", "splash"}, cbi("splash/splash"), "Client-Splash")
|
||||||
page.target = cbi("splash/splash")
|
|
||||||
page.title = "Client-Splash"
|
|
||||||
|
|
||||||
|
node("splash").target = call("action_dispatch")
|
||||||
node("splash", "splash", "activate").target = call("action_activate")
|
node("splash", "splash", "activate").target = call("action_activate")
|
||||||
node("splash", "splash", "allowed").target = call("action_allowed")
|
|
||||||
node("splash", "splash", "unknown").target = call("action_unknown")
|
|
||||||
node("splash", "splash", "splash").target = template("splash_splash/splash")
|
node("splash", "splash", "splash").target = template("splash_splash/splash")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function action_dispatch()
|
||||||
|
local mac = luci.sys.net.ip4mac(luci.http.getenv("REMOTE_ADDR"))
|
||||||
|
local status = luci.sys.execl("luci-splash status "..mac)[1]
|
||||||
|
if status == "whitelisted" or status == "lease" then
|
||||||
|
luci.http.redirect(luci.dispatcher.build_url())
|
||||||
|
else
|
||||||
|
luci.http.redirect(luci.dispatcher.build_url("splash", "splash", "splash"))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function action_activate()
|
function action_activate()
|
||||||
local mac = luci.sys.net.ip4mac(luci.http.getenv("REMOTE_ADDR"))
|
local mac = luci.sys.net.ip4mac(luci.http.getenv("REMOTE_ADDR"))
|
||||||
if mac and luci.http.formvalue("accept") then
|
if mac and luci.http.formvalue("accept") then
|
||||||
|
@ -19,12 +26,4 @@ function action_activate()
|
||||||
else
|
else
|
||||||
luci.http.redirect(luci.dispatcher.build_url())
|
luci.http.redirect(luci.dispatcher.build_url())
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
function action_allowed()
|
|
||||||
luci.http.redirect(luci.dispatcher.build_url())
|
|
||||||
end
|
|
||||||
|
|
||||||
function action_unknown()
|
|
||||||
luci.http.redirect(luci.dispatcher.build_url())
|
|
||||||
end
|
end
|
|
@ -62,8 +62,8 @@ start() {
|
||||||
iptables -t nat -A luci_splash_leases -j DROP
|
iptables -t nat -A luci_splash_leases -j DROP
|
||||||
|
|
||||||
### Start the splash httpd
|
### Start the splash httpd
|
||||||
httpd -c /etc/luci_splash_httpd.conf -p 8082 -h /usr/lib/luci-splash/htdocs
|
start-stop-daemon -S -b -q -x /usr/bin/luci-splashd
|
||||||
|
|
||||||
### Hook in the chain
|
### Hook in the chain
|
||||||
iptables -t nat -A prerouting_rule -j luci_splash
|
iptables -t nat -A prerouting_rule -j luci_splash
|
||||||
}
|
}
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
E404:index.html
|
|
20
applications/luci-splash/root/usr/bin/luci-splashd
Executable file
20
applications/luci-splash/root/usr/bin/luci-splashd
Executable file
|
@ -0,0 +1,20 @@
|
||||||
|
#!/usr/bin/lua
|
||||||
|
require("socket")
|
||||||
|
|
||||||
|
local server = socket.bind("0.0.0.0", arg[1] or 8082)
|
||||||
|
server:settimeout(0, "t")
|
||||||
|
|
||||||
|
while true do
|
||||||
|
local client = server:accept()
|
||||||
|
|
||||||
|
if client then
|
||||||
|
client:settimeout(1)
|
||||||
|
local srv = client:getsockname()
|
||||||
|
client:receive()
|
||||||
|
client:send("HTTP/1.0 302 Found\r\nLocation: http://" .. srv ..
|
||||||
|
(arg[2] or "/luci/splash") .. "\r\n\r\n")
|
||||||
|
client:close()
|
||||||
|
else
|
||||||
|
socket.sleep(0.1)
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,53 +0,0 @@
|
||||||
#!/usr/bin/lua
|
|
||||||
|
|
||||||
require("luci.sys")
|
|
||||||
require("luci.model.uci")
|
|
||||||
|
|
||||||
luci.model.uci.set_savedir(luci.model.uci.savedir_state)
|
|
||||||
|
|
||||||
local srv
|
|
||||||
local net
|
|
||||||
local ip = os.getenv("REMOTE_ADDR")
|
|
||||||
luci.model.uci.foreach("network", "interface",
|
|
||||||
function (section)
|
|
||||||
if section.ipaddr then
|
|
||||||
local p = luci.sys.net.mask4prefix(section.netmask)
|
|
||||||
if luci.sys.net.belongs(ip, section.ipaddr, p) then
|
|
||||||
net = section[".name"]
|
|
||||||
srv = section.ipaddr
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|
|
||||||
local stat = false
|
|
||||||
luci.model.uci.foreach("luci_splash", "iface",
|
|
||||||
function (section)
|
|
||||||
if section.network == net then
|
|
||||||
stat = true
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|
|
||||||
if not srv then
|
|
||||||
print("Content-Type: text/plain\n")
|
|
||||||
print("Unable to detect network settings!")
|
|
||||||
elseif not stat then
|
|
||||||
print("Status: 302 Found")
|
|
||||||
print("Location: http://" .. srv)
|
|
||||||
else
|
|
||||||
local action = "splash"
|
|
||||||
|
|
||||||
local mac = luci.sys.net.ip4mac(ip)
|
|
||||||
if not mac then
|
|
||||||
action = "unknown"
|
|
||||||
end
|
|
||||||
|
|
||||||
local status = luci.sys.execl("luci-splash status "..mac)[1]
|
|
||||||
|
|
||||||
if status == "whitelisted" or status == "lease" then
|
|
||||||
action = "allowed"
|
|
||||||
end
|
|
||||||
|
|
||||||
print("Status: 302 Found")
|
|
||||||
print("Location: http://" .. srv .. "/cgi-bin/luci-splash/" .. action)
|
|
||||||
end
|
|
|
@ -334,7 +334,7 @@ endef
|
||||||
|
|
||||||
define Package/luci-app-splash
|
define Package/luci-app-splash
|
||||||
$(call Package/luci/fftemplate)
|
$(call Package/luci/fftemplate)
|
||||||
DEPENDS+=+iptables-mod-nat +iptables-mod-ipopt
|
DEPENDS+=+luasocket +iptables-mod-nat +iptables-mod-ipopt
|
||||||
TITLE:=Freifunk DHCP-Splash application
|
TITLE:=Freifunk DHCP-Splash application
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
#!/usr/bin/lua
|
|
||||||
print("Status: 302 Found")
|
|
||||||
print("Location: luci\n")
|
|
|
@ -2,9 +2,9 @@
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="refresh" content="0; URL=/cgi-bin/index.cgi" />
|
<meta http-equiv="refresh" content="0; URL=/cgi-bin/luci" />
|
||||||
</head>
|
</head>
|
||||||
<body style="background-color: black">
|
<body style="background-color: black">
|
||||||
<a style="color: white; text-decoration: none" href="/cgi-bin/index.cgi">LuCI - Lua Configuration Interface</a>
|
<a style="color: white; text-decoration: none" href="/cgi-bin/luci">LuCI - Lua Configuration Interface</a>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -314,7 +314,7 @@ end
|
||||||
|
|
||||||
-- Shortcut for creating a dispatching node
|
-- Shortcut for creating a dispatching node
|
||||||
function entry(path, target, title, order)
|
function entry(path, target, title, order)
|
||||||
local c = node(path)
|
local c = node(unpack(path))
|
||||||
|
|
||||||
c.target = target
|
c.target = target
|
||||||
c.title = title
|
c.title = title
|
||||||
|
@ -328,11 +328,6 @@ end
|
||||||
function node(...)
|
function node(...)
|
||||||
local c = context.tree
|
local c = context.tree
|
||||||
arg.n = nil
|
arg.n = nil
|
||||||
if arg[1] then
|
|
||||||
if type(arg[1]) == "table" then
|
|
||||||
arg = arg[1]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
for k,v in ipairs(arg) do
|
for k,v in ipairs(arg) do
|
||||||
if not c.nodes[v] then
|
if not c.nodes[v] then
|
||||||
|
|
Loading…
Reference in a new issue