From 0874f88bc25066248c28b16d3bbf1ab5cd1f2611 Mon Sep 17 00:00:00 2001 From: Zach LeBar Date: Wed, 21 Mar 2012 15:06:32 +0000 Subject: Change all -controller.lua files to use new handle_form() functions found in acf_www-controller.lua instead of the controllerfunctions.lua version and also instead of redirect_to_referrer(). Made corresponding changes to vmail-model .lua to make everything work. --- cron-controller.lua | 14 +++---- cron-listjobs-html.lsp | 2 +- cron-model.lua | 37 +++++++++++------- cron-startstop-html.lsp | 1 - hostname-controller.lua | 4 +- interfaces-controller.lua | 17 ++++---- interfaces-model.lua | 98 +++++++++++++++++++++++++++++++++++------------ interfaces-read-html.lsp | 8 ++-- modules-controller.lua | 6 +-- modules-edit-html.lsp | 2 +- modules-model.lua | 14 +++++-- password-controller.lua | 4 +- rc-controller.lua | 10 ++--- rc-model.lua | 27 +++++-------- rc-status-html.lsp | 2 +- syslog-controller.lua | 7 ++-- syslog-model.lua | 14 ++++--- syslog-startstop-html.lsp | 1 - 18 files changed, 160 insertions(+), 108 deletions(-) delete mode 120000 cron-startstop-html.lsp delete mode 120000 syslog-startstop-html.lsp diff --git a/cron-controller.lua b/cron-controller.lua index a420cc9..8c40b13 100644 --- a/cron-controller.lua +++ b/cron-controller.lua @@ -1,8 +1,6 @@ -- the cron controller module (..., package.seeall) -require("controllerfunctions") - default_action = "status" function status(self) @@ -10,7 +8,7 @@ function status(self) end function startstop(self) - return controllerfunctions.handle_startstop(self, self.model.startstop_service, self.clientdata) + return self.handle_form(self, self.model.get_startstop, self.model.startstop_service, self.clientdata) end function listjobs(self) @@ -18,21 +16,21 @@ function listjobs(self) end function editjob(self) - return controllerfunctions.handle_form(self, function() return self.model.read_job(self.clientdata.name) end, self.model.update_job, self.clientdata, "Save", "Edit Job", "Job Saved") + return self.handle_form(self, self.model.read_job, self.model.update_job, self.clientdata, "Save", "Edit Job", "Job Saved") end function deletejob(self) - return self:redirect_to_referrer(self.model.delete_job(self.clientdata.name)) + return self.handle_form(self, self.model.get_delete_job, self.model.delete_job, self.clientdata, "Delete", "Delete Job", "Job Deleted") end function movejob(self) - return controllerfunctions.handle_form(self, self.model.get_move_job, self.model.move_job, self.clientdata, "Move", "Move Job", "Job Moved") + return self.handle_form(self, self.model.get_move_job, self.model.move_job, self.clientdata, "Move", "Move Job", "Job Moved") end function createjob(self) - return controllerfunctions.handle_form(self, self.model.create_new_job, self.model.create_job, self.clientdata, "Create", "Create New Job", "New Job Created") + return self.handle_form(self, self.model.create_new_job, self.model.create_job, self.clientdata, "Create", "Create New Job", "New Job Created") end function expert(self) - return controllerfunctions.handle_form(self, self.model.read_configfile, self.model.update_configfile, self.clientdata, "Save", "Edit Config File", "Configuration Set") + return self.handle_form(self, self.model.read_configfile, self.model.update_configfile, self.clientdata, "Save", "Edit Config File", "Configuration Set") end diff --git a/cron-listjobs-html.lsp b/cron-listjobs-html.lsp index 6cc4463..08c4415 100644 --- a/cron-listjobs-html.lsp +++ b/cron-listjobs-html.lsp @@ -43,7 +43,7 @@ No jobs <%= html.html_escape(string.gsub(job, "^.*/", "")) %> <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/editjob?name="..job.."&redir="..page_info.orig_action, label="Edit "} %> - <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/deletejob?name="..job, label="Delete "} %> + <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/deletejob?name="..job.."&submit=true", label="Delete "} %> <% createmoveform(job, tabl.period) %> diff --git a/cron-model.lua b/cron-model.lua index fb3ecb7..35f631b 100644 --- a/cron-model.lua +++ b/cron-model.lua @@ -2,9 +2,9 @@ module (..., package.seeall) require("posix") require("modelfunctions") -require("format") -require("fs") -require("validator") +format = require("acf.format") +fs = require("acf.fs") +validator = require("acf.validator") local configfile = "/etc/crontabs/root" local processname = "cron" @@ -65,8 +65,12 @@ end -- ################################################################################ -- PUBLIC FUNCTIONS -function startstop_service(action) - return modelfunctions.startstop_service(processname, action) +function get_startstop(clientdata) + return modelfunctions.get_startstop(processname) +end + +function startstop_service(startstop, action) + return modelfunctions.startstop_service(startstop, action) end function getstatus() @@ -77,22 +81,27 @@ function listjobs() return cfe({ type="structure", value=list_jobs(), label="Cron Jobs" }) end -function read_job(filename) - return modelfunctions.getfiledetails(filename, validate_filename) +function read_job(clientdata) + return modelfunctions.getfiledetails(clientdata.name, validate_filename) end function update_job(filedetails) return modelfunctions.setfiledetails(filedetails, validate_filename) end -function delete_job(filename) - local retval = cfe({ label="Delete Job Result", errtxt="Invalid file" }) - if validate_filename(filename) then - os.remove(filename) - retval.value = "Job File Deleted" - retval.errtxt = nil +function get_delete_job(clientdata) + local result = {} + result.filename = cfe({ value=clientdata.name or "", label="File Name" }) + return cfe({ type="group", value=result, label="Delete Cron Job" }) +end + +function delete_job(deleterequest) + deleterequest.errtxt = "Invalid File" + if validate_filename(deleterequest.value.filename.value) then + os.remove(deleterequest.value.filename.value) + deleterequest.errtxt = nil end - return retval + return deleterequest end function get_move_job() diff --git a/cron-startstop-html.lsp b/cron-startstop-html.lsp deleted file mode 120000 index 0ea2627..0000000 --- a/cron-startstop-html.lsp +++ /dev/null @@ -1 +0,0 @@ -../startstop-html.lsp \ No newline at end of file diff --git a/hostname-controller.lua b/hostname-controller.lua index 623373f..c68c5c3 100644 --- a/hostname-controller.lua +++ b/hostname-controller.lua @@ -1,8 +1,6 @@ -- the hostname controller module (..., package.seeall) -require("controllerfunctions") - default_action = "read" read = function(self) @@ -10,5 +8,5 @@ read = function(self) end edit = function(self) - return controllerfunctions.handle_form(self, self.model.read_name, self.model.update_name, self.clientdata, "Save", "Edit Hostname", "Hostname Set") + return self.handle_form(self, self.model.read_name, self.model.update_name, self.clientdata, "Save", "Edit Hostname", "Hostname Set") end diff --git a/interfaces-controller.lua b/interfaces-controller.lua index 02b2a3c..c27b732 100644 --- a/interfaces-controller.lua +++ b/interfaces-controller.lua @@ -1,6 +1,4 @@ -- the interfaces controller -require("controllerfunctions") - module (..., package.seeall) default_action = "read" @@ -14,29 +12,30 @@ read = function (self) end update = function(self) - return controllerfunctions.handle_form(self, function() return self.model.get_iface_by_name(self.clientdata.name or "") end, self.model.update_iface, self.clientdata, "Save", "Update Interface", "Interface updated") + return self.handle_form(self, self.model.get_iface_by_name, self.model.update_iface, self.clientdata, "Save", "Update Interface", "Interface updated") end delete = function(self) - return self:redirect_to_referrer(self.model.delete_iface_by_name(self.clientdata.name or "")) + return self.handle_form(self, self.model.get_delete_iface_by_name, self.model.delete_iface_by_name, self.clientdata, "Delete", "Delete Interface", "Interface deleted") end ifup = function(self) - return self:redirect_to_referrer(self.model.ifup_by_name(self.clientdata.name or "")) + return self.handle_form(self, self.model.get_ifup_by_name, self.model.ifup_by_name, self.clientdata, "ifup", "Interface Up", "Interface up") end ifdown = function(self) - return self:redirect_to_referrer(self.model.ifdown_by_name(self.clientdata.name or "")) + return self.handle_form(self, self.model.get_ifdown_by_name, self.model.ifdown_by_name, self.clientdata, "ifdown", "Interface Down", "Interface down") end +-- FIXME: 'Method' select box appeared via JS ... figure out how best to implement that when using the standard view create = function(self) - return controllerfunctions.handle_form(self, function() return self.model.get_iface(self.clientdata.family, self.clientdata.method) end, self.model.create_iface, self.clientdata, "Create", "Create Interface", "Interface created") + return self.handle_form(self, self.model.get_iface, self.model.create_iface, self.clientdata, "Create", "Create Interface", "Interface created") end editintfile = function(self) - return controllerfunctions.handle_form(self, self.model.get_file, self.model.write_file, self.clientdata, "Save", "Edit Interfaces file", "File saved") + return self.handle_form(self, self.model.get_file, self.model.write_file, self.clientdata, "Save", "Edit Interfaces file", "File saved") end restart = function(self) - return self:redirect_to_referrer(self.model.restartnetworking()) + return self.handle_form(self, self.model.get_restartnetworking, self.model.restartnetworking, self.clientdata, "Restart", "Restart Networking") end diff --git a/interfaces-model.lua b/interfaces-model.lua index 04a1d6c..5d3f9fe 100644 --- a/interfaces-model.lua +++ b/interfaces-model.lua @@ -3,9 +3,10 @@ module (..., package.seeall) require("modelfunctions") -require("fs") -require("format") +fs = require("acf.fs") +format = require("acf.format") +local processname = "networking" local filename = "/etc/network/interfaces" local path = "PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin " @@ -18,15 +19,15 @@ local path = "PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin -- directory for all we know) The public module functions are defined -- further below -local iface = { tags = { comment = {type="longtext", label="Comments"}, - auto = {type="boolean", value=false, label="Auto bring-up"}, - name = {label="Interface Name"}, - family = {type="select", label="Address Family", option={"inet", "ipx", "inet6"}}, - ['pre-up'] = {type="longtext", label="'pre-up' actions"}, - up = {type="longtext", label="'up' actions"}, - down = {type="longtext", label="'down' actions"}, - ['post-down'] = {type="longtext", label="'post-down' actions"} }, - method_tag = {type="select", label="Method"}, +local iface = { tags = { comment = {type="longtext", label="Comments", seq=2}, + auto = {type="boolean", value=false, label="Auto bring-up", seq=3}, + name = {label="Interface Name", seq=1}, + family = {type="select", label="Address Family", option={"inet", "ipx", "inet6"}, seq=4}, + ['pre-up'] = {type="longtext", label="'pre-up' actions", seq=6}, + up = {type="longtext", label="'up' actions", seq=7}, + down = {type="longtext", label="'down' actions", seq=8}, + ['post-down'] = {type="longtext", label="'post-down' actions", seq=9} }, + method_tag = {type="select", label="Method", seq=5}, family_methods = { inet = {"loopback", "static", "manual", "dhcp", "bootp", "ppp", "wvdial"}, ipx = {"static", "dynamic"}, @@ -366,15 +367,41 @@ end get_all_interfaces = iface.unpack_interfaces -get_iface_by_name = iface.read +get_iface_by_name = function(clientdata) + return iface.read(clientdata.name or "") +end -get_iface = iface.iface_type +get_iface = function(clientdata) + return iface.iface_type(clientdata.family, clientdata.method) +end create_iface = iface.add_after update_iface = iface.update -delete_iface_by_name = iface.delete +get_delete_iface_by_name = function(clientdata) + local result = {} + result.iface = cfe({ value=clientdata.name or "", label="Interface Name" }) + + return cfe({ type="group", value=result, label="Interface Name" }) +end + +delete_iface_by_name = function(deleterequest) + + if deleterequest.value.iface.value and deleterequest.value.iface.value ~= "" then + local res, err = iface.delete(deleterequest.value.iface.value) + end + + if res then + deleterequest.descr = res + end + + if not res and err then + delterequest.errtxt = err + end + + return deleterequest +end get_status = function () local status = {} @@ -446,35 +473,58 @@ get_addresses = function() return cfe({ type="structure", value=retval, label="Interface IP Addresses" }) end -ifup_by_name = function (name) - name = name or "" +get_ifup_by_name = function(clientdata) + local result = {} + result.iface = cfe({ value=clientdata.name or "", label="Interface Name" }) + + return cfe({ type="group", value=result, label="Interface Name" }) +end + +ifup_by_name = function (ifuprequest) + name = ifuprequest.value.iface.value or "" local cmd = path.."ifup "..name local f = io.popen(format.escapespecialcharacters(cmd)) local cmdresult = f:read("*a") f:close() if cmdresult == "" then - cmdresult = "Interface up" + ifuprequest.descr = "Interface up" end - return cfe({ type="longtext", value=cmdresult, label="ifup "..name }) + return ifuprequest end +get_ifdown_by_name = function(clientdata) + local result = {} + result.iface = cfe({ value=clientdata.name or "", label="Interface Name" }) -ifdown_by_name = function (name) - name = name or "" + return cfe({ type="group", value=result, label="Interface Name" }) +end + +ifdown_by_name = function (ifdownrequest) + name = ifdownrequest.value.iface.value or "" local cmd = path.."ifdown "..name local f = io.popen(format.escapespecialcharacters(cmd)) local cmdresult = f:read("*a") f:close() if cmdresult == "" then - cmdresult = "Interface down" + ifdownrequest.descr = "Interface down" end - return cfe({ type="longtext", value=cmdresult, label="ifdown "..name }) + return ifdownrequest +end + +get_restartnetworking = function(clientdata) + --return modelfunctions.get_startstop(processname) + local actions = {} + actions[1] = "restart" + local service = cfe({ type="hidden", value="networking", label="Service Name" }) + local startstop = cfe({ type="group", label="Reload Modules", value={servicename=service}, option=actions, errtxt=errtxt }) + + return startstop end -restartnetworking = function() - return modelfunctions.startstop_service("networking", "restart") +restartnetworking = function(startstop) + return modelfunctions.startstop_service(startstop, "restart") end diff --git a/interfaces-read-html.lsp b/interfaces-read-html.lsp index 922e96a..6c48e19 100644 --- a/interfaces-read-html.lsp +++ b/interfaces-read-html.lsp @@ -38,13 +38,13 @@ end %> Edit <% end if viewlibrary.check_permission("delete") then %> - Delete + Delete <% end if viewlibrary.check_permission("ifup") then %> - ifup + ifup <% end if viewlibrary.check_permission("ifdown") then %> - ifdown + ifdown <% end %> @@ -56,5 +56,5 @@ end %>

WARNING!!! Restarting networking may cause the ACF web interface to stop functioning. Try refreshing this page after restarting. If that fails, you may have to use terminal access to recover.

Restart Networking
-
">
+
">
diff --git a/modules-controller.lua b/modules-controller.lua index dc7735c..8b162a7 100644 --- a/modules-controller.lua +++ b/modules-controller.lua @@ -1,4 +1,4 @@ --- the interfaces controller +-- the modules controller require("controllerfunctions") module (..., package.seeall) @@ -10,9 +10,9 @@ status = function(self) end edit = function(self) - return controllerfunctions.handle_form(self, self.model.read_file, self.model.write_file, self.clientdata, "Save", "Edit Modules file", "File saved") + return self.handle_form(self, self.model.read_file, self.model.write_file, self.clientdata, "Save", "Edit Modules file", "File saved") end reload = function(self) - return self:redirect_to_referrer(self.model.reloadmodules()) + return self.handle_form(self, self.model.get_reloadmodules, self.model.reloadmodules, self.clientdata, "Reload", "Reload Modules") end diff --git a/modules-edit-html.lsp b/modules-edit-html.lsp index 5a96422..9e48975 100644 --- a/modules-edit-html.lsp +++ b/modules-edit-html.lsp @@ -38,5 +38,5 @@ displayitem(form.value.mtime)

Reload Modules

Reload Modules
-
">
+
">
diff --git a/modules-model.lua b/modules-model.lua index a21a46b..c5b1a39 100644 --- a/modules-model.lua +++ b/modules-model.lua @@ -20,7 +20,15 @@ function write_file(filedetails) return modelfunctions.setfiledetails(filedetails, {configfile}) end -function reloadmodules() - local retval = modelfunctions.startstop_service("modules", "restart", {"restart"}) - return retval.value.result +function get_reloadmodules(clientdata) + local actions = {} + actions[1] = "restart" + local service = cfe({ type="hidden", value="modules", label="Service Name" }) + local startstop = cfe({ type="group", label="Reload Modules", value={servicename=service}, option=actions, errtxt=errtxt }) + + return startstop +end + +function reloadmodules(startstop) + return modelfunctions.startstop_service(startstop, "restart") end diff --git a/password-controller.lua b/password-controller.lua index 3060e76..9982ada 100644 --- a/password-controller.lua +++ b/password-controller.lua @@ -1,10 +1,8 @@ -- the password controller module (..., package.seeall) -require("controllerfunctions") - default_action = "edit" edit = function (self) - return controllerfunctions.handle_form(self, self.model.read_password, self.model.update_password, self.clientdata, "Save", "Set System Password", "Password Set") + return self.handle_form(self, self.model.read_password, self.model.update_password, self.clientdata, "Save", "Set System Password", "Password Set") end diff --git a/rc-controller.lua b/rc-controller.lua index ba235b6..5030449 100644 --- a/rc-controller.lua +++ b/rc-controller.lua @@ -1,6 +1,6 @@ -module (..., package.seeall) +-- the rc controller -require("controllerfunctions") +module (..., package.seeall) default_action = "status" @@ -9,11 +9,9 @@ status = function(self) end edit = function(self) - return controllerfunctions.handle_form(self, - function() return self.model.read_runlevels(self.clientdata.servicename) end, - self.model.update_runlevels, self.clientdata, "Save", "Edit Service Runlevels") + return self.handle_form(self, self.model.read_runlevels, self.model.update_runlevels, self.clientdata, "Save", "Edit Service Runlevels") end startstop = function(self) - return self:redirect_to_referrer(self.model.handle_startstop(self.clientdata.servicename, self.clientdata.action)) + return self.handle_form(self, self.model.get_startstop, self.model.startstop_service, self.clientdata) end diff --git a/rc-model.lua b/rc-model.lua index 215d02d..1046a96 100644 --- a/rc-model.lua +++ b/rc-model.lua @@ -2,7 +2,7 @@ module (..., package.seeall) require("processinfo") require("modelfunctions") -require("fs") +fs = require("acf.fs") require("posix") local configpath = "/etc/runlevels/" @@ -30,7 +30,8 @@ status = function() return cfe({ type="structure", value=config, label="Init Runlevels" }) end -read_runlevels = function(servicename) +read_runlevels = function(clientdata) + local servicename = clientdata.servicename local value = {} value.servicename = cfe({ value=servicename or "", label="Service Name" }) value.runlevels = cfe({ type="multi", value={}, label="Service Runlevels", option=runlevels }) @@ -83,19 +84,11 @@ update_runlevels = function(service) return service end -handle_startstop = function(servicename, action) - local result = "" - local errtxt - local actions,errtxt = processinfo.daemon_actions(servicename) - if actions then - errtxt = nil - local reverseactions = {} - for i,act in ipairs(actions) do reverseactions[string.lower(act)] = i end - if reverseactions[string.lower(action)] then - result, errtxt = processinfo.daemoncontrol(servicename, action) - else - errtxt = "Unknown command!" - end - end - return cfe({ label="Start/Stop result", value=result, errtxt=errtxt }) +function get_startstop(clientdata) + return modelfunctions.get_startstop(clientdata.servicename) end + +function startstop_service(startstop) + return modelfunctions.startstop_service(startstop, clientdata.action) +end + diff --git a/rc-status-html.lsp b/rc-status-html.lsp index b04913a..119c306 100644 --- a/rc-status-html.lsp +++ b/rc-status-html.lsp @@ -23,7 +23,7 @@ for i,item in ipairs(view.value) do %> <% end %> <% if viewlibrary.check_permission("startstop") and item.actions then for i,a in ipairs(item.actions) do - print(html.link{value="startstop?servicename="..item.servicename.."&action="..a, label=a:gsub("^%l", string.upper).." " }) + print(html.link{value="startstop?servicename="..item.servicename.."&redir=status&submit=true&action="..a, label=a:gsub("^%l", string.upper).." " }) end end %> <%= html.html_escape(item.servicename) %> diff --git a/syslog-controller.lua b/syslog-controller.lua index 8a8209d..3367a55 100644 --- a/syslog-controller.lua +++ b/syslog-controller.lua @@ -1,5 +1,4 @@ module(..., package.seeall) -require("controllerfunctions") default_action = "loginfo" @@ -8,15 +7,15 @@ function loginfo(self) end function config(self) - return controllerfunctions.handle_form(self, self.model.getconfig, self.model.updateconfig, self.clientdata, "Save", "Edit config", "Configuration Set") + return self.handle_form(self, self.model.getconfig, self.model.updateconfig, self.clientdata, "Save", "Edit config", "Configuration Set") end function expert(self) - return controllerfunctions.handle_form(self, self.model.get_filedetails, self.model.update_filedetails, self.clientdata, "Save", "Edit config", "Configuration Set") + return self.handle_form(self, self.model.get_filedetails, self.model.update_filedetails, self.clientdata, "Save", "Edit config", "Configuration Set") end function startstop(self) - return controllerfunctions.handle_startstop(self, self.model.startstop_service, self.clientdata) + return self.handle_form(self, self.model.get_startstop, self.model.startstop_service, self.clientdata) end function status(self) diff --git a/syslog-model.lua b/syslog-model.lua index 4677336..a46d95b 100644 --- a/syslog-model.lua +++ b/syslog-model.lua @@ -1,9 +1,9 @@ module(..., package.seeall) require("modelfunctions") -require("fs") -require("format") -require("validator") +fs = require("acf.fs") +format = require("acf.format") +validator = require("acf.validator") local configfile = "/etc/conf.d/syslog" local packagename = "busybox" @@ -145,8 +145,12 @@ end -- ################################################################################ -- PUBLIC FUNCTIONS -function startstop_service(action) - return modelfunctions.startstop_service(processname, action) +function get_startstop(clientdata) + return modelfunctions.get_startstop(processname) +end + +function startstop_service(startstop, action) + return modelfunctions.startstop_service(startstop, action) end function getstatus() diff --git a/syslog-startstop-html.lsp b/syslog-startstop-html.lsp deleted file mode 120000 index 0ea2627..0000000 --- a/syslog-startstop-html.lsp +++ /dev/null @@ -1 +0,0 @@ -../startstop-html.lsp \ No newline at end of file -- cgit v1.2.3