summaryrefslogtreecommitdiffstats
path: root/openntpd-controller.lua
diff options
context:
space:
mode:
Diffstat (limited to 'openntpd-controller.lua')
-rw-r--r--openntpd-controller.lua363
1 files changed, 323 insertions, 40 deletions
diff --git a/openntpd-controller.lua b/openntpd-controller.lua
index 7031263..22fb89f 100644
--- a/openntpd-controller.lua
+++ b/openntpd-controller.lua
@@ -5,6 +5,8 @@ module (..., package.seeall)
-- 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)
require("posix")
+require("validator")
+
local list_redir = function (self)
self.conf.action = "read"
self.conf.type = "redir"
@@ -18,28 +20,165 @@ mvc.on_load = function(self, parent)
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)
+ -- Add a management buttons
+ local management = {}
+ management.start = cfe({ name="cmdmanagement",
+ label="Program control-panel",
+ value="Start",
+ type="submit",
+ })
+ management.stop = cfe({ name="cmdmanagement",
+ label="Program control-panel",
+ value="Stop",
+ type="submit",
+ })
+ management.restart = cfe({ name="cmdmanagement",
+ label="Program control-panel",
+ value="Restart",
+ type="submit",
+ })
+
+ -- 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
+
+ return management
+end
+
+local function displaycmdsave(self)
+ -- Add a cmd button to the view
+ local cmdsave = cfe({ name="cmdsave",
+ label="Save/Apply above settings",
+ value="Save",
+ type="submit",
+ })
+ return cmdsave
+end
config = function (self)
- local cmd = self.clientdata.cmd
local errors = {}
local modify_opts = nil
- local url = ENV["SCRIPT_NAME"] .. self.conf.prefix .. self.conf.controller
- local hosts_cmd = tostring(self.clientdata.hosts_cmd)
- local hosts_cmd = string.lower(hosts_cmd)
- local listen_cmd = tostring(self.clientdata.listen_cmd)
- local listen_cmd = string.lower(listen_cmd)
- local settings_cmd = tostring(self.clientdata.settings_cmd)
- local settings_cmd = string.lower(settings_cmd)
+ local cmdsavereply = {}
+ local cmdsaveresult = {}
+ -- Start/Stop/Restart process
+ local cmdmanagement
+ if ( self.clientdata.cmdmanagement) then
+ cmdmanagement = cfe({
+ name="cmdmanagement",
+ label="Previous action result",
+ action=cfe({
+ name="cmdmanagement",
+ 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 )
+ end
+
+ if (self.clientdata.cmdsavesetstimeonstartup) then
+ if (self.clientdata.setstimeonstartup) then
+ modify_opts = self.model:modify_opts("add", "/etc/conf.d/ntpd", "NTPD_OPTS", "-s")
+ else
+ modify_opts = self.model:modify_opts("remove", "/etc/conf.d/ntpd", "NTPD_OPTS", "-s")
+ end
+ end
+
+ if ( self.clientdata.hosts_cmd_delete) then
+ local variables="hosts_cmd_delete"
+ for var in string.gmatch(variables, "%S+") do
+ -- Send nil instead of "" causes the parameter to be removed/deleted/empty/unset the variable in the config-file
+-- if (self.clientdata[var] == "") then self.clientdata[var] = nil end
+ cmdsaveresult[var], cmdsavereply[var] = self.model:modify_config( "delete",
+ "server%S?" ,
+ string.match(self.clientdata["hosts_list"], "^%s*(%S*)") )
+ end
+ end
+
+ if ( self.clientdata.listen_cmd_delete) then
+ local variables="listen_cmd_delete"
+ for var in string.gmatch(variables, "%S+") do
+ -- Send nil instead of "" causes the parameter to be removed/deleted/empty/unset the variable in the config-file
+-- if (self.clientdata[var] == "") then self.clientdata[var] = nil end
+ cmdsaveresult[var], cmdsavereply[var] = self.model:modify_config( "delete",
+ "listen on" ,
+ string.match(self.clientdata["listen_list"], "^%s*(%S*)") )
+ end
+ end
+
+ if ( self.clientdata.hosts_cmd_add) then
+ local variables="hosts_cmd_add"
+ for var in string.gmatch(variables, "%S+") do
+ local freetocommit
+ -- Do some checking before executing the command
+ if not (self.clientdata["hosts_type"]) then
+ cmdsavereply["hosts_type"] = cfe ({
+ errtxt="You need chose type of host to add!",
+ })
+ cmdsavereply["hosts_add"] = cfe ({
+ value=self.clientdata["hosts_add"],
+ })
+ end
+ if (#self.clientdata["hosts_add"] == 0) then
+ cmdsavereply["hosts_add"] = cfe ({ errtxt="You need to add a valid hostname/IP!", })
+ end
+
+ if not ( cmdsavereply["hosts_type"] and cmdsavereply["hosts_type"]["errtxt"]) and not
+ (cmdsavereply["hosts_add"] and cmdsavereply["hosts_add"]["errtxt"]) then
+ -- Send nil instead of "" causes the parameter to be removed/deleted/empty/unset the variable in the config-file
+-- if (self.clientdata[var] == "") then self.clientdata[var] = nil end
+ cmdsaveresult[var], cmdsavereply[var] = self.model:modify_config( "add",
+ self.clientdata["hosts_type"] ,
+ self.clientdata["hosts_add"] )
+ end
+ end
+ end
+
+ if ( self.clientdata.listen_cmd_add) then
+ local variables="listen_cmd_add"
+ for var in string.gmatch(variables, "%S+") do
+ local freetocommit
+ -- Do some checking before executing the command
+ if (#self.clientdata["listen_add"] == 0) then
+ cmdsavereply["listen_add"] = cfe ({ errtxt="You need to add a valid hostname/IP!", })
+ end
+
+ if not ( cmdsavereply["listen_add"] and cmdsavereply["listen_add"]["errtxt"]) then
+ -- Send nil instead of "" causes the parameter to be removed/deleted/empty/unset the variable in the config-file
+-- if (self.clientdata[var] == "") then self.clientdata[var] = nil end
+ cmdsaveresult[var], cmdsavereply[var] = self.model:modify_config( "add",
+ "listen on",
+ self.clientdata["listen_add"] )
+ end
+ end
+ end
+
+
+--[[
-- SECTION WHERE YOU SAVE NEW SETTINGS
- if ( hosts_cmd == "delete") then
+ 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(hosts_cmd, nil, self.clientdata.hosts_list)
+ modify_opts = self.model:modify_config(string.lower(tostring(self.clientdata.hosts_cmd)), nil, self.clientdata.hosts_list)
end
- elseif (hosts_cmd == "add") then
+
+
+
+ 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
@@ -48,70 +187,214 @@ config = function (self)
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(hosts_cmd, nil, self.clientdata.hosts_type .. " " .. self.clientdata.hosts_add)
+ modify_opts = self.model:modify_config(string.lower(tostring(self.clientdata.hosts_cmd)), nil, self.clientdata.hosts_type .. " " .. self.clientdata.hosts_add)
end
- elseif (listen_cmd == "add") then
+ 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(listen_cmd, nil, "listen on " .. self.clientdata.listen_add)
+ modify_opts = self.model:modify_config(string.lower(tostring(self.clientdata.listen_cmd)), nil, "listen on " .. self.clientdata.listen_add)
end
- elseif (listen_cmd == "delete") then
+ 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(listen_cmd, nil, self.clientdata.listen_list)
+ modify_opts = self.model:modify_config(string.lower(tostring(self.clientdata.listen_cmd)), nil, self.clientdata.listen_list)
end
- elseif (settings_cmd == "save") then
- if (self.clientdata.settings_startup) then
- modify_opts = self.model:modify_opts("add", "/etc/conf.d/ntpd", "NTPD_OPTS", "-s")
- else
- modify_opts = self.model:modify_opts("remove", "/etc/conf.d/ntpd", "NTPD_OPTS", "-s")
+--]]
+
+ local url = ENV["SCRIPT_NAME"] .. self.conf.prefix .. self.conf.controller
+ local status = getstatus(self)
+ local config = self.model:getconfig()
+
+ -- Add buttons
+ config.hosts_cmd_delete = cfe({
+ name = "hosts_cmd_delete",
+ label="Delete selected host",
+ value="Delete",
+ type="submit",
+ })
+ config.hosts_cmd_delete.descr="Mark a item in '" .. config.hosts_list.label .. "'-list before pressing [" .. config.hosts_cmd_delete.value .. "]."
+ if (#config.hosts_list.option == 0) then
+ config.hosts_cmd_delete.disabled = "yes"
+ config.hosts_cmd_delete.descr = ""
+ end
+
+ config.listen_cmd_delete = cfe({
+ name = "listen_cmd_delete",
+ label="Delete selected host",
+ value="Delete",
+ type="submit",
+ })
+ config.listen_cmd_delete.descr="Mark a item in '" .. config.listen_list.label .. "'-list before pressing [" .. config.listen_cmd_delete.value .. "]."
+ if (#config.listen_list.option == 0) then
+ config.listen_cmd_delete.disabled = "yes"
+ config.listen_cmd_delete.descr = ""
+ end
+
+ config.hosts_cmd_add = cfe({
+ name = "hosts_cmd_add",
+ label="Add selected host",
+ value="Add",
+ type="submit",
+ })
+ config.hosts_cmd_add.descr="Enter your values in '" .. config.hosts_add.label .. "' and chose '" .. config.hosts_type.label .. "' before pressing [" .. config.hosts_cmd_add.value .. "]."
+
+ config.listen_cmd_add = cfe({
+ name = "listen_cmd_add",
+ label="Add new listen address",
+ value="Add",
+ type="submit",
+ })
+ 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"
+ 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
end
+ -- Display management buttons
+ local management = displaycmdmanagement(disablestart,disablestop,disablerestart)
- DEBUGMODEL = modify_opts -- <<< DEBUG INFO >>>
- DEBUGCLIENTDATA = self.clientdata -- <<< DEBUG INFO >>>
- local startstop
- if ( cmd ~= nil ) then
- startstop = self.model:startstop_service( cmd )
+ -- Write out erros and descriptions from previous actions
+ for k,v in pairs(cmdsavereply) do
+ if (config[k]) and (cmdsavereply[k]["errtxt"]) and (#cmdsavereply[k]["errtxt"] > 0) then
+ config[k]["errtxt"] = tostring(cmdsavereply[k]["errtxt"])
+ end
+ if (config[k]) and (cmdsavereply[k]["descr"]) and (#cmdsavereply[k]["descr"] > 0) then
+ config[k]["descr"] = tostring(cmdsavereply[k]["descr"])
+ end
+ if (config[k]) and (cmdsavereply[k]["value"]) and (#cmdsavereply[k]["value"] > 0) then
+ config[k]["value"] = tostring(cmdsavereply[k]["value"])
+ end
end
- return ( {status = self.model:getstatus(),
- config = self.model:getconfig(),
+
+ DEBUGMODEL = modify_opts -- <<< DEBUG INFO >>>
+ return ( {status = status,
+ config = config,
+ management = management,
url = url,
errors = errors,
- startstop = startstop, } )
+ cmdmanagement = cmdmanagement,
+
+ cmdsavereply = cmdsavereply,
+ cmdsaveresult = cmdsaveresult,
+ modify_opts = modify_opts,
+ clientdata = self.clientdata,
+ } )
end
logfile = function (self)
- return ( {status = self.model:getstatus(), logfile = self.model:get_logfile(), url = url } )
+ -- Start/Stop/Restart process
+ local cmdmanagement
+ if ( self.clientdata.cmdmanagement) then
+ cmdmanagement = cfe({
+ name="cmdmanagement",
+ label="Previous action result",
+ action=cfe({
+ name="cmdmanagement",
+ 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 )
+ end
+
+ local status = getstatus(self)
+ local logfile = self.model:get_logfile()
+
+ -- 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"
+ end
+ -- Display management buttons
+ management = displaycmdmanagement(disablestart,disablestop,disablerestart)
+
+ return ({
+ management = management,
+ cmdmanagement = cmdmanagement,
+ status = status,
+ logfile = logfile,
+ url = url,
+ })
end
status = function (self)
local cmd = self.clientdata.cmd
local url = ENV["SCRIPT_NAME"] .. self.conf.prefix .. self.conf.controller
- return ( {status = self.model:getstatus(), url = url } )
+ return ( {status = getstatus(self), url = url } )
end
expert = function (self)
- local modifications = self.clientdata.modifications or ""
- local cmd = self.clientdata.cmd
+ local modifications = self.clientdata.filecontent or ""
+ if ( self.clientdata.cmdsave ) then
+ modifications = self.model:update_filecontent(modifications)
+ end
local url = ENV["SCRIPT_NAME"] .. self.conf.prefix .. self.conf.controller
- if ( modifications ~= "") then
- modifications = self.model:update_filecontent(modifications)
+ -- Start/Stop/Restart process
+ local cmdmanagement
+ if ( self.clientdata.cmdmanagement) then
+ cmdmanagement = cfe({
+ name="cmdmanagement",
+ label="Previous action result",
+ action=cfe({
+ name="cmdmanagement",
+ 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 )
end
- if ( cmd ~= nil ) then
- startstop = self.model:startstop_service( cmd )
+ local status = getstatus(self)
+ local file = self.model:get_filedetails()
+
+ -- Add buttons
+ file.cmdsave = cfe ({
+ name="cmdsave",
+ label="Apply settings",
+ value="Apply",
+ type="submit",
+ })
+ if (self.clientdata.cmdsave) then
+ file.cmdsave.descr="* Changes has been saved!"
+ 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"
end
+ -- Display management buttons
+ management = displaycmdmanagement(disablestart,disablestop,disablerestart)
- return ( {startstop = startstop,
- status = self.model:getstatus(),
- file = self.model:get_filedetails(),
+ return ( {
+ status = status,
+ file = file,
modifications = modifications,
+ management = management,
+ cmdmanagement = cmdmanagement,
url = url, } )
end