summaryrefslogtreecommitdiffstats
path: root/app/shorewall-controller.lua
diff options
context:
space:
mode:
Diffstat (limited to 'app/shorewall-controller.lua')
-rw-r--r--app/shorewall-controller.lua58
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