summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTed Trask <ttrask01@yahoo.com>2013-09-27 03:29:27 +0000
committerTed Trask <ttrask01@yahoo.com>2013-09-27 03:30:10 +0000
commit3243d80d3a748917a6dbe54ed54f3a9a5602f2de (patch)
tree627faee905b68216c4cffaf1b526d478d47de674
parent5d8563ffe7ebfe596179baebc016ba7fa1905381 (diff)
downloadacf-kamailio-3243d80d3a748917a6dbe54ed54f3a9a5602f2de.tar.bz2
acf-kamailio-3243d80d3a748917a6dbe54ed54f3a9a5602f2de.tar.xz
Modified to use new acf-db library for viewing/editing database
Change model and controller to no longer use deprecated "module" function
-rw-r--r--Makefile3
-rw-r--r--kamailio-controller.lua48
-rw-r--r--kamailio-listtables-html.lsp24
-rw-r--r--kamailio-model.lua283
-rw-r--r--kamailio-viewtable-html.lsp55
5 files changed, 57 insertions, 356 deletions
diff --git a/Makefile b/Makefile
index 14119e2..cd7ec33 100644
--- a/Makefile
+++ b/Makefile
@@ -25,6 +25,9 @@ dist: $(tarball)
install:
mkdir -p "$(install_dir)"
cp -a $(APP_DIST) "$(install_dir)"
+ for i in $$(ls -1 $(DESTDIR)/$(acflibdir)/db-*.lsp); do\
+ ln -sf $$i $(install_dir)/$$(echo "$$(basename $$i)" | sed "s/db/$(APP_NAME)/");\
+ done
$(tarball): $(DISTFILES)
rm -rf $(P)
diff --git a/kamailio-controller.lua b/kamailio-controller.lua
index 331dfef..b94b94d 100644
--- a/kamailio-controller.lua
+++ b/kamailio-controller.lua
@@ -1,64 +1,52 @@
-module(..., package.seeall)
+local mymodule = {}
+
+require("dbcontrollerfunctions")
default_action = "status"
-function status(self)
+function mymodule.status(self)
return self.model.getstatus()
end
-function startstop(self)
+function mymodule.startstop(self)
return self.handle_form(self, self.model.get_startstop, self.model.startstop_service, self.clientdata)
end
-function listfiles(self)
+function mymodule.listfiles(self)
return self.model.list_files()
end
-function edit(self)
+function mymodule.edit(self)
return self.handle_form(self, self.model.get_filedetails, self.model.update_filedetails, self.clientdata, "Save", "Edit File", "File Saved")
end
-function listusers(self)
+function mymodule.listusers(self)
return self.model.list_users()
end
-function createuser(self)
+function mymodule.createuser(self)
return self.handle_form(self, self.model.get_new_user, self.model.create_new_user, self.clientdata, "Create", "Create New User")
end
-function deleteuser(self)
+function mymodule.deleteuser(self)
return self.handle_form(self, self.model.get_delete_user, self.model.delete_user, self.clientdata, "Delete", "Delete User")
--, "User deleted")
end
-function updateuser(self)
+function mymodule.updateuser(self)
return self.handle_form(self, self.model.get_user, self.model.update_user, self.clientdata, "Update", "Update User")
end
-function listtables(self)
- return self.model.list_tables()
-end
-
-function viewtable(self)
- return self.model.list_table_entries(self.clientdata.table)
-end
-
-function deletetableentry(self)
- return self.handle_form(self, self.model.get_delete_table_entry, self.model.delete_table_entry, self.clientdata, "Delete", "Delete Table Entry", "Table Entry deleted")
-end
-
-function updatetableentry(self)
- return self.handle_form(self, self.model.get_table_entry, self.model.update_table_entry, self.clientdata, "Update", "Update Table Entry", "Entry updated")
+function mymodule.createdatabase(self)
+ return self.handle_form(self, self.model.get_create_database, self.model.create_database, self.clientdata, "Create", "Create Database", "Database created")
end
-function createtableentry(self)
- return self.handle_form(self, self.model.get_new_table_entry, self.model.create_table_entry, self.clientdata, "Create", "Create New Table Entry", "Entry created")
+function mymodule.searchdatabase(self)
+ return self.model.search_database(self.clientdata.id, self.clientdata.value, self.clientdata.comparison)
end
-function createdatabase(self)
- return self.handle_form(self, self.model.get_create_database, self.model.create_database, self.clientdata, "Create", "Create Database", "Database created")
+for n,f in pairs(dbcontrollerfunctions) do
+ mymodule[n] = f
end
-searchdatabase = function( self )
- return self.model.search_database(self.clientdata.id, self.clientdata.value, self.clientdata.comparison)
-end
+return mymodule
diff --git a/kamailio-listtables-html.lsp b/kamailio-listtables-html.lsp
deleted file mode 100644
index fec3ac4..0000000
--- a/kamailio-listtables-html.lsp
+++ /dev/null
@@ -1,24 +0,0 @@
-<% local form, viewlibrary, page_info, session = ... %>
-<% require("htmlviewfunctions") %>
-<% html = require("acf.html") %>
-
-<% htmlviewfunctions.displaycommandresults({"createdatabase"}, session) %>
-
-<H1><%= html.html_escape(form.label) %></H1>
-<DL>
-<% for i,table in ipairs(form.value) do %>
- <li>
- <% if viewlibrary.check_permission("viewtable") then %>
- <%= html.link{value = "viewtable?table=" .. table, label=table} %>
- <% else %>
- <%= html.html_escape(table) %>
- <% end %>
-<% end %>
-<% if #form.value == 0 and viewlibrary.check_permission("createdatabase") then %>
-<DT>Create Database</DT><DD>
-<form action="<%= html.html_escape(page_info.script .. page_info.prefix .. page_info.controller .. "/createdatabase") %>">
-<input class="submit" type="submit" name="submit" value="Create"></DD>
-</form>
-</DD>
-<% end %>
-</DL>
diff --git a/kamailio-model.lua b/kamailio-model.lua
index 2243145..abfd19b 100644
--- a/kamailio-model.lua
+++ b/kamailio-model.lua
@@ -1,8 +1,9 @@
-module(..., package.seeall)
+local mymodule = {}
-- Load libraries
require("posix")
require("modelfunctions")
+require("dbmodelfunctions")
fs = require("acf.fs")
format = require("acf.format")
validator = require("acf.validator")
@@ -27,7 +28,7 @@ local function assert (v, m)
return v, m
end
-local databaseconnect = function()
+local databasecreate = function()
if not dbkam then
local engine
-- parse the kamctlrc file
@@ -54,11 +55,19 @@ local databaseconnect = function()
-- connect to data source
dbkam = db.create(engine, config.DBNAME or "openser", config.DBRWUSER or "openser", config.DBRWPW or "openserrw", config.DBHOST, config.DBPORT)
end
+end
+
+local databaseconnect = function()
+ if not dbkam then
+ databasecreate()
+ end
return dbkam.databaseconnect()
end
local databasedisconnect = function()
- return dbkam.databasedisconnect()
+ local result = dbkam.databasedisconnect()
+ dbkam = nil
+ return result
end
local runsqlcommand = function(sql)
@@ -99,27 +108,27 @@ end
-- ################################################################################
-- PUBLIC FUNCTIONS
-function get_startstop(self, clientdata)
+function mymodule.get_startstop(self, clientdata)
return modelfunctions.get_startstop(processname)
end
-function startstop_service(self, startstop, action)
+function mymodule.startstop_service(self, startstop, action)
return modelfunctions.startstop_service(startstop, action)
end
-function getstatus()
+function mymodule.getstatus()
return modelfunctions.getstatus(processname, packagename, "Kamailio Status")
end
-function get_filedetails(self, clientdata)
+function mymodule.get_filedetails(self, clientdata)
return modelfunctions.getfiledetails(clientdata.filename, is_valid_filename)
end
-function update_filedetails(self, filedetails)
+function mymodule.update_filedetails(self, filedetails)
return modelfunctions.setfiledetails(self, filedetails, is_valid_filename)
end
-function list_files()
+function mymodule.list_files()
local retval = {}
for file in fs.find(null, baseurl) do
local details = fs.stat(file)
@@ -165,7 +174,7 @@ local function parse_db_show(table)
return results, errtxt
end
-function list_users()
+function mymodule.list_users()
-- Database format: id | username | domain | password | email_address | ha1 | ha1b | rpid
local results = {}
local r, errtxt
@@ -184,7 +193,7 @@ function list_users()
return cfe({type="list", value=results, label="Kamailio Users", errtxt=errtxt})
end
-function get_new_user()
+function mymodule.get_new_user()
local user = {}
user.username = cfe({label="User Name", seq=1})
user.password = cfe({type="password", label="Password", seq=2})
@@ -193,7 +202,7 @@ function get_new_user()
return cfe({type="group", value=user, label="Kamailio User"})
end
-function create_new_user(self, user)
+function mymodule.create_new_user(self, user)
local success = validate_user(user)
if success then
local res, err = pcall(function()
@@ -211,13 +220,13 @@ function create_new_user(self, user)
return user
end
-function get_delete_user(self, clientdata)
+function mymodule.get_delete_user(self, clientdata)
local user = {}
user.username = cfe({label="User Name"})
return cfe({type="group", value=user, label="Delete User"})
end
-function delete_user(self, user)
+function mymodule.delete_user(self, user)
if user.value.username.value == "" then
user.value.username.errtxt = "Invalid username"
user.errtxt = "Failed to delete user"
@@ -234,7 +243,7 @@ function delete_user(self, user)
return user
end
-function get_user(self, clientdata)
+function mymodule.get_user(self, clientdata)
local user = get_new_user()
user.value.username.value = clientdata.username or ""
user.value.username.errtxt = "Invalid user"
@@ -249,7 +258,7 @@ function get_user(self, clientdata)
return user
end
-function update_user(self, user)
+function mymodule.update_user(self, user)
local success = validate_user(user)
if success then
local res, err = pcall(function()
@@ -267,244 +276,16 @@ function update_user(self, user)
return user
end
-function list_tables()
- local retval = {}
- local errtxt
- -- Get the devices from the DB
- local res, err = pcall(function()
- local connected = databaseconnect()
- retval = dbkam.listtables()
- if connected then databasedisconnect() end
- end)
- if not res and err then
- errtxt = err
- end
-
- return cfe({ type="list", value=retval, label="List of Database Tables", errtxt=errtxt })
-end
-
-function list_table_entries(table)
- local retval = {}
- retval.table = cfe({ value=table or "", label="Table" })
- retval.fields = cfe({ type="list", value={}, label="List of Table Fields" })
- retval.entries = cfe({ type="structure", value={}, label="List of Database Entries" })
- local errtxt
- -- Get the devices from the DB
- local res, err = pcall(function()
- local connected = databaseconnect()
- local tables = dbkam.listtables()
- retval.table.errtxt = "Table does not exist"
- errtxt = "Table does not exist"
- for i,t in ipairs(tables) do
- if t == table then
- retval.table.errtxt = nil
- errtxt = nil
- retval.entries.value = getselectresponse("SELECT * FROM "..dbkam.escape(table).." ORDER BY id ASC") or {}
- retval.fields.value = dbkam.listcolumns(table) or {}
- end
- end
- if connected then databasedisconnect() end
- end)
- if not res and err then
- errtxt = err
- end
-
- return cfe({ type="group", value=retval, label="Database Table Entries", errtxt=errtxt })
-end
-
-function get_new_table_entry(self, clientdata)
- local retval = {}
- retval.table = cfe({ value=clientdata.table or "", label="Table", errtxt="Table does not exist", readonly=true, seq=0 })
- local errtxt = "Table does not exist"
- if clientdata.table and clientdata.table ~= "" then
- local res, err = pcall(function()
- local connected = databaseconnect()
- local tables = dbkam.listtables()
- for i,t in ipairs(tables) do
- if t == clientdata.table then
- retval.table.errtxt = nil
- errtxt = nil
- break
- end
- end
- if not errtxt then
- local fields = dbkam.listcolumns(clientdata.table)
- for i,f in ipairs(fields) do
- retval[f] = cfe({ label=f, seq=i })
- end
- if retval.id then
- retval.id.type = "hidden"
- end
- end
- if connected then databasedisconnect() end
- end)
- if not res and err then
- errtxt = err
- end
- end
-
- return cfe({ type="group", value=retval, label="Database Table Entry", errtxt=errtxt })
-end
-
-function get_table_entry(self, clientdata)
- local retval = get_new_table_entry(self, clientdata)
- if not retval.value.table.errtxt and retval.value.id then
- retval.value.id.type = "text"
- local res, err = pcall(function()
- local connected = databaseconnect()
- retval.errtxt = "Entry does not exist"
- if retval.value.id then
- retval.value.id.value = clientdata.id or ""
- retval.value.id.errtxt = "Entry does not exist"
- if clientdata.id and clientdata.id ~= "" then
- local entry = getselectresponse("SELECT * FROM "..dbkam.escape(clientdata.table).." WHERE id='"..dbkam.escape(clientdata.id).."'")
- if entry and #entry > 0 then
- for n,v in pairs(entry[1]) do
- if retval.value[n] then retval.value[n].value = v end
- if n == "id" then
- retval.value.id.readonly = true
- retval.value.id.errtxt = nil
- retval.errtxt = nil
- end
- end
- end
- end
- end
- if connected then databasedisconnect() end
- end)
- if not res and err then
- retval.errtxt = err
- end
- end
-
- return retval
-end
-
-function create_table_entry(self, entry, action)
- return update_table_entry(self, entry, action, true)
-end
-
-function update_table_entry(self, entry, action, create)
- local success = true
- local errtxt
- -- Validate the settings
- -- relying on get_table_entry to do the validation of table
- if entry.value.table.value == "" or entry.value.table.errtxt then
- success = false
- entry.value.table.errtxt = "Table does not exist"
- end
- if not create then
- if not entry.value.id then
- success = false
- elseif not entry.value.id.value or entry.value.id.value == "" then
- success = false
- entry.value.id.errtxt = "Invalid id"
- end
- end
- if success then
- local res, err = pcall(function()
- local connected = databaseconnect()
- local tables = dbkam.listtables()
- success = false
- entry.value.table.errtxt = "Table does not exist"
- for i,t in ipairs(tables) do
- if t == entry.value.table.value then
- success = true
- entry.value.table.errtxt = nil
- break
- end
- end
- if success and not create then
- local sql = "SELECT * FROM "..dbkam.escape(entry.value.table.value).." WHERE id='"..dbkam.escape(entry.value.id.value).."'"
- local tmp = getselectresponse(sql)
- if not tmp or #tmp == 0 then
- success = false
- entry.value.id.errtxt = "Entry does not exist"
- errtxt = "Entry does not exist"
- end
- end
- if success then
- local names = {}
- local values = {}
- for n,v in pairs(entry.value) do
- if n ~= "table" and n ~= "id" then
- names[#names+1] = dbkam.escape(n)
- values[#values+1] = dbkam.escape(v.value)
- end
- end
- if create then
- sql = "INSERT INTO "..dbkam.escape(entry.value.table.value).." ("..table.concat(names, ", ")..") VALUES('"..table.concat(values, "', '").."')"
- else
- sql = "UPDATE "..dbkam.escape(entry.value.table.value).." SET ("..table.concat(names, ", ")..") = ('"..table.concat(values, "', '").."') WHERE id='"..dbkam.escape(entry.value.id.value).."'"
- end
- runsqlcommand(sql)
- end
- if connected then databasedisconnect() end
- end)
- if not res and err then
- success = false
- errtxt = err
- end
- end
- if not success then
- if create then
- entry.errtxt = errtxt or "Failed to create entry"
- else
- entry.errtxt = errtxt or "Failed to save entry"
- end
- end
- return entry
-end
-
-function get_delete_table_entry(self, clientdata)
- local retval = {}
- retval.table = cfe({ value=clientdata.table or "", label="Table", seq=0 })
- retval.id = cfe({ value=clientdata.id or "", label="ID", seq=1 })
- return cfe({ type="group", value=retval, label="Delete Database Table Entry" })
-end
-
-function delete_table_entry(self, entry)
- entry.errtxt = "Failed to delete table entry"
- if entry.value.table.value == "" then
- entry.value.table.errtxt = "Invalid table"
- elseif entry.value.id.value == "" then
- entry.value.id.errtxt = "Invalid entry"
- else
- local res, err = pcall(function()
- local connected = databaseconnect()
- entry.value.table.errtxt = "Invalid table"
- local tables = dbkam.listtables()
- for i,t in ipairs(tables) do
- if t == entry.value.table.value then
- entry.value.table.errtxt = nil
- break
- end
- end
- if not entry.value.table.errtxt then
- local sql = "DELETE FROM "..dbkam.escape(entry.value.table.value).." WHERE id='"..dbkam.escape(entry.value.id.value).."'"
- runsqlcommand(sql)
- entry.errtxt = nil
- end
- if connected then databasedisconnect() end
- end)
- if not res and err then
- entry.errtxt = err
- end
- end
-
- return entry
-end
-
-function get_create_database(self, clientdata)
+function mymodule.get_create_database(self, clientdata)
return cfe({ type="group", value={}, label="Create Database" })
end
-function create_database(self, create_db)
+function mymodule.create_database(self, create_db)
create_db.descr, create_db.errtxt = modelfunctions.run_executable({"kamdbctl", "create"}, true, 'y\ny\n')
return create_db
end
-function search_database(id, value, comparison)
+function mymodule.search_database(id, value, comparison)
local errtxt
retval = {}
retval.id = cfe({type="select", value=id or "", label="Table.Column", option={}, seq=1})
@@ -536,3 +317,11 @@ function search_database(id, value, comparison)
return cfe({type="group", value=retval, label="Database Search", errtxt=errtxt})
end
+for n,f in pairs(dbmodelfunctions) do
+ mymodule[n] = function(...)
+ databasecreate()
+ return f(dbkam, ...)
+ end
+end
+
+return mymodule
diff --git a/kamailio-viewtable-html.lsp b/kamailio-viewtable-html.lsp
deleted file mode 100644
index e1531d0..0000000
--- a/kamailio-viewtable-html.lsp
+++ /dev/null
@@ -1,55 +0,0 @@
-<% local form, viewlibrary, page_info, session = ... %>
-<% require("htmlviewfunctions") %>
-<% html = require("acf.html") %>
-
-<% htmlviewfunctions.displaycommandresults({"deletetableentry", "updatetableentry"}, session) %>
-<% htmlviewfunctions.displaycommandresults({"createtableentry"}, session, true) %>
-
-<H1><%= html.html_escape(form.label) %> - <%= html.html_escape(form.value.table.value) %></H1>
-<DL>
-<TABLE>
- <TR style="background:#eee;font-weight:bold;">
- <% if viewlibrary.check_permission("deletetableentry") or viewlibrary.check_permission("updatetableentry") then %>
- <TD style="padding-right:20px;white-space:nowrap;" class="header">Action</TD>
- <% end %>
- <% for i,f in ipairs(form.value.fields.value) do %>
- <TD style="padding-right:20px;white-space:nowrap;" class="header"><%= html.html_escape(f) %></TD>
- <% end %>
- </TR>
-
-<% for i,tableentry in ipairs(form.value.entries.value) do %>
- <TR>
- <% if viewlibrary.check_permission("deletetableentry") or viewlibrary.check_permission("updatetableentry") then %>
- <TD style="padding-right:20px;white-space:nowrap;">
- <% if viewlibrary.check_permission("updatetableentry") then %>
- <form action="updatetableentry" method="POST">
- <input class="hidden" type="hidden" name="table" value="<%= html.html_escape(form.value.table.value) %>">
- <input class="hidden" type="hidden" name="id" value="<%= html.html_escape(tableentry.id) %>">
- <input class="hidden" type="hidden" name="redir" value="<%= html.html_escape(page_info.orig_action.."?table="..form.value.table.value) %>">
- <input class="submit" type="submit" value="Update"></form>
- <% end %>
- <% if viewlibrary.check_permission("deletetableentry") then %>
- <form action="deletetableentry" method="POST">
- <input class="hidden" type="hidden" name="table" value="<%= html.html_escape(form.value.table.value) %>">
- <input class="hidden" type="hidden" name="id" value="<%= html.html_escape(tableentry.id) %>">
- <input class="submit" type="submit" name="submit" value="Delete"></form>
- <% end %>
- </TD>
- <% end %>
- <% for i,f in ipairs(form.value.fields.value) do %>
- <TD><%= html.html_escape(tableentry[f]) %></TD>
- <% end %>
- </TR>
-<% end %>
-</TABLE>
-<% if form.errtxt then %>
-<p class="error"><%= html.html_escape(form.errtxt) %></p>
-<% end %>
-<% if #form.value.entries.value == 0 then %>
-<p>No entries found</p>
-<% end %>
-</DL>
-
-<% if page_info.action == "viewtable" and viewlibrary and viewlibrary.dispatch_component and viewlibrary.check_permission("createtableentry") then
- viewlibrary.dispatch_component("createtableentry", {table=form.value.table.value})
-end %>