From c5329d85d5a3f4ac14d0a07b298167876d979413 Mon Sep 17 00:00:00 2001 From: Manuel Munz Date: Wed, 30 Nov 2011 05:50:43 +0000 Subject: applications/splash: Fix blacklisting mechanism, expose status on public freifunk page, add json output and autoupdate. --- .../luasrc/controller/splash/splash.lua | 33 ++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) (limited to 'applications/luci-splash/luasrc/controller') 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 -- cgit v1.2.3