summaryrefslogtreecommitdiffstats
path: root/openntpd-controller.lua
diff options
context:
space:
mode:
Diffstat (limited to 'openntpd-controller.lua')
-rw-r--r--openntpd-controller.lua174
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