summaryrefslogtreecommitdiffstats
path: root/password-model.lua
diff options
context:
space:
mode:
Diffstat (limited to 'password-model.lua')
-rw-r--r--password-model.lua46
1 files changed, 30 insertions, 16 deletions
diff --git a/password-model.lua b/password-model.lua
index 376c0e2..ba74e45 100644
--- a/password-model.lua
+++ b/password-model.lua
@@ -1,24 +1,38 @@
-- password model methods
module (..., package.seeall)
-require "format"
--- no initializer in model - use controller.init for that
+require ("fs")
+
+read_password = function()
+ pw = {}
+ pw.user = cfe({ label="User Name" })
+ pw.password = cfe({ label="Password" })
+ pw.password_confirm = cfe({ label="Password (confirm)" })
+ return cfe({ type="group", value=pw, label="System Password" })
+end
--setup so that it will compare password input
-set = function (self, userid, cmd1, cmd2)
- if cmd1 ~= cmd2 then report = "Invalid or non matching password. Try again"
- else
- command = "/usr/bin/cryptpw" .. " " .. cmd1
- f = io.popen(command)
- c = f:read("*l")
- f:close()
- --this is hardcoded for root should be easy to change
- newpass = "root:" .. c
- t = fs.search_replace("/etc/shadow", "root:[!%w%$%/%.]+", newpass)
- fs.write_file("/etc/shadow", fs.ipairs_string(t))
- report = "Success. New password set."
+update_password = function (pw)
+ local success = true
+ if pw.value.password.value == "" or pw.value.password.value ~= pw.value.password_confirm.value then
+ pw.value.password.errtxt = "Invalid or non matching password"
+ success = false
+ end
+ local filecontent = "\n"..fs.read_file("/etc/shadow")
+ if pw.value.user.value == "" or not string.find(filecontent, "\n"..pw.value.user.value..":") then
+ pw.value.user.errtxt = "Unknown user"
+ success = false
end
- return( cfe{value=report, name="report"})
-end
+ if success then
+ local f = io.popen("/usr/bin/cryptpw " .. pw.value.password.value)
+ local newpass = f:read("*l")
+ f:close()
+ local new = string.gsub(filecontent, "(\n"..pw.value.user.value..":)[^:]*", "%1"..newpass)
+ fs.write_file("/etc/shadow", string.sub(new, 2))
+ else
+ pw.errtxt = "Failed to set password"
+ end
+ return pw
+end