summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile43
-rw-r--r--config.mk10
-rw-r--r--openntpd-advanced-html.lsp39
-rw-r--r--openntpd-controller.lua34
-rw-r--r--openntpd-model.lua118
-rw-r--r--openntpd-read-html.lsp69
-rw-r--r--openntpd.menu2
7 files changed, 315 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..eff3741
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,43 @@
+APP_NAME=openntpd
+PACKAGE=acf-$(APP_NAME)
+VERSION=1.0_alpha1
+
+APP_DIST=openntpd.menu
+
+
+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 $(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/config.mk b/config.mk
new file mode 100644
index 0000000..45f4d21
--- /dev/null
+++ b/config.mk
@@ -0,0 +1,10 @@
+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
diff --git a/openntpd-advanced-html.lsp b/openntpd-advanced-html.lsp
new file mode 100644
index 0000000..5cb8104
--- /dev/null
+++ b/openntpd-advanced-html.lsp
@@ -0,0 +1,39 @@
+<? local view = ... ?>
+
+<?
+--[[ DEBUG INFORMATION
+require("debugs")
+io.write(debugs.variables(view))
+--]]
+?>
+
+<h1>System time</h1>
+
+<h2>MENU</h2>
+
+<dt><?= html.link{value = view.url .. "/", label="Home" } ?></dt>
+<dd>Go back to start page</dd>
+
+<h2>Details</h2>
+
+<dt>File name</dt>
+<dd><?= view.filecontent.filedetails.longname ?></dd>
+
+<dt>File size</dt>
+<dd><?= view.filecontent.filedetails.size ?></dd>
+
+<dt>Last modified</dt>
+<dd><?= view.filecontent.filedetails.mtimelong ?></dd>
+
+<? if (view.filecontent.errtxt) then ?>
+<dt>Error message</dt>
+<dd class="error"><?= view.filecontent.errtxt ?></dd>
+<? end ?>
+
+<h2>Content</h2>
+<form name="myform" action="" method="POST">
+<input name="name" type=hidden value="<?= view.filecontent.filedetails.name ?>" style="width:100%">
+<textarea name="modifications" style="width:100%;height:360px;"><?= view.filecontent.value ?></textarea>
+
+<input type="submit" name="cmd" value="update"></form>
+
diff --git a/openntpd-controller.lua b/openntpd-controller.lua
new file mode 100644
index 0000000..d298b1d
--- /dev/null
+++ b/openntpd-controller.lua
@@ -0,0 +1,34 @@
+module (..., package.seeall)
+
+-- Cause an http redirect to our "read" action
+-- We use the self.conf table because it already has prefix,controller,etc
+-- The redir code is defined in the application error handler (acf-controller)
+local list_redir = function (self)
+ self.conf.action = "read"
+ self.conf.type = "redir"
+ error (self.conf)
+end
+
+mvc={}
+mvc.on_load = function(self, parent)
+ if (self.worker[self.conf.action] == nil ) or ( self.conf.action == "init" ) then
+ self.worker[self.conf.action] = list_redir(self)
+ end
+end
+
+
+read = function (self)
+ return ( {filecontent = self.model:get(), url = ENV["SCRIPT_NAME"] .. self.conf.prefix .. self.conf.controller } )
+end
+
+advanced = function (self)
+ local filecontent = self.clientdata.modifications or ""
+ if ( filecontent ~= "") then
+ local me = ( {filecontent = self.model:update_filecontent(filecontent), url = ENV["SCRIPT_NAME"] .. self.conf.prefix .. self.conf.controller } )
+ list_redir(self)
+ else
+ local me = ( {filecontent = self.model:get_filecontent(), url = ENV["SCRIPT_NAME"] .. self.conf.prefix .. self.conf.controller } )
+ return me
+ end
+end
+
diff --git a/openntpd-model.lua b/openntpd-model.lua
new file mode 100644
index 0000000..742c64a
--- /dev/null
+++ b/openntpd-model.lua
@@ -0,0 +1,118 @@
+module (..., package.seeall)
+
+require("format")
+require("fs")
+
+local ntpdconfig = "/etc/ntpd.conf"
+local progname = "openntpd"
+
+local function config_content( f )
+ local config = {}
+ config.name = f
+ local conf_file = fs.read_file_as_array ( config.name )
+ for i=1,table.maxn(conf_file) do
+ local l = conf_file[i]
+ -- Filter out commented lines
+ if not string.find ( l, "^[;#].*" ) then
+ local a,b,c = string.match ( l, "^%s*(%S+)%s*(%S*)%s*(%S*).*$" )
+ if (a) then
+ if not (config[string.lower(a)]) then
+ config[string.lower(a)] = {}
+ end
+ if (string.lower(a) == "listen") then
+ table.insert (config[string.lower(a)], {value=c} )
+ else
+ table.insert (config[string.lower(a)], {value=b} )
+ end
+ end
+ end
+ end
+ return config
+end
+
+local function file_info ( path )
+ require("posix")
+ local filedetails = posix.stat(path)
+ filedetails["owner"]=rawget((posix.getpasswd(filedetails["uid"])),"name")
+ filedetails["group"]=rawget((posix.getgroup(filedetails["gid"])),"name")
+ filedetails["atimelong"]=os.date("%c", filedetails["atime"])
+ filedetails["mtimelong"]=os.date("%c", filedetails["mtime"])
+ filedetails["longname"]=path
+ filedetails["name"]=basename(path)
+
+ if ( filedetails["size"] > 1073741824 ) then
+ filedetails["size"]=((filedetails["size"]/1073741824) - (filedetails["size"]/1073741824%0.1)) .. "G"
+ elseif ( filedetails["size"] > 1048576 ) then
+ filedetails["size"]=((filedetails["size"]/1048576) - (filedetails["size"]/1048576%0.1)) .. "M"
+ elseif ( filedetails["size"] > 1024 ) then
+ filedetails["size"]=((filedetails["size"]/1024) - (filedetails["size"]/1024%0.1)) .. "k"
+ else
+ filedetails["size"]=filedetails["size"]
+ end
+ return filedetails
+end
+
+local function get_version ()
+ local f,error = io.popen("/sbin/apk_version -v -s openntpd")
+ local programversion = f:read("*a")
+ f:close()
+ return programversion
+end
+
+
+-- ################################################################################
+-- PUBLIC FUNCTIONS
+--[[
+function restart_service ()
+ local f,err = io.popen("/etc/init.d/shorewall restart")
+ local restart = f:read("*a")
+ f:close()
+ local status = get_status()
+ status.restart = restart
+ return status
+end
+--]]
+--[[
+function get_status ()
+ local f,error = io.popen("/sbin/shorewall status")
+ local fake = f:read("*l")
+ local fake = f:read("*l")
+ local programstatus = f:read("*l")
+ local programstate = f:read("*l")
+ f:close()
+ local f,error = io.popen("/sbin/shorewall version")
+ local programversion = f:read("*l")
+ f:close()
+ return {programversion=programversion,programstatus=programstatus,programstate=programstate}
+end
+--]]
+
+function get ()
+ local path = ntpdconfig
+ config = config_content ( path )
+ config["version"] = get_version()
+ return config
+end
+
+function get_filecontent (self)
+ local path = ntpdconfig
+ file_content = nil
+ if (fs.is_file(path)) then
+ local filedetails = file_info(path)
+ local file = io.open( path )
+ local file_result = file:read("*a") or "unknown"
+ file:close()
+ file_content = {name=name, value=file_result, filedetails=filedetails}
+ else
+ file_content = {value="", errtxt="File is missing, but will be created when you save your new settings",filedetails={longname=path, size="0", mtimelong=""}}
+ end
+ return file_content
+end
+
+function update_filecontent (self, modifications)
+ local path = ntpdconfig
+ local file_result,err = fs.write_file(path, format.dostounix(modifications))
+ file_content = get_filecontent()
+ return file_content
+end
+
diff --git a/openntpd-read-html.lsp b/openntpd-read-html.lsp
new file mode 100644
index 0000000..5beee8e
--- /dev/null
+++ b/openntpd-read-html.lsp
@@ -0,0 +1,69 @@
+<? local view = ... ?>
+
+<h1>System time</h1>
+
+<h2>SYSTEM INFO</h2>
+
+<dt>Program version</dt>
+<dd>xxx</dd>
+
+<dt>Process running or not</dt>
+<dd>xxx</dd>
+
+<dt>Current time</dt>
+<dd>yyy-mm-dd hh:mm:ss</dd>
+
+<dt>TimeZone</dt>
+<dd>xxx</dd>
+
+<h2>NTPD SETTINGS</h2>
+
+<dt>Set time immediately at startup</dt>
+<dd><input type="checkbox" name=""></dd>
+
+<h3>'SET TIME' OPTIONS</h3>
+<dt>Timeserver hosts...</dt>
+<dd>
+<select name="" size="3" style="width:200px;">
+<? for i = 1, table.maxn(view.filecontent.servers) do ?>
+ <option name="<? io.write(view.filecontent.servers[i].value) ?>"><? io.write(view.filecontent.servers[i].value) ?></option>
+<? end ?>
+</select><BR>
+In most cases you could use <i><b>pool.ntp.org</b></i> or <i><b>[countryname].pool.ntp.org</i></b> (if listed in <i><b>http://www.pool.ntp.org/</b></i>).
+</dd>
+
+<dt>Delete selected host</dt>
+<dd><input type="submit" value="Delete"> (see above)</dd>
+
+<dt>Add new host</dt>
+<dd><input type="text" name="" value=""> <input type="submit" value="Add"></dd>
+
+<h3>'PRESENT TIME' OPTIONS (ACT AS TIME SERVER)</h3>
+<dt>Listen on address...</dt>
+<dd>
+<select name="" size="3" style="width:200px;">
+<? ---[[
+if (view.filecontent.listen) then
+for i = 1, table.maxn(view.filecontent.listen) do ?>
+ <option name="<? io.write(view.filecontent.listen[i].value) ?>"><? io.write(view.filecontent.listen[i].value) ?></option>
+<? end end--]]?>
+</select><BR>Empty list = Not listening or acting as server; "*" = All local addresses
+</dd>
+
+<dt>Delete selected address</dt>
+<dd><input type="submit" value="Delete"> (see above)</dd>
+
+
+<dt>Add new listen address</dt>
+<dd><input type="text" name="" value=""> <input type="submit" value="Add"></dd>
+
+
+
+
+
+<?
+---[[ DEBUG INFORMATION
+require("debugs")
+io.write(debugs.variables(view))
+--]]
+?>
diff --git a/openntpd.menu b/openntpd.menu
new file mode 100644
index 0000000..14edaa1
--- /dev/null
+++ b/openntpd.menu
@@ -0,0 +1,2 @@
+#CAT GROUP/DESC TAB ACTION
+Setup openNTPD openNTPD read