diff options
author | Ted Trask <ttrask01@yahoo.com> | 2013-09-27 03:29:27 +0000 |
---|---|---|
committer | Ted Trask <ttrask01@yahoo.com> | 2013-09-27 03:30:10 +0000 |
commit | 3243d80d3a748917a6dbe54ed54f3a9a5602f2de (patch) | |
tree | 627faee905b68216c4cffaf1b526d478d47de674 | |
parent | 5d8563ffe7ebfe596179baebc016ba7fa1905381 (diff) | |
download | acf-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-- | Makefile | 3 | ||||
-rw-r--r-- | kamailio-controller.lua | 48 | ||||
-rw-r--r-- | kamailio-listtables-html.lsp | 24 | ||||
-rw-r--r-- | kamailio-model.lua | 283 | ||||
-rw-r--r-- | kamailio-viewtable-html.lsp | 55 |
5 files changed, 57 insertions, 356 deletions
@@ -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 %> |