summaryrefslogtreecommitdiffhomepage
path: root/contrib/package/luci-splash/src/luci-splash/sync.lua
blob: 410b6608c33213e633c75d2e8e78612c49ac5313 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/usr/bin/haserl --shell=luac --accept-none
dofile("/usr/lib/luci-splash/splash.lua")

local written = {}
local time = os.time()

-- Current leases in state files
local leases = uci:show("luci_splash").luci_splash

-- Convert leasetime to seconds
local leasetime = tonumber(uci:get("luci_splash", "general", "leasetime")) * 3600

-- Clean state file
uci:revert("luci_splash")


-- For all leases
for k, v in pairs(uci:show("luci_splash")) do
	if v[".type"] == "lease" then
		if os.difftime(time, tonumber(v.start)) > leasetime then
			-- Remove expired
			remove_rule(v.mac)
		else
			-- Rewrite state
			local n = uci:add("luci_splash", "lease")
			uci:set("luci_splash", n, "mac", v.mac)
			uci:set("luci_splash", n, "start", v.start)
			written[v.mac] = 1
		end
	end
end


-- Delete rules without state
for i, r in ipairs(listrules()) do
	if not written[r] then
		remove_rule(r)
	end
end