From 18d7e388c52151e094cd4cb73c7fde4bc1087264 Mon Sep 17 00:00:00 2001 From: Ted Trask Date: Fri, 10 Oct 2014 14:46:01 +0000 Subject: Add domain support to user management (cherry picked from commit a040b1fd25d3a6bb65db161fa3c3b7a656fac9e0) --- kamailio-listusers-html.lsp | 8 +++++-- kamailio-model.lua | 55 ++++++++++++++++++++++++++++++++------------- 2 files changed, 45 insertions(+), 18 deletions(-) diff --git a/kamailio-listusers-html.lsp b/kamailio-listusers-html.lsp index 47b7c2d..8cd0237 100644 --- a/kamailio-listusers-html.lsp +++ b/kamailio-listusers-html.lsp @@ -34,25 +34,29 @@ Action <% end %> User Name + Domain Password <% local username = cfe({ type="hidden", value="" }) %> +<% local domain = cfe({ type="hidden", value="" }) %> <% local redir = cfe({ type="hidden", value=page_info.orig_action }) %> <% for i,user in ipairs(form.value) do %> <% username.value = user.username %> + <% domain.value = user.domain %> <% if viewlibrary.check_permission("deleteuser") or viewlibrary.check_permission("updateuser") then %> <% if viewlibrary.check_permission("updateuser") then %> - <% htmlviewfunctions.displayitem(cfe({type="link", value={username=username, redir=redir}, label="", option="Update", action="updateuser"}), page_info, -1) %> + <% htmlviewfunctions.displayitem(cfe({type="link", value={username=username, domain=domain, redir=redir}, label="", option="Update", action="updateuser"}), page_info, -1) %> <% end %> <% if viewlibrary.check_permission("deleteuser") then %> - <% htmlviewfunctions.displayitem(cfe({type="form", value={username=username}, label="", option="Delete", action="deleteuser"}), page_info, -1) %> + <% htmlviewfunctions.displayitem(cfe({type="form", value={username=username, domain=domain}, label="", option="Delete", action="deleteuser"}), page_info, -1) %> <% end %> <% end %> <%= html.html_escape(user.username) %> + <%= html.html_escape(user.domain) %> <% if viewlibrary.check_permission("updateuser") then %> <%= html.html_escape(user.password) %> <% else %> diff --git a/kamailio-model.lua b/kamailio-model.lua index 1d54f82..23d2382 100644 --- a/kamailio-model.lua +++ b/kamailio-model.lua @@ -16,6 +16,7 @@ local baseurl = "/etc/kamailio" local kamctlrc_file = "/etc/kamailio/kamctlrc" local dbkam +local config -- ################################################################################ -- DATABASE FUNCTIONS @@ -32,7 +33,7 @@ local databasecreate = function() if not dbkam then local engine -- parse the kamctlrc file - local config = format.parse_ini_file(fs.read_file(kamctlrc_file), "") or {} + config = config or format.parse_ini_file(fs.read_file(kamctlrc_file), "") or {} if not config.DBENGINE then error("Database engine not specified, please setup one in the config script "..kamctlrc_file) end @@ -94,12 +95,20 @@ local function validate_user(user) if user.value.username.value == "" then user.value.username.errtxt = "Cannot be empty" success = false + elseif string.find(user.value.username.value, "@") then + user.value.username.errtxt = "Contains invalid character" + success = false + end + if user.value.domain.value == "" then + user.value.domain.errtxt = "Cannot be empty" + success = false end - if user.value.password.value == "" then + -- password will not be present for deleteuser + if user.value.password and 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 + if user.value.password and user.value.password.value ~= user.value.password_confirm.value then user.value.password_confirm.errtxt = "Must match password" success = false end @@ -183,7 +192,7 @@ function mymodule.list_users() for i,words in ipairs(r or {}) do if #words > 1 then local temp = {username = words[2], - --domain = words[3], + domain = words[3], password = words[4], --email_address = words[5] } @@ -197,9 +206,15 @@ end function mymodule.get_new_user() local user = {} user.username = cfe({label="User Name", seq=1}) - user.password = cfe({type="password", label="Password", seq=2}) - user.password_confirm = cfe({type="password", label="Password (confirm)", seq=3}) + user.domain = cfe({label="Domain", seq=2}) + user.password = cfe({type="password", label="Password", seq=3}) + user.password_confirm = cfe({type="password", label="Password (confirm)", seq=4}) --user.email_address = cfe({label="E-mail Address", seq=4}) + + -- get the default domain + config = config or format.parse_ini_file(fs.read_file(kamctlrc_file), "") or {} + user.domain.value = config.SIP_DOMAIN or "" + return cfe({type="group", value=user, label="Kamailio User"}) end @@ -208,7 +223,7 @@ function mymodule.create_new_user(self, user) if success then local res, err = pcall(function() local connected = databaseconnect() - user.descr, user.errtxt = modelfunctions.run_executable({"kamctl", "add", dbkam.escape(user.value.username.value), dbkam.escape(user.value.password.value)}) + user.descr, user.errtxt = modelfunctions.run_executable({"kamctl", "add", dbkam.escape(user.value.username.value.."@"..user.value.domain.value), dbkam.escape(user.value.password.value)}) if connected then databasedisconnect() end end) if not res and err then @@ -223,23 +238,29 @@ end function mymodule.get_delete_user(self, clientdata) local user = {} - user.username = cfe({label="User Name"}) + user.username = cfe({label="User Name", seq=1}) + user.domain = cfe({label="Domain", seq=2}) + + -- get the default domain + config = config or format.parse_ini_file(fs.read_file(kamctlrc_file), "") or {} + user.domain.value = config.SIP_DOMAIN or "" + return cfe({type="group", value=user, label="Delete User"}) end function mymodule.delete_user(self, user) - if user.value.username.value == "" then - user.value.username.errtxt = "Invalid username" - user.errtxt = "Failed to delete user" - else + local success = validate_user(user) + if success then local res, err = pcall(function() local connected = databaseconnect() - user.descr, user.errtxt = modelfunctions.run_executable({"kamctl", "rm", dbkam.escape(user.value.username.value)}) + user.descr, user.errtxt = modelfunctions.run_executable({"kamctl", "rm", dbkam.escape(user.value.username.value.."@"..user.value.domain.value)}) if connected then databasedisconnect() end end) if not res and err then user.errtxt = err end + else + user.errtxt = "Failed to delete user" end return user end @@ -248,11 +269,13 @@ function mymodule.get_user(self, clientdata) local user = mymodule.get_new_user() user.value.username.value = clientdata.username or "" user.value.username.errtxt = "Invalid user" - user.value.username.readonly = true + user.value.domain.value = clientdata.domain or "" local users = mymodule.list_users() for i,u in ipairs(users.value) do - if u.username == clientdata.username then + if u.username == clientdata.username and u.domain == clientdata.domain then user.value.username.errtxt = nil + user.value.username.readonly = true + user.value.domain.readonly = true break end end @@ -264,7 +287,7 @@ function mymodule.update_user(self, user) if success then local res, err = pcall(function() local connected = databaseconnect() - user.descr, user.errtxt = modelfunctions.run_executable({"kamctl", "passwd", dbkam.escape(user.value.username.value), dbkam.escape(user.value.password.value)}) + user.descr, user.errtxt = modelfunctions.run_executable({"kamctl", "passwd", dbkam.escape(user.value.username.value.."@"..user.value.domain.value), dbkam.escape(user.value.password.value)}) if connected then databasedisconnect() end end) if not res and err then -- cgit v1.2.3