diff options
Diffstat (limited to 'openntpd-controller.lua')
-rw-r--r-- | openntpd-controller.lua | 174 |
1 files changed, 63 insertions, 111 deletions
diff --git a/openntpd-controller.lua b/openntpd-controller.lua index 006b353..6291e6c 100644 --- a/openntpd-controller.lua +++ b/openntpd-controller.lua @@ -1,36 +1,19 @@ --- Controller module module (..., package.seeall) --- Cause an http redirect to our "read" action --- We use the self.conf table because it already has prefix,controller,etc --- The redir code is defined in the application error handler (acf-controller) +-- Load libraries require("posix") require("validator") -local list_redir = function (self) +-- ################################################################################ +-- LOCAL FUNCTIONS + +local function list_redir(self) self.conf.action = "read" self.conf.type = "redir" error (self.conf) end -mvc={} -mvc.on_load = function(self, parent) - if (self.worker[self.conf.action] == nil ) or ( self.conf.action == "init" ) then - self.worker[self.conf.action] = list_redir(self) - end -end - -local function getstatus(self) - local status = self.model.getstatus() - if (#status.status.value > 0) then - status.status.value = "Enabled" - else - status.status.value = "Disabled" - end - return status -end - -local function displaycmdmanagement(disablestart,disablestop,disablerestart) +local function displaycmdmanagement(pidofstatus) -- Add a management buttons local management = {} management.start = cfe({ name="cmdmanagement", @@ -48,11 +31,20 @@ local function displaycmdmanagement(disablestart,disablestop,disablerestart) value="Restart", type="submit", }) + -- next CFE can be used to present the result of the previous action + management.actionresult = cfe({ name="actionresult", + label="Previous action result", + descr="", --Content of this variable is displayed as <PRE> ... </PRE> in BLACK text + errtxt="", --Content of this variable is displayed as <PRE> ... </PRE> in RED text + }) -- Disable management buttons based on if the process is running or not - if (disablestart) then management.start.disabled = "yes" end - if (disablestop) then management.stop.disabled = "yes" end - if (disablerestart) then management.restart.disabled = "yes" end + if (pidofstatus) then + management.start.disabled = "yes" + else + management.stop.disabled = "yes" + management.restart.disabled = "yes" + end return management end @@ -67,14 +59,24 @@ local function displaycmdsave(self) return cmdsave end -config = function (self) +-- ################################################################################ +-- PUBLIC FUNCTIONS + +mvc={} +function mvc.on_load(self, parent) + if (self.worker[self.conf.action] == nil ) or ( self.conf.action == "init" ) then + self.worker[self.conf.action] = list_redir(self) + end +end + +function config(self) local errors = {} local modify_opts = nil local cmdsavereply = {} local cmdsaveresult = {} -- Start/Stop/Restart process - local cmdmanagement + local cmdmanagement, actionresult if ( self.clientdata.cmdmanagement) then cmdmanagement = cfe({ name="cmdmanagement", @@ -84,7 +86,7 @@ config = function (self) value=string.lower(self.clientdata.cmdmanagement), -- This row contains start/stop/restart (one of these commands) }), }) - local actionresult, cmdmanagement = self.model:startstop_service( cmdmanagement.action ) + actionresult, cmdmanagement = self.model:startstop_service( cmdmanagement.action ) end if (self.clientdata.cmdsavesetstimeonstartup) then @@ -164,49 +166,8 @@ config = function (self) end end - ---[[ - -- SECTION WHERE YOU SAVE NEW SETTINGS - if ( self.clientdata.hosts_cmd_delete ) then - if not (self.clientdata.hosts_list) then - errors["hosts_list"]="You need to choose something in the list to delete" - end - - if (self.clientdata.hosts_list) then - modify_opts = self.model:modify_config(string.lower(tostring(self.clientdata.hosts_cmd)), nil, self.clientdata.hosts_list) - end - - - - if (string.lower(tostring(self.clientdata.hosts_cmd)) == "add") then - if (self.clientdata.hosts_add == "") then - errors["hosts_add"]="You need to enter a server/IP" - end - if (self.clientdata.hosts_type == nil) then - errors["hosts_type"]="You need to choose type of server" - errors["hosts_add_orgvalue"] = self.clientdata.hosts_add - end - if (self.clientdata.hosts_add ~= "") and (self.clientdata.hosts_type ~= nil) then - modify_opts = self.model:modify_config(string.lower(tostring(self.clientdata.hosts_cmd)), nil, self.clientdata.hosts_type .. " " .. self.clientdata.hosts_add) - end - elseif (string.lower(tostring(self.clientdata.listen_cmd)) == "add") then - if (self.clientdata.listen_add == "") then - errors["listen_add"]="You need to enter what you want to listen at" - end - if (self.clientdata.listen_add ~= "") then - modify_opts = self.model:modify_config(string.lower(tostring(self.clientdata.listen_cmd)), nil, "listen on " .. self.clientdata.listen_add) - end - elseif (string.lower(tostring(self.clientdata.listen_cmd)) == "delete") then - if not (self.clientdata.listen_list) then - errors["listen_list"]="You need to choose something in the list to delete" - end - if (self.clientdata.listen_list) then - modify_opts = self.model:modify_config(string.lower(tostring(self.clientdata.listen_cmd)), nil, self.clientdata.listen_list) - end ---]] - local url = ENV["SCRIPT_NAME"] .. self.conf.prefix .. self.conf.controller - local status = getstatus(self) + local status = self.model:getstatus(self) local config = self.model:getconfig() -- Add buttons @@ -250,25 +211,19 @@ config = function (self) }) config.listen_cmd_add.descr="Enter your values in '" .. config.listen_add.label .. "' before pressing [" .. config.listen_cmd_add.value .. "]." - -- Management buttons - local disablestart,disablestop,disablerestart - -- Disable management buttons based on if the process is running or not - if (string.lower(status.status.value) == "enabled" ) then - disablestart = "yes" - else - disablestop = "yes" + -- Management buttons (Hide/show buttons + local pidofstatus + if (string.lower(status.status.value) == "enabled" ) then pidofstatus = true end + management = displaycmdmanagement(pidofstatus) + if (actionresult) then + management.actionresult.descr=cmdmanagement.descr + management.actionresult.errtxt=cmdmanagement.errtxt end - -- Disable management buttons if there exist errors in the config - for k,v in pairs(config) do - if (config[k]["errtxt"] ~= "") then - disablestart = "yes" - disablestop = "yes" - disablerestart = "yes" - break - end + if (status) and (status.version) and (#status.version.value == 0) then + management.start.disabled = "yes" + management.stop.disabled = "yes" + management.restart.disabled = "yes" end - -- Display management buttons - local management = displaycmdmanagement(disablestart,disablestop,disablerestart) -- Write out erros and descriptions from previous actions for k,v in pairs(cmdsavereply) do @@ -283,14 +238,11 @@ config = function (self) end end - DEBUGMODEL = modify_opts -- <<< DEBUG INFO >>> return ( {status = status, config = config, management = management, url = url, errors = errors, - cmdmanagement = cmdmanagement, - cmdsavereply = cmdsavereply, cmdsaveresult = cmdsaveresult, modify_opts = modify_opts, @@ -298,27 +250,25 @@ config = function (self) } ) end -logfile = function (self) +function logfile(self) - local status = getstatus(self) + local status = self.model:getstatus(self) local logfile = self.model:get_logfile() return ({ - management = management, - cmdmanagement = cmdmanagement, status = status, logfile = logfile, url = url, }) end -status = function (self) +function status (self) local cmd = self.clientdata.cmd local url = ENV["SCRIPT_NAME"] .. self.conf.prefix .. self.conf.controller - return ( {status = getstatus(self), url = url } ) + return ( {status = self.model:getstatus(self), url = url } ) end -expert = function (self) +function expert (self) local modifications = self.clientdata.filecontent or "" if ( self.clientdata.cmdsave ) then modifications = self.model:update_filecontent(modifications) @@ -326,7 +276,7 @@ expert = function (self) local url = ENV["SCRIPT_NAME"] .. self.conf.prefix .. self.conf.controller -- Start/Stop/Restart process - local cmdmanagement + local cmdmanagement, actionresult if ( self.clientdata.cmdmanagement) then cmdmanagement = cfe({ name="cmdmanagement", @@ -336,10 +286,10 @@ expert = function (self) value=string.lower(self.clientdata.cmdmanagement), -- This row contains start/stop/restart (one of these commands) }), }) - local actionresult, cmdmanagement = self.model:startstop_service( cmdmanagement.action ) + actionresult, cmdmanagement = self.model:startstop_service( cmdmanagement.action ) end - local status = getstatus(self) + local status = self.model:getstatus(self) local file = self.model:get_filedetails() -- Add buttons @@ -354,23 +304,25 @@ expert = function (self) end - -- Management buttons - local disablestart,disablestop,disablerestart - -- Disable management buttons based on if the process is running or not - if (string.lower(status.status.value) == "enabled" ) then - disablestart = "yes" - else - disablestop = "yes" + -- Management buttons (Hide/show buttons + local pidofstatus + if (string.lower(status.status.value) == "enabled" ) then pidofstatus = true end + management = displaycmdmanagement(pidofstatus) + if (actionresult) then + management.actionresult.descr=cmdmanagement.descr + management.actionresult.errtxt=cmdmanagement.errtxt + end + if (status) and (status.version) and (#status.version.value == 0) then + management.start.disabled = "yes" + management.stop.disabled = "yes" + management.restart.disabled = "yes" end - -- Display management buttons - management = displaycmdmanagement(disablestart,disablestop,disablerestart) return ( { status = status, file = file, modifications = modifications, management = management, - cmdmanagement = cmdmanagement, url = url, } ) end |