diff options
-rw-r--r-- | Makefile | 44 | ||||
-rw-r--r-- | README | 0 | ||||
-rw-r--r-- | asterisk-controller.lua | 23 | ||||
l--------- | asterisk-edit-html.lsp | 1 | ||||
-rw-r--r-- | asterisk-listfiles-html.lsp | 28 | ||||
-rw-r--r-- | asterisk-model.lua | 68 | ||||
-rw-r--r-- | asterisk-startstop-html.lsp | 24 | ||||
l--------- | asterisk-status-html.lsp | 1 | ||||
-rw-r--r-- | asterisk.menu | 4 | ||||
-rw-r--r-- | asterisk.roles | 3 | ||||
-rw-r--r-- | config.mk | 11 |
11 files changed, 207 insertions, 0 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..50c1bc5 --- /dev/null +++ b/Makefile @@ -0,0 +1,44 @@ +APP_NAME=asterisk +PACKAGE=acf-$(APP_NAME) +VERSION=0.1.0 + +APP_DIST=\ + asterisk* \ + + +EXTRA_DIST=README Makefile config.mk + +DISTFILES=$(APP_DIST) $(EXTRA_DIST) + +TAR=tar + +P=$(PACKAGE)-$(VERSION) +tarball=$(P).tar.bz2 +install_dir=$(DESTDIR)/$(appdir)/$(APP_NAME) + +all: +clean: + rm -rf $(tarball) $(P) + +dist: $(tarball) + +install: + mkdir -p "$(install_dir)" + cp -a $(APP_DIST) "$(install_dir)" + +$(tarball): $(DISTFILES) + rm -rf $(P) + mkdir -p $(P) + cp -a $(DISTFILES) $(P) + $(TAR) -jcf $@ $(P) + rm -rf $(P) + +# target that creates a tar package, unpacks is and install from package +dist-install: $(tarball) + $(TAR) -jxf $(tarball) + $(MAKE) -C $(P) install DESTDIR=$(DESTDIR) + rm -rf $(P) + +include config.mk + +.PHONY: all clean dist install dist-install diff --git a/asterisk-controller.lua b/asterisk-controller.lua new file mode 100644 index 0000000..d771230 --- /dev/null +++ b/asterisk-controller.lua @@ -0,0 +1,23 @@ +-- the squid controller + +module (..., package.seeall) + +require("controllerfunctions") + +default_action = "status" + +status = function( self ) + return self.model.get_status() +end + +startstop = function( self ) + return controllerfunctions.handle_startstop(self, self.model.startstop_service, self.model.get_status, self.clientdata) +end + +listfiles = function( self ) + return self.model.list_files() +end + +edit = function( self ) + return controllerfunctions.handle_form(self, function() return self.model.get_file(self.clientdata.filename) end, self.model.update_file, self.clientdata, "Save", "Edit File", "File Saved") +end diff --git a/asterisk-edit-html.lsp b/asterisk-edit-html.lsp new file mode 120000 index 0000000..15b1930 --- /dev/null +++ b/asterisk-edit-html.lsp @@ -0,0 +1 @@ +../filedetails-html.lsp
\ No newline at end of file diff --git a/asterisk-listfiles-html.lsp b/asterisk-listfiles-html.lsp new file mode 100644 index 0000000..0719f76 --- /dev/null +++ b/asterisk-listfiles-html.lsp @@ -0,0 +1,28 @@ +<% local view, viewlibrary, page_info, session = ... +require("viewfunctions") +%> + +<% displaycommandresults({"edit", "startstop"}, session) %> + +<% if viewlibrary and viewlibrary.dispatch_component then + viewlibrary.dispatch_component("status") +end %> + +<h1>Configuration</h1> +<TABLE> + <TR style="background:#eee;font-weight:bold;"> + <TD style="padding-right:20px;white-space:nowrap;text-align:left;" class="header">File</TD> + <TD style="padding-right:20px;white-space:nowrap;text-align:left;" class="header">Size</TD> + <TD style="white-space:nowrap;text-align:left;" class="header">Last Modified</TD> + </TR> + +<% + for k,v in ipairs( view.value ) do + io.write( "<tr><td><a href=\"" .. html.html_escape(page_info.script .. page_info.prefix .. page_info.controller) .. "/edit?filename=" .. html.html_escape(v.filename) .. "&redir=" .. html.html_escape(page_info.orig_action) .. "\">" .. html.html_escape(v.filename) .. "</a></td><td>" .. html.html_escape(v.size) .."</td><td>" .. html.html_escape(v.mtime) .."</td></tr>\n" ) + end +%> +</TABLE> + +<% if viewlibrary and viewlibrary.dispatch_component then + viewlibrary.dispatch_component("startstop") +end %> diff --git a/asterisk-model.lua b/asterisk-model.lua new file mode 100644 index 0000000..297656e --- /dev/null +++ b/asterisk-model.lua @@ -0,0 +1,68 @@ +-- Copyright(c) 2007 A. Brodmann - Licensed under terms of GPL2 +module (..., package.seeall) + +-- Load libraries +require("modelfunctions") +--require "posix" +require("fs") +require("format") +require("validator") + +-- Set variables +local processname = "asterisk" +local packagename = "asterisk" +local baseurl = "/etc/asterisk" + +-- ################################################################################ +-- LOCAL FUNCTIONS + +local is_valid_filename = function(filename) + local dirname = dirname(filename) + return validator.is_valid_filename(filename) and string.match(dirname, baseurl) and not string.match(dirname, "%.%.") +end + +-- ################################################################################ +-- PUBLIC FUNCTIONS + +get_status = function() + return modelfunctions.getstatus(processname, packagename, "Asterisk Status") +end + +-- local implementation to add reload actions +function startstop_service(action) + local cmdresult = cfe({ label="Start/Stop result" }) + + if (string.lower(action) == "start") or (string.lower(action) == "stop") or (string.lower(action) == "restart") or (string.lower(action) == "reload") then + local file = io.popen( "PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin /etc/init.d/" .. + processname .. " " .. string.lower(action) .. " 2>&1" ) + if file ~= nil then + cmdresult.value = file:read( "*a" ) + file:close() + end + posix.sleep(2) -- Wait for the process to start|stop + else + cmdresult.errtxt = "Unknown command!" + end + return cmdresult +end + +get_file = function(filename) + return modelfunctions.getfiledetails(filename, is_valid_filename) +end + +update_file = function(filedetails) + return modelfunctions.setfiledetails(filedetails, is_valid_filename) +end + +list_files = function() + local retval = {} + for file in fs.find(null, baseurl) do + local details = fs.stat(file) + if details.type == "regular" then + details.filename = file + table.insert(retval, details) + end + end + table.sort(retval, function(a,b) return a.filename < b.filename end) + return cfe({ type="structure", value=retval, label="List of Asterisk files" }) +end diff --git a/asterisk-startstop-html.lsp b/asterisk-startstop-html.lsp new file mode 100644 index 0000000..c497c49 --- /dev/null +++ b/asterisk-startstop-html.lsp @@ -0,0 +1,24 @@ +<% local data, viewlibrary, page_info = ... %> + +<H1>Management</H1> +<DL> +<form action="<%= html.html_escape(page_info.script .. page_info.prefix .. page_info.controller .. "/" .. page_info.action) %>" method="POST"> +<DT>Program control-panel</DT> +<DD> +<input class="submit" type="submit" name="action" value="Start" <% if data.value.status.value== "Running" then io.write("disabled") end %>> +<input class="submit" type="submit" name="action" value="Stop" <% if data.value.status.value== "Stopped" then io.write("disabled") end %>> +<input class="submit" type="submit" name="action" value="Restart" <% if data.value.status.value== "Stopped" then io.write("disabled") end %>> +<input class="submit" type="submit" name="action" value="Reload" <% if data.value.status.value== "Stopped" then io.write("disabled") end %>> +</DD> +</form> + +<% if data.value.result then %> +<DT>Previous action result</DT> +<DD> +<% if data.value.result.value ~= "" then %> +<P CLASS='descr'><%= string.gsub(html.html_escape(data.value.result.value), "\n", "<BR>") %></P> +<% end if data.value.result.errtxt then %> +<P CLASS='error'><%= string.gsub(html.html_escape(data.value.result.errtxt), "\n", "<BR>") %></P> +<% end end %> +</DD> +</DL> diff --git a/asterisk-status-html.lsp b/asterisk-status-html.lsp new file mode 120000 index 0000000..b2f8480 --- /dev/null +++ b/asterisk-status-html.lsp @@ -0,0 +1 @@ +../status-html.lsp
\ No newline at end of file diff --git a/asterisk.menu b/asterisk.menu new file mode 100644 index 0000000..f945fd5 --- /dev/null +++ b/asterisk.menu @@ -0,0 +1,4 @@ +# Prefix and controller are already known at this point +# Cat Group Tab Action +Applications 85Asterisk Status status +Applications 85Asterisk Expert listfiles diff --git a/asterisk.roles b/asterisk.roles new file mode 100644 index 0000000..60cc2bf --- /dev/null +++ b/asterisk.roles @@ -0,0 +1,3 @@ +USER=asterisk:status,asterisk:startstop +EXPERT=asterisk:listfiles,asterisk:edit +ADMIN=asterisk:status,asterisk:startstop,asterisk:listfiles,asterisk:edit diff --git a/config.mk b/config.mk new file mode 100644 index 0000000..b859a2b --- /dev/null +++ b/config.mk @@ -0,0 +1,11 @@ +prefix=/usr +datadir=${prefix}/share +sysconfdir=${prefix}/etc +localstatedir=${prefix}/var +acfdir=${datadir}/acf +wwwdir=${acfdir}/www +cgibindir=${acfdir}/cgi-bin +appdir=${acfdir}/app +acflibdir=${acfdir}/lib +sessionsdir=${localstatedir}/lib/acf/sessions +squid-cfg-dir=/etc/squid |