diff options
Diffstat (limited to 'app/shorewall-controller.lua')
-rw-r--r-- | app/shorewall-controller.lua | 58 |
1 files changed, 31 insertions, 27 deletions
diff --git a/app/shorewall-controller.lua b/app/shorewall-controller.lua index 78219b7..f1583cf 100644 --- a/app/shorewall-controller.lua +++ b/app/shorewall-controller.lua @@ -9,9 +9,13 @@ end mvc={} mvc.on_load = function(self, parent) --TODO: This needs to be looked at + --there has to be cute, standard way of loading models into controller self.cfgfile = self:soft_require("cfgfile-model") setmetatable(self.cfgfile, self.cfgfile) self.cfgfile.__index = self.worker + self.service = self:soft_require("service-model") + setmetatable(self.service, self.service) + self.service.__index = self.worker if (self.worker[self.conf.action] == nil) or (self.conf.action == "init") then self.worker[self.conf.action] = list_redir(self) end @@ -58,41 +62,41 @@ update = function(self) value = data} end ---This is a work in progress, do not review -local function mkCtlRet(self) - return { +local function service(self, action) + local id = tonumber(self.clientdata.id) or -1 + local svc = self.service:list("firewall") + local ret = { script=ENV["SCRIPT_NAME"], prefix=self.conf.prefix, controller = self.conf.controller, - action={ - { name="restart", label="Restart" }, - { name="start", label="Start" }, - { name="stop", label="Stop" }, - { name="reload", label="Reload", disabled=true }, - }, - title="Shorewall", - text={} + action={}, + title="Firewall", + text={}, + active={ id=id } } -end - -restart = function(self) - ret = mkCtlRet(self) - if self.clientdata.restart then - ret.active = "restart" - local f = io.popen("/etc/init.d/shorewall restart", "r") - if f then - local out = f:read("*a") - f:close() - ret.text[#ret.text + 1] = { label="Restarting", content=out } - else - ret.text[#ret.text + 1] = { - label="Error", content="Cannot run /etc/init.d/shorewall" + for i,s in pairs(svc) do + for i,a in ipairs(s.actions) do + ret.action[#ret.action + 1] = { + name = a, + section = s.name .. " (" .. tostring(s.status) .. ")", + id = s.id, + label = a, } end end + if self.clientdata[action] then + local result, report = self.service:update(id, action) + local label = "Error" + if result then + ret.active.action = action + label = "Report" + end + ret.text[#ret.text + 1] = { label=label, content=report } + end return ret end ---create = update ---delete = update +start = function(self) return service(self, "start") end +stop = function(self) return service(self, "stop") end +restart = function(self) return service(self, "restart") end |