summaryrefslogtreecommitdiffhomepage
path: root/modules/luci-mod-freifunk/luasrc/controller/freifunk/remote_update.lua
blob: 1ddf54b674900d8e391cf5fc4b864dd24bbca2de (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
40
41
42
43
44
45
46
47
48
49
50
51
52
-- Copyright 2009 Jo-Philipp Wich <xm@subsignal.org>
-- Licensed to the public under the Apache License 2.0.

module("luci.controller.freifunk.remote_update", package.seeall)

function index()
	if not nixio.fs.access("/usr/sbin/remote-update") then
		return
	end

	entry({"admin", "system", "remote_update"}, call("act_remote_update"),
		_("Freifunk Remote Update"), 90)
end

function act_remote_update()
	if luci.http.formvalue("flash") == "1" then
		if luci.http.formvalue("confirm") == "1" then
			local nobackup = ( luci.http.formvalue("keepcfg") ~= "1" )
			local noverify = ( luci.http.formvalue("verify")  ~= "1" )

			luci.http.redirect("/luci-static/flashing.html")

			os.execute("start-stop-daemon -S -b -x /usr/sbin/remote-update -- %s%s-s 5 -y" % {
				noverify and "-v " or "",
				nobackup and "-n " or ""
			})
		else
			luci.template.render("freifunk/remote_update", {confirm=1})
		end
	else
		local fd = io.popen("remote-update -c")
		local update = { }

		if fd then
			while true do
				local ln=fd:read("*l")

				if not ln                  then break
				elseif ln:find("Local: ")  then update.locvar = ln:match("Local: (%d+)")
				elseif ln:find("Remote: ") then update.remver = ln:match("Remote: (%d+)")
				elseif ln == "--"          then update.info   = ""
				elseif update.info ~= nil  then
					update.info = update.info .. ln .. "\n"
				end
			end

			fd:close()
		end

		luci.template.render("freifunk/remote_update", {update=update})
	end
end