module(..., package.seeall) -- Load libraries require("format") 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 form.type = "form" form.option = option form.label = label return form end default_action = "status" function status(self) return self.model.getstatus() end 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 status = self.model.getstatus() status = status.value.status if self.sessiondata.dnscachestartstopresult then result = self.sessiondata.dnscachestartstopresult self.sessiondata.dnscachestartstopresult = nil end 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 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 listdomains(self) return self.model.getDomains() end 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 function deletedomain(self) local cmdresult = self.model.deleteDomain(self.clientdata.domain) redirect_to_referrer(self) return cmdresult end