From ee324cb3a70d39dc9522a1ee63af12137d433533 Mon Sep 17 00:00:00 2001 From: Steven Barth Date: Sun, 29 Jun 2008 14:42:53 +0000 Subject: [PATCH] * applications/luci-splash: Rewrote luci-splash using an own daemon implementation * Minor tweaks in luci.dispatcher --- .../luci-splash/htdocs/cgi-bin/luci-splash | 4 -- .../htdocs => htdocs/luci/splash}/index.html | 6 +-- .../luasrc/controller/splash/splash.lua | 25 +++++----- .../luci-splash/root/etc/init.d/luci_splash | 4 +- .../luci-splash/root/etc/luci_splash_httpd.conf | 1 - applications/luci-splash/root/usr/bin/luci-splashd | 20 ++++++++ .../usr/lib/luci-splash/htdocs/cgi-bin/index.cgi | 53 ---------------------- contrib/package/luci/Makefile | 2 +- libs/sgi-cgi/htdocs/cgi-bin/index.cgi | 3 -- libs/sgi-cgi/htdocs/index.html | 6 +-- libs/web/luasrc/dispatcher.lua | 7 +-- 11 files changed, 42 insertions(+), 89 deletions(-) delete mode 100755 applications/luci-splash/htdocs/cgi-bin/luci-splash rename applications/luci-splash/{root/usr/lib/luci-splash/htdocs => htdocs/luci/splash}/index.html (56%) delete mode 100644 applications/luci-splash/root/etc/luci_splash_httpd.conf create mode 100755 applications/luci-splash/root/usr/bin/luci-splashd delete mode 100755 applications/luci-splash/root/usr/lib/luci-splash/htdocs/cgi-bin/index.cgi delete mode 100755 libs/sgi-cgi/htdocs/cgi-bin/index.cgi diff --git a/applications/luci-splash/htdocs/cgi-bin/luci-splash b/applications/luci-splash/htdocs/cgi-bin/luci-splash deleted file mode 100755 index c75593fbe..000000000 --- a/applications/luci-splash/htdocs/cgi-bin/luci-splash +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -echo "Status: 302 Found" -echo "Location: /cgi-bin/luci/splash/splash$PATH_INFO" -echo \ No newline at end of file diff --git a/applications/luci-splash/root/usr/lib/luci-splash/htdocs/index.html b/applications/luci-splash/htdocs/luci/splash/index.html similarity index 56% rename from applications/luci-splash/root/usr/lib/luci-splash/htdocs/index.html rename to applications/luci-splash/htdocs/luci/splash/index.html index 39ba558df..486409a2e 100644 --- a/applications/luci-splash/root/usr/lib/luci-splash/htdocs/index.html +++ b/applications/luci-splash/htdocs/luci/splash/index.html @@ -2,9 +2,9 @@ - + -LuCI - Lua Configuration Interface +LuCI - Lua Configuration Interface - \ No newline at end of file + diff --git a/applications/luci-splash/luasrc/controller/splash/splash.lua b/applications/luci-splash/luasrc/controller/splash/splash.lua index 617e0f877..6512ee5b1 100644 --- a/applications/luci-splash/luasrc/controller/splash/splash.lua +++ b/applications/luci-splash/luasrc/controller/splash/splash.lua @@ -1,16 +1,23 @@ module("luci.controller.splash.splash", package.seeall) function index() - local page = node("admin", "services", "splash") - page.target = cbi("splash/splash") - page.title = "Client-Splash" + entry({"admin", "services", "splash"}, cbi("splash/splash"), "Client-Splash") + node("splash").target = call("action_dispatch") 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") 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() local mac = luci.sys.net.ip4mac(luci.http.getenv("REMOTE_ADDR")) if mac and luci.http.formvalue("accept") then @@ -19,12 +26,4 @@ function action_activate() else luci.http.redirect(luci.dispatcher.build_url()) end -end - -function action_allowed() - luci.http.redirect(luci.dispatcher.build_url()) -end - -function action_unknown() - luci.http.redirect(luci.dispatcher.build_url()) end \ No newline at end of file diff --git a/applications/luci-splash/root/etc/init.d/luci_splash b/applications/luci-splash/root/etc/init.d/luci_splash index 20f7865fd..eb006e9b0 100755 --- a/applications/luci-splash/root/etc/init.d/luci_splash +++ b/applications/luci-splash/root/etc/init.d/luci_splash @@ -62,8 +62,8 @@ start() { iptables -t nat -A luci_splash_leases -j DROP ### 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 iptables -t nat -A prerouting_rule -j luci_splash } diff --git a/applications/luci-splash/root/etc/luci_splash_httpd.conf b/applications/luci-splash/root/etc/luci_splash_httpd.conf deleted file mode 100644 index 6007e80db..000000000 --- a/applications/luci-splash/root/etc/luci_splash_httpd.conf +++ /dev/null @@ -1 +0,0 @@ -E404:index.html \ No newline at end of file diff --git a/applications/luci-splash/root/usr/bin/luci-splashd b/applications/luci-splash/root/usr/bin/luci-splashd new file mode 100755 index 000000000..33391cc5b --- /dev/null +++ b/applications/luci-splash/root/usr/bin/luci-splashd @@ -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 diff --git a/applications/luci-splash/root/usr/lib/luci-splash/htdocs/cgi-bin/index.cgi b/applications/luci-splash/root/usr/lib/luci-splash/htdocs/cgi-bin/index.cgi deleted file mode 100755 index 29679a21c..000000000 --- a/applications/luci-splash/root/usr/lib/luci-splash/htdocs/cgi-bin/index.cgi +++ /dev/null @@ -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 diff --git a/contrib/package/luci/Makefile b/contrib/package/luci/Makefile index 54cb7fbf4..68bcc9900 100644 --- a/contrib/package/luci/Makefile +++ b/contrib/package/luci/Makefile @@ -334,7 +334,7 @@ endef define Package/luci-app-splash $(call Package/luci/fftemplate) - DEPENDS+=+iptables-mod-nat +iptables-mod-ipopt + DEPENDS+=+luasocket +iptables-mod-nat +iptables-mod-ipopt TITLE:=Freifunk DHCP-Splash application endef diff --git a/libs/sgi-cgi/htdocs/cgi-bin/index.cgi b/libs/sgi-cgi/htdocs/cgi-bin/index.cgi deleted file mode 100755 index fc1148de6..000000000 --- a/libs/sgi-cgi/htdocs/cgi-bin/index.cgi +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/lua -print("Status: 302 Found") -print("Location: luci\n") diff --git a/libs/sgi-cgi/htdocs/index.html b/libs/sgi-cgi/htdocs/index.html index 39ba558df..0a7238b55 100644 --- a/libs/sgi-cgi/htdocs/index.html +++ b/libs/sgi-cgi/htdocs/index.html @@ -2,9 +2,9 @@ - + -LuCI - Lua Configuration Interface +LuCI - Lua Configuration Interface - \ No newline at end of file + diff --git a/libs/web/luasrc/dispatcher.lua b/libs/web/luasrc/dispatcher.lua index 426dd66bd..7c28f6a78 100644 --- a/libs/web/luasrc/dispatcher.lua +++ b/libs/web/luasrc/dispatcher.lua @@ -314,7 +314,7 @@ end -- Shortcut for creating a dispatching node function entry(path, target, title, order) - local c = node(path) + local c = node(unpack(path)) c.target = target c.title = title @@ -328,11 +328,6 @@ end function node(...) local c = context.tree 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 if not c.nodes[v] then -- 2.11.0