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 15:24:59 +0000
commit8ee996a56ff8ef0f42cb3b231e01f1f4f37a6c5d (patch)
tree7fcc5247568fe610f473b4931ac9ca596e915185
parent73639dd072204eb709245fe27529172975d8b802 (diff)
downloadacf-kamailio-8ee996a56ff8ef0f42cb3b231e01f1f4f37a6c5d.tar.bz2
acf-kamailio-8ee996a56ff8ef0f42cb3b231e01f1f4f37a6c5d.tar.xz
Add domain support to user management
(cherry picked from commit a040b1fd25d3a6bb65db161fa3c3b7a656fac9e0) Conflicts: kamailio-listusers-html.lsp
-rw-r--r--kamailio-listusers-html.lsp6
-rw-r--r--kamailio-model.lua55
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