summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--interfaces-controller.lua117
-rw-r--r--interfaces-create-html.lsp161
-rw-r--r--interfaces-editintfile-html.lsp27
-rw-r--r--interfaces-model.lua7
-rw-r--r--interfaces-read-html.lsp7
-rw-r--r--interfaces-status-html.lsp1
6 files changed, 15 insertions, 305 deletions
diff --git a/interfaces-controller.lua b/interfaces-controller.lua
index da963dd..cc3de23 100644
--- a/interfaces-controller.lua
+++ b/interfaces-controller.lua
@@ -1,4 +1,5 @@
-- the interfaces controller
+require("controllerfunctions")
module (..., package.seeall)
@@ -9,131 +10,29 @@ status = function (self)
end
read = function (self)
- local cmdresult
- if self.sessiondata.cmdresult then
- cmdresult = self.sessiondata.cmdresult
- end
- self.sessiondata.cmdresult = nil
-
- local retval = self.model.get_all_interfaces()
- retval.value.cmdresult = cmdresult
- return retval
+ return self.model.get_all_interfaces()
end
--- Accepts form info
--- Returns a cfe object (the form)
update = function(self)
- local name = self.clientdata.name or ""
-
- -- If interface is not found, return to list
- local data = self.model.get_iface_by_name ( name )
- if data.value.name.value == "" then
- redirect(self)
- end
-
- -- If the "Save" button was used, then attempt to do the update
- if self.clientdata.Save then
- -- update the iface info the form gave us
- for k,v in pairs (data.value) do
- if v.type == "boolean" then
- if self.clientdata[k] then
- v.value = true
- else
- v.value = false
- end
- elseif self.clientdata[k] then
- v.value = self.clientdata[k]
- end
- end
-
- data = self.model.update_iface ( data )
-
- -- If validation worked then return to list
- if not data.errtxt then
- data.descr = "Updated Interface"
- end
- end
-
- -- If we reach this point in the function, then we are providing a form
- -- for the user to edit (either first time in, or validation failed)
- data.type = "form"
- data.option = "Save"
- data.label = "Update Interface"
-
- return data
+ return controllerfunctions.handle_form(self, function() return self.model.get_iface_by_name(self.clientdata.name or "") end, self.model.update_iface, self.clientdata, "Save", "Update Interface", "Interface updated")
end
delete = function(self)
- local name = self.clientdata.name or ""
-
- -- Attempt to delete the iface
- local cmdresult = self.model.delete_iface_by_name (name)
- self.sessiondata.cmdresult = cmdresult
- redirect_to_referrer(self)
+ return self:redirect_to_referrer(self.model.delete_iface_by_name(self.clientdata.name or ""))
end
ifup = function(self)
- local name = self.clientdata.name or ""
-
- -- Attempt to delete the iface
- local cmdresult = self.model.ifup_by_name (name)
- self.sessiondata.cmdresult = cmdresult
- redirect_to_referrer(self)
+ return self:redirect_to_referrer(self.model.ifup_by_name(self.clientdata.name or ""))
end
ifdown = function(self)
- local name = self.clientdata.name or ""
-
- -- Attempt to delete the iface
- local cmdresult = self.model.ifdown_by_name (name)
- self.sessiondata.cmdresult = cmdresult
- redirect_to_referrer(self)
+ return self:redirect_to_referrer(self.model.ifdown_by_name(self.clientdata.name or ""))
end
create = function(self)
- local data = self.model.get_iface (self.clientdata.family, self.clientdata.method)
-
- -- If the "Create" button was used, then attempt to do the insert
- if self.clientdata.Create then
- for k,v in pairs (data.value) do
- if self.clientdata[k] then
- v.value = self.clientdata[k]
- end
- end
-
- data = self.model.create_iface ( data )
- if not data.errtxt then
- data.descr = "Created Interface"
- redirect(self, "update?name="..data.value.name.value)
- elseif data.value.method and data.value.method.value == "" then
- data.value.method.errtxt = "Must define method"
- end
- end
-
- if data.value.family and data.value.family.value == "" then
- data.value.family.errtxt = "Must define family"
- end
-
- -- If we reach this point in the function, we are providing a form
- data.type = "form"
- data.option = "Create"
- data.label = "Create Interface"
-
- return data
+ return controllerfunctions.handle_form(self, function() return self.model.get_iface(self.clientdata.family, self.clientdata.method) end, self.model.create_iface, self.clientdata, "Create", "Create Interface", "Interface created", "read")
end
editintfile = function(self)
- local data = self.model.get_file()
-
- if self.clientdata.Save then
- data.value.filecontent.value = self.clientdata.filecontent
- data = self.model.write_file(data)
- data.descr = "Saved file"
- end
-
- data.type = "form"
- data.option = "Save"
- data.label = "Edit Interfaces file"
-
- return data
+ return controllerfunctions.handle_form(self, self.model.get_file, self.model.write_file, self.clientdata, "Save", "Edit Interfaces file", "File saved")
end
diff --git a/interfaces-create-html.lsp b/interfaces-create-html.lsp
deleted file mode 100644
index 13e7181..0000000
--- a/interfaces-create-html.lsp
+++ /dev/null
@@ -1,161 +0,0 @@
-<? local form, viewlibrary, page_info = ...
-require("viewfunctions")
-?>
-
-<script type="text/javascript" src="/js/jquery-latest.js"></script>
-<script type="text/javascript">
- // Here are the optional form entries
- <? -- I'm going to temporarily override the io.write function so I can remove \n from the form items
- local tmpwrite = io.write
- local buffer = {}
- io.write = function(...)
- for i,item in ipairs{...} do
- buffer[#buffer+1] = item
- end
- end
- function outputbuffer()
- print((table.concat(buffer,""):gsub("\n","")))
- buffer = {}
- end
- ?>
- var _address = '<? displayformitem({ name="address", label="Address", value="", type="text" }) ?>';<? outputbuffer() ?>
- var _netmask = '<? displayformitem({ name="netmask", label="Netmask", value="", type="text" }) ?>';<? outputbuffer() ?>
- var _broadcast = '<? displayformitem({ name="broadcast", label="Broadcast address", value="", type="text" }) ?>';<? outputbuffer() ?>
- var _network = '<? displayformitem({ name="network", label="Network address", value="", type="text" }) ?>';<? outputbuffer() ?>
- var _metric = '<? displayformitem({ name="metric", label="Routing metric", value="", type="text" }) ?>';<? outputbuffer() ?>
- var _gateway = '<? displayformitem({ name="gateway", label="Default gateway", value="", type="text" }) ?>';<? outputbuffer() ?>
- var _pointopoint = '<? displayformitem({ name="pointopoint", label="Point-to-point address", value="", type="text" }) ?>';<? outputbuffer() ?>
- var _media = '<? displayformitem({ name="media", label="Medium type", value="", type="text" }) ?>';<? outputbuffer() ?>
- var _hwaddress = '<? displayformitem({ name="hwaddress", label="Hardware address", value="", type="text" }) ?>';<? outputbuffer() ?>
- var _mtu = '<? displayformitem({ name="mtu", label="MTU size", value="", type="text" }) ?>';<? outputbuffer() ?>
- var _hostname = '<? displayformitem({ name="hostname", label="Hostname", value="", type="text" }) ?>';<? outputbuffer() ?>
- var _leasehours = '<? displayformitem({ name="leasehours", label="Preferred lease time (hours)", value="", type="text" }) ?>';<? outputbuffer() ?>
- var _leasetime = '<? displayformitem({ name="leasetime", label="Preferred lease time (seconds)", value="", type="text" }) ?>';<? outputbuffer() ?>
- var _vendor = '<? displayformitem({ name="vendor", label="Vendor class identifier", value="", type="text" }) ?>';<? outputbuffer() ?>
- var _client = '<? displayformitem({ name="client", label="Client identifier", value="", type="text" }) ?>';<? outputbuffer() ?>
- var _bootfile = '<? displayformitem({ name="bootfile", label="Boot file", value="", type="text" }) ?>';<? outputbuffer() ?>
- var _server = '<? displayformitem({ name="server", label="Server address", value="", type="text" }) ?>';<? outputbuffer() ?>
- var _hwaddr = '<? displayformitem({ name="hwaddr", label="Hardware address", value="", type="text" }) ?>';<? outputbuffer() ?>
- var _provider = '<? displayformitem({ name="provider", label="Provider name", value="", type="text" }) ?>';<? outputbuffer() ?>
- var _frame = '<? displayformitem({ name="frame", label="Ethernet frame type", value="", type="text" }) ?>';<? outputbuffer() ?>
- var _netnum = '<? displayformitem({ name="netnum", label="Network number", value="", type="text" }) ?>';<? outputbuffer() ?>
- var _endpoint = '<? displayformitem({ name="endpoint", label="Endpoint address", value="", type="text" }) ?>';<? outputbuffer() ?>
- var _local = '<? displayformitem({ name="local", label="Local address", value="", type="text" }) ?>';<? outputbuffer() ?>
- var _ttl = '<? displayformitem({ name="ttl", label="TTL setting", value="", type="text" }) ?>';<? outputbuffer() ?>
- // Finally, add the different types of method inputs<? outputbuffer() ?>
- var _inetmethod = '<? displayformitem({ name="method", type="select", value="", label="Method", errtxt="Must define method", option={"loopback", "static", "manual", "dhcp", "bootp", "ppp", "wvdial"} }) ?>';<? outputbuffer() ?>
- var _ipxmethod = '<? displayformitem({ name="method", type="select", value="", label="Method", errtxt="Must define method", option={"static", "dynamic"} }) ?>';<? outputbuffer() ?>
- var _inet6method = '<? displayformitem({ name="method", type="select", value="", label="Method", errtxt="Must define method", option={"loopback", "static", "manual", "v4tunnel"} }) ?>';<? outputbuffer() ?>
- <? io.write = tmpwrite ?>
-
- var optionalfields = "address,netmask,broadcast,network,metric,gateway,pointopoint,media,hwaddress,mtu,hostname,leasehours,leasetime,vendor,client,bootfile,server,hwaddr,provider,frame,netnum,endpoint,local,ttl";
- var inetstaticfields = "address,netmask,broadcast,network,metric,gateway,pointopoint,media,hwaddress,mtu";
- var inetdhcpfields = "hostname,leasehours,leasetime,vendor,client,hwaddress";
- var inetbootpfields = "bootfile,server,hwaddr";
- var inetpppfields = "provider";
- var inetwvdialfields = "provider";
- var ipxstaticfields = "frame,netnum";
- var ipxdynamicfields = "frame";
- var inet6staticfields = "address,netmask,gateway,media,hwaddress,mtu";
- var inet6v4tunnelfields = "address,netmask,endpoint,local,gateway,ttl";
-
- function showoptionalfields() {
- var family = $("select[name='family']").val();
- var method = $("select[name='method']").val();
- var fieldstable = ""
- if (family == "inet" && method == "static") fieldstable = inetstaticfields;
- if (family == "inet" && method == "dhcp") fieldstable = inetdhcpfields;
- if (family == "inet" && method == "bootp") fieldstable = inetbootpfields;
- if (family == "inet" && method == "ppp") fieldstable = inetpppfields;
- if (family == "inet" && method == "wvdial") fieldstable = inetwvdialfields;
- if (family == "ipx" && method == "static") fieldstable = ipxstaticfields;
- if (family == "ipx" && method == "dynamic") fieldstable = ipxdynamicfields;
- if (family == "inet6" && method == "static") fieldstable = inet6staticfields;
- if (family == "inet6" && method == "v4tunnel") fieldstable = inet6v4tunnelfields;
-
- // show / hide all of the optional inputs
- var visiblearray = fieldstable.split(',');
- var optionalarray = optionalfields.split(',');
- $("input").each(function() {
- if (jQuery.inArray($(this).attr('name'), optionalarray)!=-1) {
- if (jQuery.inArray($(this).attr('name'), visiblearray)==-1) {
- $(this).parent().hide().prev().hide();
- } else {
- $(this).parent().show().prev().show();
- }
- }
- });
- }
- function methodchange() {
- $(this).removeClass('error').siblings().remove();
- $(this).parent().prev().removeClass('error');
- $(this).find("option").remove("*:contains('[')");
- //$(this).remove("option:contains('[')");
- showoptionalfields();
- }
- function familychange() {
- $(this).removeClass('error').siblings().remove();
- $(this).parent().prev().removeClass('error');
- $(this).find("option").remove("*:contains('[')");
- //$(this).remove("option:contains('[')");
- var method = $("select[name='method']");
- var newmethod = ""
- if ($(this).val() == "inet") { newmethod = _inetmethod; }
- if ($(this).val() == "ipx") { newmethod = _ipxmethod; }
- if ($(this).val() == "inet6") { newmethod = _inet6method; }
- if (method.length == 1) {
- method.parent().prev().remove().end().replaceWith(newmethod);
- } else {
- $(this).parent().after(newmethod);
- }
- $("select[name='method']").change(methodchange);
- showoptionalfields();
- }
- $(function(){
- $("select[name='family']").change(familychange);
- $("select[name='method']").change(methodchange);
- var end = $(".submit").parent().prev();
- if($("input[name='address']").length==0) end.before(_address);
- if($("input[name='netmask']").length==0) end.before(_netmask);
- if($("input[name='broadcast']").length==0) end.before(_broadcast);
- if($("input[name='network']").length==0) end.before(_network);
- if($("input[name='metric']").length==0) end.before(_metric);
- if($("input[name='gateway']").length==0) end.before(_gateway);
- if($("input[name='pointopoint']").length==0) end.before(_pointopoint);
- if($("input[name='media']").length==0) end.before(_media);
- if($("input[name='hwaddress']").length==0) end.before(_hwaddress);
- if($("input[name='mtu']").length==0) end.before(_mtu);
- if($("input[name='hostname']").length==0) end.before(_hostname);
- if($("input[name='leasehours']").length==0) end.before(_leasehours);
- if($("input[name='leasetime']").length==0) end.before(_leasetime);
- if($("input[name='vendor']").length==0) end.before(_vendor);
- if($("input[name='client']").length==0) end.before(_client);
- if($("input[name='bootfile']").length==0) end.before(_bootfile);
- if($("input[name='server']").length==0) end.before(_server);
- if($("input[name='hwaddr']").length==0) end.before(_hwaddr);
- if($("input[name='provider']").length==0) end.before(_provider);
- if($("input[name='frame']").length==0) end.before(_frame);
- if($("input[name='netnum']").length==0) end.before(_netnum);
- if($("input[name='endpoint']").length==0) end.before(_endpoint);
- if($("input[name='local']").length==0) end.before(_local);
- if($("input[name='ttl']").length==0) end.before(_ttl);
- showoptionalfields();
- });
-</script>
-
-<?
---[[ 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>")
---]]
-?>
-
-<h1><?= form.label ?><? if page_info.action == "update" then io.write(" - "..form.value.name.value) end ?></h1>
-<?
- if page_info.action == "update" then
- form.value.name.contenteditable = false
- end
- local order = {"name", "comment", "auto", "family", "method", "pre-up", "up", "down", "post-down"}
- displayform(form, order)
-?>
diff --git a/interfaces-editintfile-html.lsp b/interfaces-editintfile-html.lsp
deleted file mode 100644
index 4b1f80b..0000000
--- a/interfaces-editintfile-html.lsp
+++ /dev/null
@@ -1,27 +0,0 @@
-<? local form = ...
-require("viewfunctions")
-?>
-<?
---[[ 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>")
---]]
-?>
-
-<h1>File Details</h1>
-<DL>
-<? displayitem(form.value.filename) ?>
-<? displayitem(form.value.filesize) ?>
-<? displayitem(form.value.mtime) ?>
-</DL>
-
-<h1><?= form.label ?></h1>
-<? if form.descr then ?><P CLASS='descr'><?= string.gsub(form.descr, "\n", "<BR>") ?></P><? end ?>
-<? if form.errtxt then ?><P CLASS='error'><?= string.gsub(form.errtxt, "\n", "<BR>") ?></P><? end ?>
-<form action="" method="POST">
-<textarea name="filecontent">
-<?= form.value.filecontent.value ?>
-</textarea>
-<DL><DT><input class="submit" type="submit" name="<?= form.option ?>" value="Save"></DT></DL>
-</form>
diff --git a/interfaces-model.lua b/interfaces-model.lua
index 776cd6f..bfa9bb8 100644
--- a/interfaces-model.lua
+++ b/interfaces-model.lua
@@ -280,11 +280,14 @@ iface.add_after = function (def, name)
end
iface.read = function (name)
- -- if the name is blank, then return nil
+ -- if the name is blank, then return a blank iface with error
iface.unpack_interfaces()
local rc, idx = iface.index(name)
if rc == false then
- return nil
+ local ret = iface.iface_type()
+ ret.value.name.value = name
+ ret.value.name.errtxt = "Interface does not exist"
+ return ret
end
return iface.array[idx]
end
diff --git a/interfaces-read-html.lsp b/interfaces-read-html.lsp
index 33ab30f..54908cf 100644
--- a/interfaces-read-html.lsp
+++ b/interfaces-read-html.lsp
@@ -19,12 +19,7 @@ io.write("</span>")
<? end ?>
<? end ?>
-<? if view.value.cmdresult then ?>
-<H1>Command Result</H1>
-<DL>
-<?= view.value.cmdresult.value ?>
-</DL>
-<? end ?>
+<? displaycommandresults({"delete", "ifup", "ifdown"}, session) ?>
<? if viewlibrary and viewlibrary.dispatch_component then
viewlibrary.dispatch_component("status")
diff --git a/interfaces-status-html.lsp b/interfaces-status-html.lsp
index 52237b1..aa36c99 100644
--- a/interfaces-status-html.lsp
+++ b/interfaces-status-html.lsp
@@ -1,4 +1,5 @@
<? local view = ... ?>
+<? require("viewfunctions") ?>
<?
--[[ DEBUG INFORMATION
io.write("<H1>DEBUGGING</H1><span style='color:red'><H2>DEBUG INFO: CFE</H2>")