diff options
-rw-r--r-- | interfaces-controller.lua | 117 | ||||
-rw-r--r-- | interfaces-create-html.lsp | 161 | ||||
-rw-r--r-- | interfaces-editintfile-html.lsp | 27 | ||||
-rw-r--r-- | interfaces-model.lua | 7 | ||||
-rw-r--r-- | interfaces-read-html.lsp | 7 | ||||
-rw-r--r-- | interfaces-status-html.lsp | 1 |
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>") |