diff options
-rw-r--r-- | squid-controller.lua | 16 | ||||
l--------- | squid-createfile-html.lsp | 1 | ||||
l--------- | squid-editfile-html.lsp | 1 | ||||
-rw-r--r-- | squid-listfiles-html.lsp | 37 | ||||
-rw-r--r-- | squid-model.lua | 63 | ||||
-rw-r--r-- | squid.menu | 1 | ||||
-rw-r--r-- | squid.roles | 4 |
7 files changed, 121 insertions, 2 deletions
diff --git a/squid-controller.lua b/squid-controller.lua index cda4b7f..1cd1280 100644 --- a/squid-controller.lua +++ b/squid-controller.lua @@ -61,3 +61,19 @@ deleteacl = function( self ) return self:redirect_to_referrer(self.model.delete_acl(self.clientdata.linenum)) end --]] + +function listfiles(self) + return self.model.listfiles(self) +end + +function createfile(self) + return controllerfunctions.handle_form(self, self.model.getnewfile, self.model.createfile, self.clientdata, "Create", "Create New Squid File", "Squid File Created") +end + +function editfile(self) + return controllerfunctions.handle_form(self, function() return self.model.readfile(self.clientdata.filename) end, self.model.updatefile, self.clientdata, "Save", "Edit Squid File", "Squid File Saved" ) +end + +function deletefile(self) + return self:redirect_to_referrer(self.model.deletefile(self.clientdata.filename)) +end diff --git a/squid-createfile-html.lsp b/squid-createfile-html.lsp new file mode 120000 index 0000000..4b6b762 --- /dev/null +++ b/squid-createfile-html.lsp @@ -0,0 +1 @@ +../form-html.lsp
\ No newline at end of file diff --git a/squid-editfile-html.lsp b/squid-editfile-html.lsp new file mode 120000 index 0000000..15b1930 --- /dev/null +++ b/squid-editfile-html.lsp @@ -0,0 +1 @@ +../filedetails-html.lsp
\ No newline at end of file diff --git a/squid-listfiles-html.lsp b/squid-listfiles-html.lsp new file mode 100644 index 0000000..0fc6a1e --- /dev/null +++ b/squid-listfiles-html.lsp @@ -0,0 +1,37 @@ +<% local view, viewlibrary, page_info, session = ... +require("viewfunctions") +%> + +<% displaycommandresults({"editfile", "deletefile"}, session) %> +<% displaycommandresults({"createfile"}, session, true) %> + +<H1>Files</H1> +<DL> +<TABLE> + <TR style="background:#eee;font-weight:bold;"> + <TD style="padding-right:20px;white-space:nowrap;text-align:left;" class="header">Action</TD> + <TD style="white-space:nowrap;text-align:left;" class="header">File</TD> + </TR> +<% for i,file in ipairs(view.value) do %> + <TR> + <TD style="padding-right:20px;white-space:nowrap;"> + <% if session.permissions.squid.editfile then %> + <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/editfile?filename="..file.."&redir="..page_info.orig_action, label="Edit "} %> + <% end %> + <% if session.permissions.squid.deletefile then %> + <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/deletefile?filename="..file, label="Delete "} %> + <% end %> + </TD> + <TD style="white-space:nowrap;"><%= file %></TD> + </TR> +<% end %> +</TABLE> +</DL> + +<% if viewlibrary and viewlibrary.dispatch_component and session.permissions.squid.createfile then + local createform = viewlibrary.dispatch_component("createfile", nil, true) %> +<H2><%= createform.label %></H2> +<% + createform.action = page_info.script .. page_info.prefix .. page_info.controller .. "/createfile" + displayform(createform) +end %> diff --git a/squid-model.lua b/squid-model.lua index a726b96..ab2dc5c 100644 --- a/squid-model.lua +++ b/squid-model.lua @@ -12,6 +12,7 @@ local squidconf = "/etc/squid/squid.conf" local squiddigestusers = "/etc/squid/users.list" local processname = "squid" local packagename = "squid" +local baseurl = "/etc/squid/" local config, configcontent @@ -384,3 +385,65 @@ delete_acl = function(linenum) return acl end --]] + +function listfiles() + local retval = cfe({ type="list", value={}, label="Squid Files" }) + if not fs.is_dir(baseurl) then posix.mkdir(baseurl) end + for file in posix.files(baseurl) do + file = baseurl..file + if fs.is_file(file) and file ~= squidconf and file ~= squiddigestusers then + table.insert(retval.value, file) + end + end + return retval +end + +function getnewfile() + local filename = cfe({ label="File Name", descr="Must be in "..baseurl }) + return cfe({ type="group", value={filename=filename}, label="Squid File" }) +end + +function createfile(filedetails) + local success = true + + if not validator.is_valid_filename(filedetails.value.filename.value, baseurl) then + success = false + filedetails.value.filename.errtxt = "Invalid filename" + else + if not fs.is_dir(baseurl) then posix.mkdir(baseurl) end + if posix.stat(filedetails.value.filename.value) then + success = false + filedetails.value.filename.errtxt = "Filename already exists" + end + end + + if success then + fs.create_file(filedetails.value.filename.value) + else + filedetails.errtxt = "Failed to Create File" + end + + return filedetails +end + +function readfile(filename) + return modelfunctions.getfiledetails(filename, listfiles().value) +end + +function updatefile(filedetails) + return modelfunctions.setfiledetails(filedetails, listfiles().value) +end + +function deletefile(filename) + local retval = cfe({ label="Delete Squid File result", errtxt = "Failed to delete Squid File - invalid filename" }) + for i,file in ipairs(listfiles().value) do + if filename == file then + retval.value = "Deleted Squid File" + retval.errtxt = nil + os.remove(filename) + break + end + end + + return retval +end @@ -3,4 +3,5 @@ Applications 10Web_Proxy Status status Applications 10Web_Proxy Config config Applications 10Web_Proxy Digest_Authentication digest +Applications 10Web_Proxy Files listfiles Applications 10Web_Proxy Expert expert diff --git a/squid.roles b/squid.roles index cde5fe0..f7474a6 100644 --- a/squid.roles +++ b/squid.roles @@ -1,4 +1,4 @@ USER=squid:status,squid:startstop -EDITOR=squid:digest,squid:enabledigestlist,squid:config +EDITOR=squid:digest,squid:enabledigestlist,squid:config,squid:listfiles,squid:createfile,squid:deletefile,squid:editfile EXPERT=squid:expert -ADMIN=squid:status,squid:startstop,squid:digest,squid:enabledigestlist,squid:config,squid:expert +ADMIN=squid:status,squid:startstop,squid:digest,squid:enabledigestlist,squid:config,squid:listfiles,squid:createfile,squid:deletefile,squid:editfile,squid:expert |