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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
--[[
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
$Id$
]]--
module("luci.controller.mini.system", package.seeall)
function index()
luci.i18n.loadc("admin-core")
local i18n = luci.i18n.translate
entry({"mini", "system"}, alias("mini", "system", "index"), i18n("system"), 40)
entry({"mini", "system", "index"}, cbi("mini/system"), i18n("general"), 1)
entry({"mini", "system", "passwd"}, call("action_passwd"), i18n("a_s_changepw"), 10)
entry({"mini", "system", "backup"}, call("action_backup"), i18n("a_s_backup"), 80)
entry({"mini", "system", "upgrade"}, call("action_upgrade"), i18n("a_s_flash"), 90)
entry({"mini", "system", "reboot"}, call("action_reboot"), i18n("reboot"), 100)
end
function action_backup()
local reset_avail = os.execute([[grep '"rootfs_data"' /proc/mtd >/dev/null 2>&1]]) == 0
local restore_cmd = "gunzip | tar -xC/ >/dev/null 2>&1"
local backup_cmd = "tar -c %s | gzip 2>/dev/null"
local restore_fpi
luci.http.setfilehandler(
function(meta, chunk, eof)
if not restore_fpi then
restore_fpi = io.popen(restore_cmd, "w")
end
if chunk then
restore_fpi:write(chunk)
end
if eof then
restore_fpi:close()
end
end
)
local upload = luci.http.formvalue("archive")
local backup = luci.http.formvalue("backup")
local reset = reset_avail and luci.http.formvalue("reset")
if upload and #upload > 0 then
luci.template.render("mini/applyreboot")
luci.sys.reboot()
elseif backup then
luci.util.perror(backup_cmd:format(_keep_pattern()))
local backup_fpi = io.popen(backup_cmd:format(_keep_pattern()), "r")
luci.http.header('Content-Disposition', 'attachment; filename="backup.tar.gz"')
luci.http.prepare_content("application/x-targz")
luci.ltn12.pump.all(luci.ltn12.source.file(backup_fpi), luci.http.write)
elseif reset then
luci.template.render("mini/applyreboot")
luci.util.exec("mtd -r erase rootfs_data")
else
luci.template.render("mini/backup", {reset_avail = reset_avail})
end
end
function action_reboot()
local reboot = luci.http.formvalue("reboot")
luci.template.render("mini/reboot", {reboot=reboot})
if reboot then
luci.sys.reboot()
end
end
function action_upgrade()
require("luci.model.uci")
local ret = nil
local plat = luci.fs.mtime("/lib/upgrade/platform.sh")
local tmpfile = "/tmp/firmware.img"
local keep_avail = true
local file
luci.http.setfilehandler(
function(meta, chunk, eof)
if not file then
file = io.open(tmpfile, "w")
end
if chunk then
file:write(chunk)
end
if eof then
file:close()
end
end
)
local fname = luci.http.formvalue("image")
local keepcfg = keep_avail and luci.http.formvalue("keepcfg")
if plat and fname then
ret = luci.sys.flash(tmpfile, keepcfg and _keep_pattern())
end
luci.template.render("mini/upgrade", {sysupgrade=plat, ret=ret, keep_avail=keep_avail})
end
function action_passwd()
local p1 = luci.http.formvalue("pwd1")
local p2 = luci.http.formvalue("pwd2")
local stat = nil
if p1 or p2 then
if p1 == p2 then
stat = luci.sys.user.setpasswd("root", p1)
else
stat = 10
end
end
luci.template.render("mini/passwd", {stat=stat})
end
function _keep_pattern()
local kpattern = ""
local files = luci.model.uci.get_all("luci", "flash_keep")
if files then
kpattern = ""
for k,v in pairs(files) do
kpattern = kpattern .. " " .. v
end
end
return kpattern
end
|