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
diff --git a/applications/luci-splash/luasrc/view/admin_status/splash.htm b/applications/luci-splash/luasrc/view/admin_status/splash.htm
index 1b55e7b275..86cb9c83a1 100644
--- a/applications/luci-splash/luasrc/view/admin_status/splash.htm
+++ b/applications/luci-splash/luasrc/view/admin_status/splash.htm
@@ -124,10 +124,98 @@ local function showmac(mac)
return mac
end
+if luci.http.formvalue("status") == "1" then
+ local rv = {}
+ for _, c in utl.spairs(clients,
+ function(a,b) if clients[a].policy == clients[b].policy then
+ return (clients[a].start > clients[b].start)
+ else
+ return (clients[a].policy > clients[b].policy)
+ end
+ end)
+ do
+ if c.ip then
+ rv[#rv+1] = {
+ hostname = c.hostname or "?",
+ ip = c.ip or "?",
+ mac = showmac(c.mac) or "?",
+ timeleft = (c.limit >= os.time()) and wat.date_format(c.limit-os.time()) or (c.policy ~= "normal") and "-" or "expired",
+ trafficin = wat.byte_format(c.bytes_in) or "?",
+ trafficout = wat.byte_format(c.bytes_out) or "?",
+ policy = c.policy or "?"
+ }
+ end
+ end
+ luci.http.prepare_content("application/json")
+ luci.http.write_json(rv)
+ return
+end
-%>
+
+
<%+header%>
+
+
+
+