diff options
author | Ted Trask <ttrask01@yahoo.com> | 2009-11-17 17:52:35 +0000 |
---|---|---|
committer | Ted Trask <ttrask01@yahoo.com> | 2009-11-17 17:52:35 +0000 |
commit | 7570528cc84eb88a606858bed7cba166074af92e (patch) | |
tree | 5758129922c55dfb0bea33cbb2c6156e73efaad6 | |
parent | 5261ae2fa86ae090a2923b502646aa03c6a275a9 (diff) | |
download | acf-kamailio-7570528cc84eb88a606858bed7cba166074af92e.tar.bz2 acf-kamailio-7570528cc84eb88a606858bed7cba166074af92e.tar.xz |
Added ability to create/delete/update users (tested for postgres)
-rw-r--r-- | kamailio-controller.lua | 16 | ||||
-rw-r--r-- | kamailio-createuser-html.lsp | 15 | ||||
-rw-r--r-- | kamailio-listusers-html.lsp | 43 | ||||
-rw-r--r-- | kamailio-model.lua | 107 | ||||
l--------- | kamailio-updateuser-html.lsp | 1 | ||||
-rw-r--r-- | kamailio.menu | 1 | ||||
-rw-r--r-- | kamailio.roles | 5 |
7 files changed, 186 insertions, 2 deletions
diff --git a/kamailio-controller.lua b/kamailio-controller.lua index 45a8fd7..a4bff67 100644 --- a/kamailio-controller.lua +++ b/kamailio-controller.lua @@ -20,3 +20,19 @@ end function edit(self) return controllerfunctions.handle_form(self, function() return self.model.get_filedetails(self.clientdata.filename) end, self.model.update_filedetails, self.clientdata, "Save", "Edit File", "File Saved") end + +function listusers(self) + return self.model.list_users() +end + +function createuser(self) + return controllerfunctions.handle_form(self, self.model.get_new_user, self.model.create_new_user, self.clientdata, "Create", "Create New User") +end + +function deleteuser(self) + return self:redirect_to_referrer(self.model.delete_user(self.clientdata.username)) +end + +function updateuser(self) + return controllerfunctions.handle_form(self, function() return self.model.get_user(self.clientdata.username) end, self.model.update_user, self.clientdata, "Update", "Update User") +end diff --git a/kamailio-createuser-html.lsp b/kamailio-createuser-html.lsp new file mode 100644 index 0000000..fb05750 --- /dev/null +++ b/kamailio-createuser-html.lsp @@ -0,0 +1,15 @@ +<% local form, viewlibrary, page_info = ... +require("viewfunctions") +%> + +<H1><%= html.html_escape(form.label) %></H1> +<% + form.action = page_info.script .. page_info.prefix .. page_info.controller .. "/" .. page_info.action + form.value.password.type = "password" + form.value.password_confirm.type = "password" + if page_info.action == "updateuser" then + form.value.username.readonly = true + end + local order = {"username", "password", "password_confirm", "email_address"} + displayform(form, order) +%> diff --git a/kamailio-listusers-html.lsp b/kamailio-listusers-html.lsp new file mode 100644 index 0000000..0c010c5 --- /dev/null +++ b/kamailio-listusers-html.lsp @@ -0,0 +1,43 @@ +<% local form, viewlibrary, page_info, session = ... %> +<% require("viewfunctions") %> + +<% displaycommandresults({"deleteuser", "updateuser"}, session) %> +<% displaycommandresults({"createuser"}, session, true) %> + +<H1><%= html.html_escape(form.label) %></H1> +<DL> +<TABLE> + <TR style="background:#eee;font-weight:bold;"> + <% if session.permissions[page_info.controller].deleteuser or session.permissions[page_info.controller].updateuser then %> + <TD style="padding-right:20px;white-space:nowrap;" class="header">Action</TD> + <% end %> + <TD style="padding-right:20px;white-space:nowrap;" class="header">User Name</TD> + <TD style="white-space:nowrap;" class="header">Password</TD> + </TR> + +<% for i,user in ipairs(form.value) do %> + <TR> + <% if session.permissions[page_info.controller].deleteuser or session.permissions[page_info.controller].updateuser then %> + <TD style="padding-right:20px;white-space:nowrap;"> + <% if session.permissions[page_info.controller].updateuser then %> + <%= html.link{value = "updateuser?username=" .. user.username.."&redir="..page_info.orig_action, label="Update "} %> + <% end %> + <% if session.permissions[page_info.controller].deleteuser then %> + <%= html.link{value = "deleteuser?username=" .. user.username, label="Delete "} %> + <% end %> + </TD> + <% end %> + <TD><%= html.html_escape(user.username) %></TD> + <% if session.permissions[page_info.controller].updateuser then %> + <TD><%= html.html_escape(user.password) %></TD> + <% else %> + <TD>******</TD> + <% end %> + </TR> +<% end %> +</TABLE> +</DL> + +<% if viewlibrary and viewlibrary.dispatch_component and session.permissions[page_info.controller].createuser then + viewlibrary.dispatch_component("createuser") +end %> diff --git a/kamailio-model.lua b/kamailio-model.lua index 4915787..e6262ba 100644 --- a/kamailio-model.lua +++ b/kamailio-model.lua @@ -20,6 +20,23 @@ local is_valid_filename = function(filename) return validator.is_valid_filename(filename) and string.match(dirname, baseurl) and not string.match(dirname, "%.%.") end +local function validate_user(user) + local success = true + if user.value.username.value == "" then + user.value.username.errtxt = "Cannot be empty" + success = false + end + if user.value.password.value == "" then + user.value.password.errtxt = "Cannot be empty" + success = false + end + if user.value.password.value ~= user.value.password_confirm.value then + user.value.password_confirm.errtxt = "Must match password" + success = false + end + return success, user +end + -- ################################################################################ -- PUBLIC FUNCTIONS @@ -51,3 +68,93 @@ function list_files() table.sort(retval, function(a,b) return a.filename < b.filename end) return cfe({ type="structure", value=retval, label="List of Kamailio files" }) end + +function list_users() + -- Database format: id | username | domain | password | email_address | ha1 | ha1b | rpid + local cmd = path .. "kamctl db show subscriber" + local f = io.popen(cmd) + -- These settings work for Postgres database + local skiplines = 2 + local delimiter = "%s*|%s*" + local results = {} + for line in f:lines() do + if skiplines > 0 then + skiplines = skiplines-1 + else + local words = format.string_to_table(line, delimiter) + if #words > 1 then + local temp = {username = words[2], + --domain = words[3], + password = words[4], + --email_address = words[5] + } + results[#results+1] = temp + end + end + end + f:close() + table.sort(results, function(a,b) return a.username < b.username end) + return cfe({type="list", value=results, label="Kamailio Users"}) +end + +function get_new_user() + local user = {} + user.username = cfe({label="User Name"}) + user.password = cfe({label="Password"}) + user.password_confirm = cfe({label="Password (confirm)"}) + --user.email_address = cfe({label="E-mail Address"}) + return cfe({type="group", value=user, label="Kamailio User"}) +end + +function create_new_user(user) + local success = validate_user(user) + if success then + local cmd = path .. "kamctl add "..format.escapespecialcharacters(user.value.username.value).." "..format.escapespecialcharacters(user.value.password.value) + --if user.value.email_address.value ~= "" then + -- cmd = cmd.." "..format.escapespecialcharacters(user.value.email_address.value) + --end + local f = io.popen(cmd) + user.descr = f:read("*a") + f:close() + else + user.errtxt = "Failed to create new user" + end + + return user +end + +function delete_user(username) + local cmd = path .. "kamctl rm "..format.escapespecialcharacters(username) + local f = io.popen(cmd) + local result = f:read("*a") + f:close() + return cfe({value=result, label="Delete User Result"}) +end + +function get_user(username) + local user = get_new_user() + user.value.username.value = username + user.value.username.errtxt = "Invalid user" + local users = list_users() + for i,u in ipairs(users.value) do + if u.username == username then + user.value.username.errtxt = nil + break + end + end + return user +end + +function update_user(user) + local success = validate_user(user) + if success then + local cmd = path .. "kamctl passwd "..format.escapespecialcharacters(user.value.username.value).." "..format.escapespecialcharacters(user.value.password.value) + local f = io.popen(cmd) + user.descr = f:read("*a") + f:close() + else + user.errtxt = "Failed to update user" + end + + return user +end diff --git a/kamailio-updateuser-html.lsp b/kamailio-updateuser-html.lsp new file mode 120000 index 0000000..cd878eb --- /dev/null +++ b/kamailio-updateuser-html.lsp @@ -0,0 +1 @@ +kamailio-createuser-html.lsp
\ No newline at end of file diff --git a/kamailio.menu b/kamailio.menu index f806819..607387f 100644 --- a/kamailio.menu +++ b/kamailio.menu @@ -1,4 +1,5 @@ # Prefix and controller are already known at this point # Cat Group Tab Action Applications 86Kamailio Status status +Applications 86Kamailio Users listusers Applications 86Kamailio Expert listfiles diff --git a/kamailio.roles b/kamailio.roles index b40dd8a..111828b 100644 --- a/kamailio.roles +++ b/kamailio.roles @@ -1,3 +1,4 @@ -USER=kamailio:status,kamailio:startstop +USER=kamailio:status,kamailio:startstop,kamailio:listusers +EDITOR=kamailio:createuser,kamailio:updateuser,kamailio:deleteuser EXPERT=kamailio:listfiles,kamailio:edit -ADMIN=kamailio:status,kamailio:startstop,kamailio:listfiles,kamailio:edit +ADMIN=kamailio:status,kamailio:startstop,kamailio:listusers,kamailio:createuser,kamailio:updateuser,kamailio:deleteuser,kamailio:listfiles,kamailio:edit |