diff options
Diffstat (limited to 'app')
-rw-r--r-- | app/acf-util/logon-model.lua | 22 | ||||
-rwxr-xr-x | app/acf-util/password-controller.lua | 132 | ||||
-rwxr-xr-x | app/acf-util/password-model.lua | 112 | ||||
-rwxr-xr-x | app/acf-util/password-status-html.lsp | 3 | ||||
-rw-r--r-- | app/acf-util/roles-model.lua | 4 |
5 files changed, 69 insertions, 204 deletions
diff --git a/app/acf-util/logon-model.lua b/app/acf-util/logon-model.lua index 3644a09..b817cf9 100644 --- a/app/acf-util/logon-model.lua +++ b/app/acf-util/logon-model.lua @@ -6,18 +6,7 @@ require ("session") require ("html") require ("fs") require ("roles") - ---varibles for time in case of logons,expired,lockouts - --- load an authenticator --- FIXME: use an "always true" as default? - -local auth -if authenticator then - auth = require ("authenticator-" .. conf.authenticator) -else - auth = require ("authenticator-plaintext") -end +require ("authenticator") -- Logoff the user by deleting session data logoff = function (sessiondir, sessiondata) @@ -42,7 +31,7 @@ logon = function (self, userid, password, ip_addr, sessiondir, sessiondata) end if false == countevent and userid and password then - if auth.authenticate (self, userid, password) then + if authenticator.authenticate (self, userid, password) then -- We have a successful login, change sessiondata -- for some reason, can't call this function or it skips rest of logon -- logout(sessiondir, sessiondata) @@ -54,8 +43,11 @@ logon = function (self, userid, password, ip_addr, sessiondir, sessiondata) end --]] sessiondata.id = session.random_hash(512) - local t = auth.get_userinfo (self, userid) - sessiondata.userinfo = t or {} + local t = authenticator.get_userinfo (self, userid) + sessiondata.userinfo = {} + for name,value in pairs(t.value) do + sessiondata.userinfo[name] = value.value + end return cfe({ type="boolean", value=true, label="Logon Success" }) else -- We have a bad login, log the event diff --git a/app/acf-util/password-controller.lua b/app/acf-util/password-controller.lua index 20f04ef..bea4480 100755 --- a/app/acf-util/password-controller.lua +++ b/app/acf-util/password-controller.lua @@ -8,97 +8,59 @@ function status(self) end function editme(self) - local output = self.model.read_user(self, self.sessiondata.userinfo.userid) - - if clientdata.Save then - -- just to make sure can't modify any other user from this action - self.clientdata.userid = self.sessiondata.userinfo.userid - - -- As a special case for update_user, settings that don't change are nil - self.clientdata.roles = nil - output.value.roles.value = nil - -- if password is blank, don't update it or require it - if not self.clientdata.password or self.clientdata.password == "" then - self.clientdata.password = nil - output.value.password.value = nil - end - if not self.clientdata.password_confirm or self.clientdata.password_confirm == "" then - self.clientdata.password_confirm = nil - output.value.password_confirm.value = nil - end - - controllerfunctions.handle_clientdata(output, clientdata) - - -- Update userinfo - output = self.model.update_user(self, output) - if not output.errtxt then - output.descr = "Saved user" - end - output = self:redirect_to_referrer(output) - else - output = self:redirect_to_referrer() or output - end - - -- Don't allow changing of roles for yourself - output.value.roles = nil - - output.type = "form" - output.label = "Edit My Settings" - output.option = "Save" - return output + -- just to make sure can't modify any other user from this action + self.clientdata.userid = self.sessiondata.userinfo.userid + return controllerfunctions.handle_form(self, function() + local value = self.model.read_user(self, self.sessiondata.userinfo.userid) + -- We don't allow a user to modify his own roles or dnsfiles + value.value.roles = nil + value.value.dnsfiles = nil + return value + end, function(value) + -- If password and password_confirm are blank, don't set them + local pw, pwc + if value.value.password.value == "" and value.value.password_confirm.value == "" then + pw = value.value.password + pwc = value.value.password_confirm + value.value.password = nil + value.value.password_confirm = nil + end + value = self.model.update_user(self, value) + if pw then + value.value.password = pw + value.value.password_confirm = pwc + end + return value + end, self.clientdata, "Save", "Edit My Settings", "Saved user") end function edituser(self) - local output = self.model.read_user(self, self.clientdata.userid) - if self.clientdata.Save then - -- As a special case for update_user, settings that don't change are nil - -- if password is blank, don't update it or require it - if not self.clientdata.password or self.clientdata.password == "" then - self.clientdata.password = nil - output.value.password.value = nil - end - if not self.clientdata.password_confirm or self.clientdata.password_confirm == "" then - self.clientdata.password_confirm = nil - output.value.password_confirm.value = nil - end - - controllerfunctions.handle_clientdata(output, clientdata) - - -- Update userinfo - output = self.model.update_user(self, output) - if not output.errtxt then - redirect(self, "status") - end - output = self:redirect_to_referrer(output) - else - output = self:redirect_to_referrer() or output - end - - output.type = "form" - output.label = "Edit User Settings" - output.option = "Save" - return output + return controllerfunctions.handle_form(self, function() + return self.model.read_user(self, self.clientdata.userid) + end, function(value) + -- If password and password_confirm are blank, don't set them + local pw, pwc + if value.value.password.value == "" and value.value.password_confirm.value == "" then + pw = value.value.password + pwc = value.value.password_confirm + value.value.password = nil + value.value.password_confirm = nil + end + value = self.model.update_user(self, value) + if pw then + value.value.password = pw + value.value.password_confirm = pwc + end + return value + end, self.clientdata, "Save", "Edit User Settings", "Saved user") end function newuser(self) - local output = self.model.read_user(self) - if self.clientdata.Save then - controllerfunctions.handle_clientdata(output, clientdata) - - -- Update userinfo - output = self.model.create_user(self, output) - if not output.errtxt then - redirect(self, "status") - end - output = self:redirect_to_referrer(output) - else - output = self:redirect_to_referrer() or output - end - - output.type = "form" - output.label = "New User Settings" - output.option = "Save" - return output + return controllerfunctions.handle_form(self, function() + return self.model.read_user(self) + end, function(value) + return self.model.create_user(self, value) + end, self.clientdata, "Save", "New User Settings", "Saved user", "status") end function deleteuser(self) diff --git a/app/acf-util/password-model.lua b/app/acf-util/password-model.lua index 1e78e5d..87c2e6f 100755 --- a/app/acf-util/password-model.lua +++ b/app/acf-util/password-model.lua @@ -1,125 +1,33 @@ module(..., package.seeall) -local auth=require("authenticator-plaintext") +require("authenticator") function create_user(self, userdata) - return update_user(self, userdata, true) + return authenticator.new_settings(self, userdata) end function read_user(self, user) - local config = {} - local errtxt - - -- Read the user data - local userinfo - if user and (#user > 0) then - userinfo = auth.get_userinfo(self,user) - if not userinfo then - errtxt = "User does not exist" - end - end - userinfo = userinfo or {} - - config.userid = cfe({ - label="User id", - value=(userinfo.userid or user or ""), - errtxt = errtxt - }) - config.username = cfe({ - label="Real name", - value=(userinfo.username or ""), - }) - config.roles = cfe({ - label="Roles", - value=(userinfo.roles or {}), - type="multi", - option=auth.list_roles(), - }) - config.password = cfe({ - label="Password", - }) - config.password_confirm = cfe({ - label="Password (confirm)", - }) - - return cfe({ type="group", value=config, errtxt = errtxt, label="User Config" }) + return authenticator.get_userinfo(self, user) end -function update_user(self, userdata, newuser) - local result - local errormessage = {} - - -- Try to write new or update existing data - if newuser == true then - result, errormessage = auth.new_settings(self, userdata.value.userid.value, userdata.value.username.value, userdata.value.password.value, userdata.value.password_confirm.value, userdata.value.roles.value) - if result == false then - userdata.errtxt = "Failed to create new user" - end - else - -- As a special case, settings that don't change are nil - result, errormessage = auth.change_settings(self, userdata.value.userid.value, userdata.value.username.value, userdata.value.password.value, userdata.value.password_confirm.value, userdata.value.roles.value) - if result == false then - userdata.errtxt = "Failed to save changes" - end - -- We can't return any nil values, so set then - local olduserdata = read_user(self, userdata.value.userid.value) - for name,value in pairs(userdata.value) do - if value.value == nil then - value.value = olduserdata.value[name].value - end - end - end - - userdata.value.password.value = "" - userdata.value.password_confirm.value = "" - - if result == false then - -- now, copy in the errors - for name,value in pairs(userdata.value) do - value.errtxt = errormessage[name] - end - end - - return userdata +function update_user(self, userdata) + return authenticator.change_settings(self, userdata) end function get_users(self) --List all users and their userinfo local users = {} - local userlist = auth.list_users(self) + local userlist = authenticator.list_users(self) for x,user in pairs(userlist) do - local userinfo = auth.get_userinfo(self,user) - users[user] = cfe({ - type="group", - label=user, - value={ userid=cfe ({ - label="User ID", - value=userinfo.userid, - }), - username=cfe ({ - label="Real name", - value=userinfo.username, - }), - roles=cfe ({ - label="Roles", - value=userinfo.roles, - option=auth.list_roles(), - type="multi", - }), - }, - - }) + users[user] = read_user(self, user) + users[user].value.password = nil + users[user].value.password_confirm = nil end return cfe({ type="group", value=users, label="User Configs" }) end function delete_user(self, userid) - local result, errmessages = auth.delete_user(self, userid) - local value - if result then value = "User Deleted" else value = "Failed to Delete User" end - local errtxt - if #errmessages > 0 then errtxt = errmessages:concat("\n") end - return cfe({ value=value, errtxt=errtxt, label="Delete User Result" }) + return authenticator.delete_user(self, userid) end diff --git a/app/acf-util/password-status-html.lsp b/app/acf-util/password-status-html.lsp index c16e0d6..8091316 100755 --- a/app/acf-util/password-status-html.lsp +++ b/app/acf-util/password-status-html.lsp @@ -30,6 +30,9 @@ io.write("</span>") <TD STYLE='border:none;'><B><?= user.value.roles.label ?></B></TD> <TD STYLE='border:none;'><?= table.concat(user.value.roles.value, " / ") ?></TD> </TR><TR> + <TD STYLE='border:none;'><B><?= user.value.dnsfiles.label ?></B></TD> + <TD STYLE='border:none;'><?= table.concat(user.value.dnsfiles.value, "<br>") ?></TD> + </TR><TR> <TD STYLE='border:none;'><B>Option</B></TD> <TD STYLE='border:none;'> [<A HREF='edituser?userid=<?= name ?>'>Edit this account</A>] diff --git a/app/acf-util/roles-model.lua b/app/acf-util/roles-model.lua index b2db9db..f064536 100644 --- a/app/acf-util/roles-model.lua +++ b/app/acf-util/roles-model.lua @@ -2,7 +2,7 @@ module (..., package.seeall) require("modelfunctions") -auth = require("authenticator-plaintext") +require("authenticator") require("roles") local get_all_permissions = function(self) @@ -26,7 +26,7 @@ end -- Return roles/permissions for specified user get_user_roles = function(self, userid) - rls = cfe({ type="list", value=auth.get_userinfo_roles(self, userid), label="Roles" }) + rls = cfe({ type="list", value=authenticator.get_userinfo_roles(self, userid).value, label="Roles" }) permissions = cfe({ type="table", value=roles.get_roles_perm(self.conf.appdir, rls.value), label="Permissions" }) return cfe({ type="group", value={roles=rls, permissions=permissions} }) end |