diff options
-rw-r--r-- | cron-controller.lua | 14 | ||||
-rw-r--r-- | cron-listjobs-html.lsp | 2 | ||||
-rw-r--r-- | cron-model.lua | 37 | ||||
l--------- | cron-startstop-html.lsp | 1 | ||||
-rw-r--r-- | hostname-controller.lua | 4 | ||||
-rw-r--r-- | interfaces-controller.lua | 17 | ||||
-rw-r--r-- | interfaces-model.lua | 98 | ||||
-rw-r--r-- | interfaces-read-html.lsp | 8 | ||||
-rw-r--r-- | modules-controller.lua | 6 | ||||
-rw-r--r-- | modules-edit-html.lsp | 2 | ||||
-rw-r--r-- | modules-model.lua | 14 | ||||
-rw-r--r-- | password-controller.lua | 4 | ||||
-rw-r--r-- | rc-controller.lua | 10 | ||||
-rw-r--r-- | rc-model.lua | 27 | ||||
-rw-r--r-- | rc-status-html.lsp | 2 | ||||
-rw-r--r-- | syslog-controller.lua | 7 | ||||
-rw-r--r-- | syslog-model.lua | 14 | ||||
l--------- | syslog-startstop-html.lsp | 1 |
18 files changed, 160 insertions, 108 deletions
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 <TD style="white-space:nowrap;"><%= html.html_escape(string.gsub(job, "^.*/", "")) %></TD> <TD style="padding-right:20px;white-space:nowrap;"> <%= 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 "} %> </TD><TD> <% createmoveform(job, tabl.period) %> </TD> 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 %> <A HREF='update?name=<%= html.html_escape(interface.name.value) %>&redir=read'>Edit </A> <% end if viewlibrary.check_permission("delete") then %> - <A HREF='delete?name=<%= html.html_escape(interface.name.value) %>'>Delete </A> + <A HREF='delete?name=<%= html.html_escape(interface.name.value) %>&submit=true&redir=read'>Delete </A> <% end if viewlibrary.check_permission("ifup") then %> - <A HREF='ifup?name=<%= html.html_escape(interface.name.value) %>'>ifup </A> + <A HREF='ifup?name=<%= html.html_escape(interface.name.value) %>&submit=true&redir=read'>ifup </A> <% end if viewlibrary.check_permission("ifdown") then %> - <A HREF='ifdown?name=<%= html.html_escape(interface.name.value) %>'>ifdown </A> + <A HREF='ifdown?name=<%= html.html_escape(interface.name.value) %>&submit=true&redir=read'>ifdown </A> <% end %> </TR> </TABLE> @@ -56,5 +56,5 @@ end %> <DL> <P class="error">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.</P> <DT>Restart Networking</DT> -<DD><form action="<%= html.html_escape(page_info.script .. page_info.prefix .. page_info.controller .. "/restart") %>"><input class="submit" type="submit" value="Restart"></form></DD> +<DD><form action="<%= html.html_escape(page_info.script .. page_info.prefix .. page_info.controller .. "/restart?redir=read&submit=true") %>"><input class="submit" type="submit" name="submit" value="Restart"></form></DD> </DL> 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) <H1>Reload Modules</H1> <DL> <DT>Reload Modules</DT> -<DD><form action="<%= page_info.script .. page_info.prefix .. page_info.controller .. "/reload" %>"><input class="submit" type="submit" value="Reload"></form></DD> +<DD><form action="<%= page_info.script .. page_info.prefix .. page_info.controller .. "/reload?redir=edit&submit=true" %>"><input class="submit" type="submit" name="submit" value="Reload"></form></DD> </DL> 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 %> <TD><%= html.html_escape(item.servicename) %></TD> 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 |