summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMika Havela <mika.havela@gmail.com>2008-03-04 08:49:41 +0000
committerMika Havela <mika.havela@gmail.com>2008-03-04 08:49:41 +0000
commit73433bf9ea9a0f7f56203bafa111821bb47856cf (patch)
tree8961f85a4d8827ad05c6c085daf04f0de998b0a3
parent8c41156d76be7332fd34d1ab18a078510745b81a (diff)
downloadacf-shorewall-73433bf9ea9a0f7f56203bafa111821bb47856cf.tar.bz2
acf-shorewall-73433bf9ea9a0f7f56203bafa111821bb47856cf.tar.xz
Added the missing (example)-page. Added functionallity so that the page has live data
git-svn-id: svn://svn.alpinelinux.org/acf/shorewall/trunk@799 ab2d0c66-481e-0410-8bed-d214d4d58bed
-rw-r--r--shorewall-check-html.lsp2
-rw-r--r--shorewall-config-html.lsp141
-rw-r--r--shorewall-controller.lua245
-rw-r--r--shorewall-model.lua30
4 files changed, 204 insertions, 214 deletions
diff --git a/shorewall-check-html.lsp b/shorewall-check-html.lsp
index 8aee254..38d788b 100644
--- a/shorewall-check-html.lsp
+++ b/shorewall-check-html.lsp
@@ -58,7 +58,7 @@ io.write(html.form[form.config.checkresult.type](form.config.checkresult))
<?
local cmdform = form.management
-local tags = { "start", "stop", "restart" }
+local tags = { "restart" }
if (cmdform) and (cmdform[tags[1]]) then
?>
<form name="management" action="" method="POST">
diff --git a/shorewall-config-html.lsp b/shorewall-config-html.lsp
new file mode 100644
index 0000000..3523ed6
--- /dev/null
+++ b/shorewall-config-html.lsp
@@ -0,0 +1,141 @@
+<? local form = ... ?>
+
+<?
+--[[ DEBUG INFORMATION
+io.write("<H1>DEBUGGING</H1><span style='color:red'><H2>DEBUG INFO: CFE</H2>")
+io.write(html.cfe_unpack(form))
+io.write("</span>")
+--]]
+?>
+
+<?
+function displayinfo(myform,tags,viewtype)
+ for k,v in pairs(tags) do
+ if (myform[v]) and (myform[v]["value"]) then
+ local val = myform[v]
+ io.write("\n\t<DT")
+ if (#val.errtxt > 0) then
+ val.class = "error"
+ io.write(" class='error'")
+ end
+ io.write(">" .. val.label .. "</DT>")
+ io.write("\n\t\t<DD>")
+ if (viewtype == "viewonly") then
+ io.write(val.value)
+ elseif (val.type == "radio") and (type(val.option) == "table") and (#val.option > 0) then
+ io.write("<span style='display:inline' class='" .. ( val.class or "") .. "'>")
+ for k1,v1 in pairs(val.option) do
+ io.write(tostring(v1.label) .. ":")
+ io.write("<input style='margin-right:20px;margin-left:5px;' type='radio' class='" .. ( val.class or "") .. "' name='" .. val.name .. "'")
+ if (tostring(val.value) == tostring(v1.value)) then io.write(" checked='yes'") end
+ io.write(" value='" .. v1.value .. "'>")
+ end
+ io.write("</input></span>")
+ else
+ io.write(html.form[val.type](val))
+ end
+ if (val.descr) and (#val.descr > 0) then io.write("\n\t\t<P CLASS='descr'>" .. string.gsub(val.descr, "\n", "<BR>") .. "</P>") end
+ if (#val.errtxt > 0) then io.write("\n\t\t<P CLASS='error'>" .. string.gsub(val.errtxt, "\n", "<BR>") .. "</P>") end
+ io.write("\n\t\t</DD>\n")
+ end
+ end
+end
+?>
+
+
+<H1>SYSTEM INFO</H1>
+<DL>
+<?
+local myform = form.status
+local tags = { "status", "version", }
+displayinfo(myform,tags,"viewonly")
+?>
+</DL>
+
+
+<? local myform = form.config ?>
+<form name="cmd" action="" method="POST">
+<h1>CONFIGURATION</h1>
+
+
+<H2>Advanced configuration</H2>
+<H3>Parameters</H3>
+<DL>
+<?
+local tags = { "params_list", "params_list_cmd", }
+displayinfo(myform,tags)
+?>
+</DL>
+
+<H3>Interfaces</H3>
+<DL>
+<?
+local tags = { "interfaces_list", "interfaces_list_cmd", }
+displayinfo(myform,tags)
+?>
+</DL>
+
+
+
+<H3>Defince zones</H3>
+<DL>
+<?
+local tags = { "zones_list", "zones_list_cmd", }
+displayinfo(myform,tags)
+?>
+</DL>
+
+<h3>Default policies</h3>
+<DL>
+<?
+local tags = { "policies_list", "policies_list_cmd",}
+displayinfo(myform,tags)
+?>
+</DL>
+
+<h3>Rules</h3>
+<DL>
+<?
+local tags = { "rules_list", "rules_list_cmd",}
+displayinfo(myform,tags)
+?>
+</DL>
+
+</form>
+
+
+<?
+local cmdform = form.management
+local tags = { "restart" }
+if (cmdform) and (cmdform[tags[1]]) then
+?>
+ <form name="management" action="" method="POST">
+ <H1>MANAGEMENT</H1>
+ <dl>
+ <dt><?= cmdform[tags[1]]["label"] ?></dt>
+ <dd>
+ <? for k,v in pairs(tags) do ?>
+ <? if (cmdform[v]) then ?>
+ <? io.write(html.form[cmdform[v].type](cmdform[v])) ?>
+ <? end ?>
+ <? end ?>
+ </dd>
+
+ <? if (form.cmdmanagement) and (#form.cmdmanagement.descr > 0) then ?>
+ <dt>Previous action result</dt>
+ <dd><pre><?= form.cmdmanagement.descr ?></pre></dd>
+ <? end ?>
+ </dl>
+ </form>
+
+<? end ?>
+
+<? --]] ?>
+
+<?
+---[[ DEBUG INFORMATION
+io.write("<H1>DEBUGGING</H1><span style='color:red'><H2>DEBUG INFO: CFE</H2>")
+io.write(html.cfe_unpack(form))
+io.write("</span>")
+--]]
+?>
diff --git a/shorewall-controller.lua b/shorewall-controller.lua
index efcaa65..b2bc2bb 100644
--- a/shorewall-controller.lua
+++ b/shorewall-controller.lua
@@ -13,16 +13,6 @@ mvc.on_load = function(self, parent)
end
end
-local function getstatus(self)
- local status = self.model.getstatus()
--- if (#status.status.value > 0) then
--- status.status.value = "Enabled"
--- else
--- status.status.value = "Disabled"
--- end
- return status
-end
-
local function displaycmdmanagement(disablestart,disablestop,disablerestart)
-- Add a management buttons
local management = {}
@@ -63,18 +53,36 @@ local function displaycmdsave(self)
end
function status(self)
- return { status=getstatus(self) }
+ return { status=self.model.getstatus() }
end
function config(self)
local config=self.model:getconfig()
- local status=getstatus(self)
+ local status=self.model.getstatus()
+
+ -- Redirect if button is pressed
+ if (self.clientdata.params_list_cmd) then
+ self.conf.action = "edit_params"
+ self.conf.type = "redir"
+ error (self.conf)
+ end
-- Add a [New] record to the options
table.insert(config.interfaces_list.option, "[New]")
table.insert(config.zones_list.option, "[New]")
table.insert(config.policies_list.option, "[New]")
table.insert(config.rules_list.option, "[New]")
+ table.insert(config.params_list.option, "[New]")
+
+ -- Add button
+ config.params_list_cmd = cfe ({
+ name="params_list_cmd",
+ label="Edit above record",
+ value="Edit",
+ type="submit",
+-- disabled="yes",
+ })
+ config.params_list_cmd.descr="Mark a item in above list before pressing [" .. config.params_list_cmd.value .. "]"
-- Add button
config.interfaces_list_cmd = cfe ({
@@ -104,7 +112,7 @@ function config(self)
type="submit",
disabled="yes",
})
- config.zones_list_cmd.descr="Mark a item in above list before pressing [" .. config.zones_list_cmd.value .. "]"
+ config.policies_list_cmd.descr="Mark a item in above list before pressing [" .. config.policies_list_cmd.value .. "]"
-- Add button
config.rules_list_cmd = cfe ({
@@ -114,7 +122,7 @@ function config(self)
type="submit",
disabled="yes",
})
- config.zones_list_cmd.descr="Mark a item in above list before pressing [" .. config.zones_list_cmd.value .. "]"
+ config.rules_list_cmd.descr="Mark a item in above list before pressing [" .. config.rules_list_cmd.value .. "]"
-- Management buttons
-- Display management buttons
@@ -125,77 +133,10 @@ function config(self)
config=config,
management = management,
- }
-end
-
---[=[
-function config(self)
- local cmdmanagement, cmdmanagementresult
- local cmdsavereply = {}
- local cmdsaveresult = {}
- if ( self.clientdata.cmdmanagement) then
- cmdmanagement = cfe({
- name="cmdmanagement",
- value=string.lower(self.clientdata.cmdmanagement),
- })
- cmdmanagementresult, cmdmanagement = self.model:startstop_service( cmdmanagement )
- end
- if ( self.clientdata.cmdsave) then
- local variables="logfile loglevel smallerlogs maxsize numrotate localandnetworklog remotelogging" -- Advanced-config options
--- local variables="remotelogging" -- Guided-config options
- for var in string.gmatch(variables, "%S+") do
- -- Send nil instead of "" causes the parameter to be removed/deleted/empty/unset the variable in the config-file
- if (self.clientdata[var] == "") then self.clientdata[var] = nil end
- cmdsaveresult[var], cmdsavereply[var] = self.model:setconfigs( var,self.clientdata[var] )
- end
- end
-
- local status = getstatus(self)
- local config = self.model.getconfig()
+ clientdata=clientdata,
- -- Write out erros from previous cmdsave actions
- for k,v in pairs(cmdsaveresult) do
- if not (v) then
- config[k]["errtxt"] = tostring(cmdsavereply[k]["errtxt"])
- end
- end
-
- -- Display save button
- config.cmdsave = displaycmdsave()
-
- -- Management buttons
- local disablestart,disablestop,disablerestart
- -- Disable management buttons based on if the process is running or not
- if (string.lower(status.status.value) == "enabled" ) then
- disablestart = "yes"
- else
- disablestop = "yes"
- end
- -- Disable management buttons if there exist errors in the config
- for k,v in pairs(config) do
- if (config[k]["errtxt"] ~= "") then
- disablestart = "yes"
- disablestop = "yes"
- disablerestart = "yes"
- break
- end
- end
- -- Display management buttons
- local management = displaycmdmanagement(disablestart,disablestop,disablerestart)
-
- return {
- option={ script=ENV["SCRIPT_NAME"],
- prefix=self.conf.prefix,
- controller = self.conf.controller,
- action = "config", },
- status = status,
- cmdmanagement = cmdmanagement,
- management = management,
- config = config,
- debugclientdata = self.clientdata,
}
end
---]=]
function check(self)
local cmdmanagement, cmdmanagementresult
@@ -207,40 +148,9 @@ function check(self)
cmdmanagementresult, cmdmanagement = self.model:startstop_service( cmdmanagement )
end
---[[
- -- Save changes
- local modifications = self.clientdata.filecontent or ""
- if ( self.clientdata.cmdsave) then
- modifications = self.model:updatefilecontent(modifications)
- end
---]]
-
- local status = getstatus(self)
+ local status = self.model.getstatus()
local config = self.model:configcheck()
-
- -- Display save button
--- config.cmdsave = displaycmdsave()
-
---[[
- -- Management buttons
- local disablestart,disablestop,disablerestart
- -- Disable management buttons based on if the process is running or not
- if (string.lower(status.status.value) == "enabled" ) then
- disablestart = "yes"
- else
- disablestop = "yes"
- end
- -- Disable management buttons if there exist errors in the config
- for k,v in pairs(config) do
- if (config[k]["errtxt"] ~= "") then
- disablestart = "yes"
- disablestop = "yes"
- disablerestart = "yes"
- break
- end
- end
---]]
-- Display management buttons
local management = displaycmdmanagement(disablestart,disablestop,disablerestart)
@@ -269,43 +179,9 @@ function logfile(self)
cmdmanagementresult, cmdmanagement = self.model:startstop_service( cmdmanagement )
end
---[[
- -- Save changes
- local modifications = self.clientdata.filecontent or ""
- if ( self.clientdata.cmdsave) then
- modifications = self.model:updatefilecontent(modifications)
- end
---]]
- local status = getstatus(self)
+ local status = self.model.getstatus()
local config = self.model:getlogfile()
-
- -- Display save button
--- config.cmdsave = displaycmdsave()
-
---[[
- -- Management buttons
- local disablestart,disablestop,disablerestart
- -- Disable management buttons based on if the process is running or not
- if (string.lower(status.status.value) == "enabled" ) then
- disablestart = "yes"
- else
- disablestop = "yes"
- end
- -- Disable management buttons if there exist errors in the config
- for k,v in pairs(config) do
- if (config[k]["errtxt"] ~= "") then
- disablestart = "yes"
- disablestop = "yes"
- disablerestart = "yes"
- break
- end
- end
-
- -- Display management buttons
- local management = displaycmdmanagement(disablestart,disablestop,disablerestart)
---]]
-
return {
option={ script=ENV["SCRIPT_NAME"],
prefix=self.conf.prefix,
@@ -331,43 +207,9 @@ function expert(self)
cmdmanagementresult, cmdmanagement = self.model:startstop_service( cmdmanagement )
end
---[[
- -- Save changes
- local modifications = self.clientdata.filecontent or ""
- if ( self.clientdata.cmdsave) then
- modifications = self.model:updatefilecontent(modifications)
- end
---]]
- local status = getstatus(self)
+ local status = self.model.getstatus()
local config = self.model:getfilelist()
-
- -- Display save button
--- config.cmdsave = displaycmdsave()
-
---[[
- -- Management buttons
- local disablestart,disablestop,disablerestart
- -- Disable management buttons based on if the process is running or not
- if (string.lower(status.status.value) == "enabled" ) then
- disablestart = "yes"
- else
- disablestop = "yes"
- end
- -- Disable management buttons if there exist errors in the config
- for k,v in pairs(config) do
- if (config[k]["errtxt"] ~= "") then
- disablestart = "yes"
- disablestop = "yes"
- disablerestart = "yes"
- break
- end
- end
-
- -- Display management buttons
- local management = displaycmdmanagement(disablestart,disablestop,disablerestart)
---]]
-
return {
option={ script=ENV["SCRIPT_NAME"],
prefix=self.conf.prefix,
@@ -393,15 +235,14 @@ function edit(self)
cmdmanagementresult, cmdmanagement = self.model:startstop_service( cmdmanagement )
end
----[[
-- Save changes
if ( self.clientdata.cmdsave) then
local filetochange = cfe ({ name=self.clientdata.filename, value=self.clientdata.filecontent, })
modifications = self.model:updatefilecontent(filetochange)
self.clientdata.name = self.clientdata.filename
end
---]]
- local status = getstatus(self)
+
+ local status = self.model.getstatus()
local config = self.model:getfiledetails(cfe({
name="editfile",
value=self.clientdata.name,
@@ -410,28 +251,6 @@ function edit(self)
-- Display save button
config.cmdsave = displaycmdsave()
---[[
- -- Management buttons
- local disablestart,disablestop,disablerestart
- -- Disable management buttons based on if the process is running or not
- if (string.lower(status.status.value) == "enabled" ) then
- disablestart = "yes"
- else
- disablestop = "yes"
- end
- -- Disable management buttons if there exist errors in the config
- for k,v in pairs(config) do
- if (config[k]["errtxt"] ~= "") then
- disablestart = "yes"
- disablestop = "yes"
- disablerestart = "yes"
- break
- end
- end
-
- -- Display management buttons
- local management = displaycmdmanagement(disablestart,disablestop,disablerestart)
---]]
return {
option={ script=ENV["SCRIPT_NAME"],
@@ -448,3 +267,11 @@ function edit(self)
}
end
+
+function edit_params(self)
+
+
+ return {
+ status=status,
+ }
+end
diff --git a/shorewall-model.lua b/shorewall-model.lua
index cecf0a1..081f842 100644
--- a/shorewall-model.lua
+++ b/shorewall-model.lua
@@ -34,6 +34,20 @@ local function getdetails()
return programversion,programstatus,programstate
end
+local function read_config(file)
+ local path = baseurl .. file
+ if not (fs.is_file(path)) then
+ return {}
+ end
+ local filecontent = fs.read_file_as_array(path)
+ local output = {}
+ for k,v in pairs(filecontent) do
+ if not string.find ( v, "^[;#].*" ) then
+ table.insert(output, v)
+ end
+ end
+ return output
+end
-- ################################################################################
-- PUBLIC FUNCTIONS
@@ -51,11 +65,19 @@ end
function getconfig()
local config = {}
+ config.params_list = cfe({
+ name = "params_list",
+ label="List of parameters",
+ type="select",
+ option=read_config("params"),
+ })
+ config.params_list.size=#config.params_list.option + 1
+
config.interfaces_list = cfe({
name = "interfaces_list",
label="List of interfaces",
type="select",
- option={"BRN", "DMZ", "REZ", }
+ option=read_config("interfaces"),
})
config.interfaces_list.size=#config.interfaces_list.option + 1
@@ -63,7 +85,7 @@ function getconfig()
name = "zones_list",
label="List of zones",
type="select",
- option={"BRN", "DMZ", "REZ", }
+ option=read_config("zones"),
})
config.zones_list.size=#config.zones_list.option + 1
@@ -71,7 +93,7 @@ function getconfig()
name = "policies_list",
label="List of policies",
type="select",
- option={"ACCET BRN FW", }
+ option=read_config("policy"),
})
config.policies_list.size=#config.policies_list.option + 1
@@ -79,7 +101,7 @@ function getconfig()
name = "rules_list",
label="List of rules",
type="select",
- option={"ACCET BRN FW", }
+ option=read_config("rules"),
})
config.rules_list.size=#config.rules_list.option + 1