diff options
Diffstat (limited to 'applications/luci-splash/luasrc/controller')
-rw-r--r-- | applications/luci-splash/luasrc/controller/splash/splash.lua | 33 |
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 a41256a09..aceeb4a8c 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 |