summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ffluci/controller/admin/system.lua50
-rw-r--r--src/ffluci/fs.lua10
-rw-r--r--src/ffluci/http.lua10
-rw-r--r--src/ffluci/sys.lua21
-rw-r--r--src/ffluci/template.lua21
-rw-r--r--src/ffluci/view/admin_system/editor.htm2
-rw-r--r--src/ffluci/view/admin_system/passwd.htm33
-rw-r--r--src/ffluci/view/admin_system/reboot.htm4
-rw-r--r--src/ffluci/view/admin_system/sshkeys.htm23
9 files changed, 136 insertions, 38 deletions
diff --git a/src/ffluci/controller/admin/system.lua b/src/ffluci/controller/admin/system.lua
index 5e32041538..455424eb8a 100644
--- a/src/ffluci/controller/admin/system.lua
+++ b/src/ffluci/controller/admin/system.lua
@@ -9,19 +9,21 @@ menu = {
descr = "System",
order = 20,
entries = {
- {action = "passwd", descr = "Passwort"},
+ {action = "passwd", descr = "Passwort ändern"},
+ {action = "sshkeys", descr = "SSH-Schlüssel"},
+ {action = "reboot", descr = "Neu starten"},
}
}
function action_editor()
- local file = ffluci.http.formvalue("file")
+ local file = ffluci.http.formvalue("file", "")
local data = ffluci.http.formvalue("data")
local err = nil
local msg = nil
- local stat = nil
+ local stat = true
if file and data then
- stat, err = pcall(ffluci.fs.writefile, file, data)
+ stat, err = ffluci.fs.writefile(file, data)
end
if not stat then
@@ -30,11 +32,9 @@ function action_editor()
msg = table.concat(err, " ")
end
- local stat, cnt = pcall(ffluci.fs.readfile, fname)
- if stat and cnt then
+ local cnt, err = ffluci.fs.readfile(file)
+ if cnt then
cnt = ffluci.util.pcdata(cnt)
- else
- cnt = nil
end
ffluci.template.render("admin_system/editor", {fn=file, cnt=cnt, msg=msg})
end
@@ -42,12 +42,38 @@ end
function action_passwd()
local p1 = ffluci.http.formvalue("pwd1")
local p2 = ffluci.http.formvalue("pwd2")
- local msg = nil
- local cm
+ local stat = nil
if p1 or p2 then
- msg = ffluci.sys.user.setpasswd("root", p1, p2)
+ if p1 == p2 then
+ stat = ffluci.sys.user.setpasswd("root", p1)
+ else
+ stat = 10
+ end
+ end
+
+ ffluci.template.render("admin_system/passwd", {stat=stat})
+end
+
+function action_reboot()
+ ffluci.template.render("admin_system/reboot")
+ ffluci.sys.reboot()
+end
+
+function action_sshkeys()
+ local file = "/etc/dropbear/authorized_keys"
+ local data = ffluci.http.formvalue("data")
+ local stat = nil
+ local err = nil
+
+ if data then
+ stat, err = ffluci.fs.writefile(file, data)
+ end
+
+ local cnt = ffluci.fs.readfile(file)
+ if cnt then
+ cnt = ffluci.util.pcdata(cnt)
end
- ffluci.template.render("admin_system/passwd", {msg=msg})
+ ffluci.template.render("admin_system/sshkeys", {cnt=cnt, msg=err})
end \ No newline at end of file
diff --git a/src/ffluci/fs.lua b/src/ffluci/fs.lua
index e262caa3c3..897308c105 100644
--- a/src/ffluci/fs.lua
+++ b/src/ffluci/fs.lua
@@ -40,7 +40,7 @@ function readfile(filename)
local fp, err = io.open(filename)
if fp == nil then
- error(err)
+ return nil, err
end
local data = fp:read("*a")
@@ -55,7 +55,7 @@ function readfilel(filename)
local data = {}
if fp == nil then
- error(err)
+ return nil, err
end
while true do
@@ -71,11 +71,15 @@ end
-- Writes given data to a file
function writefile(filename, data)
local fp, err = io.open(filename, "w")
+
if fp == nil then
- error(err)
+ return nil, err
end
+
fp:write(data)
fp:close()
+
+ return true
end
-- Returns the file modification date/time of "path"
diff --git a/src/ffluci/http.lua b/src/ffluci/http.lua
index 81076233b9..b7ce92ffab 100644
--- a/src/ffluci/http.lua
+++ b/src/ffluci/http.lua
@@ -38,20 +38,24 @@ end
-- Asks the browser to redirect to "url"
-function redirect(url)
+function redirect(url, qs)
+ if qs then
+ url = url .. "?" .. qs
+ end
+
status(302, "Found")
print("Location: " .. url .. "\n")
end
-- Same as redirect but accepts category, module and action for internal use
-function request_redirect(category, module, action)
+function request_redirect(category, module, action, ...)
category = category or "public"
module = module or "index"
action = action or "index"
local pattern = os.getenv("SCRIPT_NAME") .. "/%s/%s/%s"
- redirect(pattern:format(category, module, action))
+ redirect(pattern:format(category, module, action), ...)
end
diff --git a/src/ffluci/sys.lua b/src/ffluci/sys.lua
index 97a926b0b1..532324d4bd 100644
--- a/src/ffluci/sys.lua
+++ b/src/ffluci/sys.lua
@@ -38,6 +38,11 @@ function loadavg()
return loadavg:match("^(.-) (.-) (.-) (.-) (.-)$")
end
+-- Reboots the system
+function reboot()
+ return os.execute("reboot >/dev/null 2>&1")
+end
+
group = {}
group.getgroup = posix.getgroup
@@ -70,8 +75,16 @@ user = {}
user.getuser = posix.getpasswd
-- Changes the user password of given user
-function user.setpasswd(user, pwd1, pwd2)
- local cmd = "(echo '"..pwd1.."';sleep 1;echo '"..pwd2.."')|"
- cmd = cmd .. "passwd "..user.." 2>&1"
- return ffluci.util.exec(cmd)
+function user.setpasswd(user, pwd)
+ if pwd then
+ pwd = pwd:gsub("'", "")
+ end
+
+ if user then
+ user = user:gsub("'", "")
+ end
+
+ local cmd = "(echo '"..pwd.."';sleep 1;echo '"..pwd.."')|"
+ cmd = cmd .. "passwd '"..user.."' >/dev/null 2>&1"
+ return os.execute(cmd)
end \ No newline at end of file
diff --git a/src/ffluci/template.lua b/src/ffluci/template.lua
index 2bc0150812..52bebbcf4a 100644
--- a/src/ffluci/template.lua
+++ b/src/ffluci/template.lua
@@ -120,10 +120,6 @@ function compile(template)
template = string.dump(tf)
end
- c = c or 1
- ffluci.fs.writefile("/tmp/"..tostring(c), template)
- c = c+1
-
return template
end
@@ -179,9 +175,14 @@ function Template.__init__(self, name)
-- Build if there is no compiled file or if compiled file is outdated
if ((commt == nil) and not (tplmt == nil))
or (not (commt == nil) and not (tplmt == nil) and commt < tplmt) then
- local compiled = compile(ffluci.fs.readfile(sourcefile))
- ffluci.fs.writefile(compiledfile, compiled)
- self.template, err = loadstring(compiled)
+ local source
+ source, err = ffluci.fs.readfile(sourcefile)
+
+ if source then
+ local compiled = compile(source)
+ ffluci.fs.writefile(compiledfile, compiled)
+ self.template, err = loadstring(compiled)
+ end
else
self.template, err = loadfile(compiledfile)
end
@@ -190,7 +191,11 @@ function Template.__init__(self, name)
self.template, err = loadfile(self.compiledfile)
elseif compiler_mode == "memory" then
- self.template, err = loadstring(compile(ffluci.fs.readfile(sourcefile)))
+ local source
+ source, err = ffluci.fs.readfile(sourcefile)
+ if source then
+ self.template, err = loadstring(compile(source))
+ end
end
diff --git a/src/ffluci/view/admin_system/editor.htm b/src/ffluci/view/admin_system/editor.htm
index d4b3302efa..0215c91dff 100644
--- a/src/ffluci/view/admin_system/editor.htm
+++ b/src/ffluci/view/admin_system/editor.htm
@@ -1,7 +1,7 @@
<%+header%>
<h1><%:texteditor Texteditor%></h1>
<form method="post" action="<%=controller%>/admin/system/editor">
-<div><%:file Datei%>: <input type="text" name="file" size="30" value="<%=fn%>" />
+<div><%:file Datei%>: <input type="text" name="file" size="30" value="<%=(fn or '')%>" />
<% if msg then %><span class="error"><%:error Fehler%>: <%=msg%></span><% end %></div>
<br />
<div><textarea style="width: 100%" rows="20" name="data"><%=(cnt or '')%></textarea></div>
diff --git a/src/ffluci/view/admin_system/passwd.htm b/src/ffluci/view/admin_system/passwd.htm
index 3458fef924..441753d839 100644
--- a/src/ffluci/view/admin_system/passwd.htm
+++ b/src/ffluci/view/admin_system/passwd.htm
@@ -1,14 +1,33 @@
<%+header%>
<h1><%:system System%></h1>
-<h2><%:changepw Passwort ändern%></h2>
+<h2><%:passwd Passwort ändern%></h2>
<div><br />
-<% if msg then %>
- <code><%=msg%></code>
-<% else %>
+<% if stat then %>
+ <% if stat == 0 then %>
+ <code><%:password_changed Passwort erfolgreich geändert!%></code>
+ <% elseif stat == 10 then %>
+ <code class="error"><%:password_nomatch Passwörter stimmen nicht überein! %></code>
+ <% else %>
+ <code class="error"><%:unknown_error Unbekannter Fehler!%></code>
+ <% end %>
+<% end %>
+<% if not stat or stat == 10 then %>
<form method="post" action="<%=controller%>/admin/system/passwd">
- <input type="password" name="pwd1" /> <%:password Passwort%><br />
- <input type="password" name="pwd2" /> <%:confirmation Bestätigung%><br />
- <input type="submit" value="<%:save Speichern%>" />
+ <fieldset class="cbi-section-node">
+ <div class="cbi-value clear">
+ <div class="cbi-value-title left"><%:password Passwort%></div>
+ <div class="cbi-value-field"><input type="password" name="pwd1" /></div>
+ </div>
+ <div class="cbi-value clear">
+ <div class="cbi-value-title left"><%:confirmation Bestätigung%></div>
+ <div class="cbi-value-field"><input type="password" name="pwd2" /></div>
+ </div>
+ <br />
+ <div>
+ <input type="submit" value="<%:save Speichern%>" />
+ <input type="reset" value="<%:reset Zurücksetzen%>" />
+ </div>
+ </fieldset>
</form>
<% end %>
</div>
diff --git a/src/ffluci/view/admin_system/reboot.htm b/src/ffluci/view/admin_system/reboot.htm
new file mode 100644
index 0000000000..a81464409b
--- /dev/null
+++ b/src/ffluci/view/admin_system/reboot.htm
@@ -0,0 +1,4 @@
+<%+header%>
+<h1><%:system System%></h1>
+<h2><%:reboot Neu starten%></h2>
+<%+footer%> \ No newline at end of file
diff --git a/src/ffluci/view/admin_system/sshkeys.htm b/src/ffluci/view/admin_system/sshkeys.htm
new file mode 100644
index 0000000000..1e1cc24ce1
--- /dev/null
+++ b/src/ffluci/view/admin_system/sshkeys.htm
@@ -0,0 +1,23 @@
+<%+header%>
+<h1><%:system System%></h1>
+<h2><%:sshkeys SSH-Schlüssel%></h2>
+
+<br />
+
+<div><%:sshkeys_descr Hier können öffentliche SSH-Schlüssel (einer pro Zeile)
+ zur Authentifizierung abgelegt werden.%></div>
+
+<br />
+
+<form method="post" action="<%=controller%>/admin/system/sshkeys">
+ <fieldset class="cbi-section-node">
+ <div><textarea style="width: 100%" rows="10" name="data"><%=(cnt or '')%></textarea></div>
+ <br />
+ <div>
+ <input type="submit" value="<%:save Speichern%>" />
+ <input type="reset" value="<%:reset Zurücksetzen%>" />
+ </div>
+ <% if msg then %><br /><div class="error"><%:error Fehler%>: <%=msg%></div><% end %>
+ </fieldset>
+</form>
+<%+footer%> \ No newline at end of file