summaryrefslogtreecommitdiffhomepage
path: root/applications/luci-splash/luasrc/controller/splash/splash.lua
diff options
context:
space:
mode:
authorManuel Munz <freifunk@somakoma.de>2011-11-30 05:50:43 +0000
committerManuel Munz <freifunk@somakoma.de>2011-11-30 05:50:43 +0000
commitc5329d85d5a3f4ac14d0a07b298167876d979413 (patch)
tree7f936bfa6bb6a5d0867231fff45e9a02c03c094c /applications/luci-splash/luasrc/controller/splash/splash.lua
parentf4b9de593d180a835fbf0ed549b1eceb3531a647 (diff)
applications/splash: Fix blacklisting mechanism, expose status on public freifunk page, add json output and autoupdate.
Diffstat (limited to 'applications/luci-splash/luasrc/controller/splash/splash.lua')
-rw-r--r--applications/luci-splash/luasrc/controller/splash/splash.lua33
1 files changed, 31 insertions, 2 deletions
diff --git a/applications/luci-splash/luasrc/controller/splash/splash.lua b/applications/luci-splash/luasrc/controller/splash/splash.lua
index a41256a09e..aceeb4a8c5 100644
--- a/applications/luci-splash/luasrc/controller/splash/splash.lua
+++ b/applications/luci-splash/luasrc/controller/splash/splash.lua
@@ -1,6 +1,9 @@
module("luci.controller.splash.splash", package.seeall)
luci.i18n.loadc("splash")
+local uci = luci.model.uci.cursor()
+local util = require "luci.util"
+
function index()
entry({"admin", "services", "splash"}, cbi("splash/splash"), _("Client-Splash"), 90).i18n = "freifunk"
entry({"admin", "services", "splash", "splashtext" }, form("splash/splashtext"), _("Splashtext"), 10)
@@ -13,8 +16,14 @@ function index()
node("splash", "activate").target = call("action_activate")
node("splash", "splash").target = template("splash_splash/splash")
+ node("splash", "blocked").target = template("splash/blocked")
entry({"admin", "status", "splash"}, call("action_status_admin"), _("Client-Splash")).i18n = "freifunk"
+
+ local page = node("splash", "publicstatus")
+ page.target = call("action_status_public")
+ page.i18n = "freifunk"
+ page.leaf = true
end
function action_dispatch()
@@ -36,12 +45,28 @@ function action_dispatch()
end
end
+function blacklist()
+ leased_macs = { }
+ uci:foreach("luci_splash", "blacklist",
+ function(s) leased_macs[s.mac:lower()] = true
+ end)
+ return leased_macs
+end
+
function action_activate()
local ip = luci.http.getenv("REMOTE_ADDR") or "127.0.0.1"
local mac = luci.sys.net.ip4mac(ip:match("^[\[::ffff:]*(%d+.%d+%.%d+%.%d+)\]*$"))
+ local blacklisted = false
if mac and luci.http.formvalue("accept") then
- os.execute("luci-splash lease "..mac.." >/dev/null 2>&1")
- luci.http.redirect(luci.model.uci.cursor():get("freifunk", "community", "homepage"))
+ uci:foreach("luci_splash", "blacklist",
+ function(s) if s.mac:lower() == mac or s.mac == mac then blacklisted = true end
+ end)
+ if blacklisted then
+ luci.http.redirect(luci.dispatcher.build_url("splash" ,"blocked"))
+ else
+ os.execute("luci-splash lease "..mac.." >/dev/null 2>&1")
+ luci.http.redirect(luci.model.uci.cursor():get("freifunk", "community", "homepage"))
+ end
else
luci.http.redirect(luci.dispatcher.build_url())
end
@@ -93,3 +118,7 @@ function action_status_admin()
luci.template.render("admin_status/splash", { is_admin = true })
end
+
+function action_status_public()
+ luci.template.render("admin_status/splash", { is_admin = false })
+end