summaryrefslogtreecommitdiffstats
path: root/dnscache-controller.lua
diff options
context:
space:
mode:
Diffstat (limited to 'dnscache-controller.lua')
-rw-r--r--dnscache-controller.lua181
1 files changed, 87 insertions, 94 deletions
diff --git a/dnscache-controller.lua b/dnscache-controller.lua
index 0cc4d92..d50fb63 100644
--- a/dnscache-controller.lua
+++ b/dnscache-controller.lua
@@ -3,115 +3,108 @@ module(..., package.seeall)
-- Load libraries
require("format")
--- Set variables
-local newrecordtxt = "[New]"
-
--- ################################################################################
--- LOCAL FUNCTIONS
-
-local function displaycmdmanagement(pidofstatus)
- -- 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",
- })
- -- next CFE can be used to present the result of the previous action
- management.actionresult = cfe({ name="actionresult",
- label="Previous action result",
- })
-
- -- Disable management buttons based on if the process is running or not
- if (pidofstatus) then
- management.start.disabled = "yes"
- else
- management.stop.disabled = "yes"
- management.restart.disabled = "yes"
+local function handle_form(getFunction, setFunction, clientdata, option, label, descr)
+ local form = getFunction()
+
+ if clientdata[option] then
+ form.errtxt = nil
+ for name,value in pairs(form.value) do
+ value.errtxt = nil
+ if value.type == "boolean" then
+ value.value = (clientdata[name] ~= nil)
+ elseif value.type == "list" then
+ value.value = {}
+ if clientdata[name] and clientdata[name] ~= "" then
+ for ip in string.gmatch(clientdata[name].."\n", "%s*(%S[^\n]*%S)%s*\n") do
+ table.insert(value.value, ip)
+ end
+ end
+ else
+ value.value = clientdata[name] or value.value
+ end
+ end
+ form = setFunction(form)
+ if not form.errtxt then
+ form.descr = descr
+ end
end
- return management
-end
+ form.type = "form"
+ form.option = option
+ form.label = label
--- ################################################################################
--- PUBLIC FUNCTIONS
+ return form
+end
default_action = "status"
function status(self)
- return { status=self.model.getstatus() }
+ return self.model.getstatus()
end
-function expert(self)
- local modifications = self.clientdata.filecontent or ""
- if ( self.clientdata.cmdsave ) then
- modifications = self.model:update_filecontent(modifications)
+function startstop(self)
+ local result
+ if self.clientdata.action then
+ result = self.model.startstop_service(self.clientdata.action)
+ self.sessiondata.dnscachestartstopresult = result
+ self.redirect_to_referrer(self)
end
- local url = self.conf.script .. self.conf.prefix .. self.conf.controller
-
- -- Start/Stop/Restart process
- local cmdmanagement, actionresult
- 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)
- }),
- })
- actionresult, cmdmanagement = self.model:startstop_service( cmdmanagement.action )
+
+ local status = self.model.getstatus()
+ status = status.value.status
+ if self.sessiondata.dnscachestartstopresult then
+ result = self.sessiondata.dnscachestartstopresult
+ self.sessiondata.dnscachestartstopresult = nil
end
- local status=self.model.getstatus()
- 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 (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
+ return cfe({ type="group", value={status=status, result=result} })
+end
+
+function config(self)
+ return handle_form(self.model.getconfig, self.model.setconfig, self.clientdata, "Save", "Edit Config", "Configuration Set")
+end
+
+function expert(self)
+ local filedetails
+ if self.clientdata.Save then
+ filedetails = self.model.setconfigfile(self.clientdata.filecontent)
+ if not filedetails.errtxt then
+ filedetails.descr = "Config file set"
+ end
+ else
+ filedetails = self.model.getconfigfile()
end
-
- return ( {
- status = status,
- file = file,
- modifications = modifications,
- management = management,
- url = url, } )
+
+ filedetails.type = "form"
+ filedetails.option = "Save"
+ filedetails.label = "Set config file"
+
+ return filedetails
+end
+
+function editips(self)
+ return handle_form(self.model.getIPs, self.model.setIPs, self.clientdata, "Save", "Edit IP List", "IP List Set")
end
-function logfile(self)
+function listdomains(self)
+ return self.model.getDomains()
+end
- local status=self.model.getstatus()
- local logfile = self.model:get_logfile()
+function createdomain(self)
+ local cmdresult = handle_form(self.model.getNewDomain, self.model.setNewDomain, self.clientdata, "Create", "Create new domain", "New domain created")
+ if cmdresult.descr then
+ redirect_to_referrer(self)
+ end
+ return cmdresult
+end
+
+function editdomain(self)
+ return handle_form(function(form) return self.model.getDomain(self.clientdata.domain) end,
+ self.model.setDomain, self.clientdata, "Save", "Edit domain entry", "Domain saved")
+end
- return ({
- status = status,
- logfile = logfile,
- url = url,
- })
+function deletedomain(self)
+ local cmdresult = self.model.deleteDomain(self.clientdata.domain)
+ redirect_to_referrer(self)
+ return cmdresult
end