summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTed Trask <ttrask01@yahoo.com>2014-10-10 14:46:01 +0000
committerTed Trask <ttrask01@yahoo.com>2014-10-10 14:46:56 +0000
commit18d7e388c52151e094cd4cb73c7fde4bc1087264 (patch)
tree4b163bcccb4aed6f69b543643492ad961b34f1cc
parente47c4e42241aa14906b9d5106515abced41e97e3 (diff)
downloadacf-kamailio-18d7e388c52151e094cd4cb73c7fde4bc1087264.tar.bz2
acf-kamailio-18d7e388c52151e094cd4cb73c7fde4bc1087264.tar.xz
Add domain support to user management
(cherry picked from commit a040b1fd25d3a6bb65db161fa3c3b7a656fac9e0)
-rw-r--r--kamailio-listusers-html.lsp8
-rw-r--r--kamailio-model.lua55
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 @@
<th>Action</th>
<% end %>
<th>User Name</th>
+ <th>Domain</th>
<th>Password</th>
</tr>
</thead><tbody>
<% 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 %>
<tr>
<% username.value = user.username %>
+ <% domain.value = user.domain %>
<% if viewlibrary.check_permission("deleteuser") or viewlibrary.check_permission("updateuser") then %>
<td>
<% 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 %>
</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 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