summaryrefslogtreecommitdiffhomepage
path: root/applications/luci-splash/luasrc/controller/splash/splash.lua
diff options
context:
space:
mode:
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 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