summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTed Trask <ttrask01@yahoo.com>2008-11-22 15:00:05 +0000
committerTed Trask <ttrask01@yahoo.com>2008-11-22 15:00:05 +0000
commitd41ac890afab7ceea8e89907b1d8b5b0fa825498 (patch)
tree0e045fd874d807326c15ddcc9cf8bfab592ccee2
parentb29f2da408e9654c90d2a183b11025c4f1fa53eb (diff)
downloadacf-squid-d41ac890afab7ceea8e89907b1d8b5b0fa825498.tar.bz2
acf-squid-d41ac890afab7ceea8e89907b1d8b5b0fa825498.tar.xz
Enhanced squid to view and edit files within /etc/squid.
git-svn-id: svn://svn.alpinelinux.org/acf/squid/trunk@1609 ab2d0c66-481e-0410-8bed-d214d4d58bed
-rw-r--r--squid-controller.lua16
l---------squid-createfile-html.lsp1
l---------squid-editfile-html.lsp1
-rw-r--r--squid-listfiles-html.lsp37
-rw-r--r--squid-model.lua63
-rw-r--r--squid.menu1
-rw-r--r--squid.roles4
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
diff --git a/squid.menu b/squid.menu
index 58c413f..1b76392 100644
--- a/squid.menu
+++ b/squid.menu
@@ -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