From 337584d2a16c3a22551ab31c6eff7beb1c942815 Mon Sep 17 00:00:00 2001 From: Ted Trask Date: Thu, 26 Jun 2008 19:16:25 +0000 Subject: Rewrite of DNScache. git-svn-id: svn://svn.alpinelinux.org/acf/dnscache/trunk@1262 ab2d0c66-481e-0410-8bed-d214d4d58bed --- dnscache-controller.lua | 181 +++++++++++++++++++++++------------------------- 1 file changed, 87 insertions(+), 94 deletions(-) (limited to 'dnscache-controller.lua') 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 -- cgit v1.2.3