summaryrefslogtreecommitdiffstats
path: root/kamailio-model.lua
diff options
context:
space:
mode:
Diffstat (limited to 'kamailio-model.lua')
-rw-r--r--kamailio-model.lua55
1 files changed, 39 insertions, 16 deletions
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