luci-app-splash: convert ip4mac() to luci.ip.neighbors()
authorJo-Philipp Wich <jow@openwrt.org>
Thu, 22 Jan 2015 21:07:50 +0000 (22:07 +0100)
committerJo-Philipp Wich <jow@openwrt.org>
Thu, 22 Jan 2015 21:07:50 +0000 (22:07 +0100)
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
applications/luci-app-splash/luasrc/controller/splash/splash.lua

index a41015e..4add435 100644 (file)
@@ -23,23 +23,26 @@ function index()
        page.leaf   = true
 end
 
-function action_dispatch()
-       local uci = luci.model.uci.cursor_state()
+function ip_to_mac(ip)
        local ipc = require "luci.ip"
-
        local i, n
-       local mac = ""
-       local access = false
 
        for i, n in ipairs(ipc.neighbors()) do
-               if n.mac and n.dest and n.dest:equal(luci.http.getenv("REMOTE_ADDR")) then
-                       mac = n.mac
+               if n.mac and n.dest and n.dest:equal(ip) then
+                       return n.mac
                end
        end
+end
+
+function action_dispatch()
+       local uci = luci.model.uci.cursor_state()
+       local mac = ip_to_mac(luci.http.getenv("REMOTE_ADDR")) or ""
+       local access = false
 
        uci:foreach("luci_splash", "lease", function(s)
                if s.mac and s.mac:lower() == mac then access = true end
        end)
+
        uci:foreach("luci_splash", "whitelist", function(s)
                if s.mac and s.mac:lower() == mac then access = true end
        end)
@@ -60,13 +63,13 @@ function blacklist()
 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 ipc = require "luci.ip"
+       local mac = ip_to_mac(luci.http.getenv("REMOTE_ADDR") or "127.0.0.1") or ""
        local uci_state = require "luci.model.uci".cursor_state()
        local blacklisted = false
        if mac and luci.http.formvalue("accept") then
                uci:foreach("luci_splash", "blacklist",
-                       function(s) if s.mac:lower() == mac or s.mac == mac then blacklisted = true end
+                       function(s) if s.mac and s.mac:lower() == mac then blacklisted = true end
                end)
                if blacklisted then     
                        luci.http.redirect(luci.dispatcher.build_url("splash" ,"blocked"))