diff options
-rw-r--r-- | kamailio-listusers-html.lsp | 6 | ||||
-rw-r--r-- | kamailio-model.lua | 55 |
2 files changed, 43 insertions, 18 deletions
diff --git a/kamailio-listusers-html.lsp b/kamailio-listusers-html.lsp index 0b7183f..c477fdb 100644 --- a/kamailio-listusers-html.lsp +++ b/kamailio-listusers-html.lsp @@ -34,6 +34,7 @@ <th>Action</th> <% end %> <th>User Name</th> + <th>Domain</th> <th>Password</th> </tr> </thead><tbody> @@ -42,14 +43,15 @@ <% if viewlibrary.check_permission("deleteuser") or viewlibrary.check_permission("updateuser") then %> <td> <% if viewlibrary.check_permission("updateuser") then %> - <%= html.link{value = "updateuser?username=" .. user.username.."&redir="..page_info.orig_action, label="Update "} %> + <%= html.link{value = "updateuser?username="..user.username.."&domain="..user.domain.."&redir="..page_info.orig_action, label="Update "} %> <% end %> <% if viewlibrary.check_permission("deleteuser") then %> - <%= html.link{value = "deleteuser?submit=true&username=" .. user.username, label="Delete "} %> + <%= html.link{value = "deleteuser?submit=true&username="..user.username.."&domain="..user.domain, label="Delete "} %> <% end %> </td> <% end %> <td><%= html.html_escape(user.username) %></td> + <td><%= html.html_escape(user.domain) %></td> <% if viewlibrary.check_permission("updateuser") then %> <td><%= html.html_escape(user.password) %></td> <% else %> diff --git a/kamailio-model.lua b/kamailio-model.lua index 7a7940f..2bf56b2 100644 --- a/kamailio-model.lua +++ b/kamailio-model.lua @@ -15,6 +15,7 @@ local baseurl = "/etc/kamailio" local kamctlrc_file = "/etc/kamailio/kamctlrc" local dbkam +local config -- ################################################################################ -- DATABASE FUNCTIONS @@ -31,7 +32,7 @@ local databaseconnect = 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 @@ -84,12 +85,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 @@ -173,7 +182,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] } @@ -187,9 +196,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 @@ -198,7 +213,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 @@ -213,23 +228,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 @@ -238,11 +259,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 @@ -254,7 +277,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 |