From 42750f022f4b2b9a9df6237c0981fdd479f4532d Mon Sep 17 00:00:00 2001 From: Ted Trask Date: Tue, 30 Aug 2011 20:13:24 +0000 Subject: Moved mvc.lua into /usr/share/lua and cli to /usr/bin/acf_cli --- www/Makefile | 4 - www/cgi-bin/acf | 2 +- www/cgi-bin/cli | 53 -------- www/cgi-bin/mvc.lua | 357 ---------------------------------------------------- www/sample.html | 117 ----------------- 5 files changed, 1 insertion(+), 532 deletions(-) delete mode 100755 www/cgi-bin/cli delete mode 100755 www/cgi-bin/mvc.lua delete mode 100644 www/sample.html (limited to 'www') diff --git a/www/Makefile b/www/Makefile index 5bc108c..71e6c62 100644 --- a/www/Makefile +++ b/www/Makefile @@ -1,10 +1,7 @@ include ../config.mk WWW_DIST=cgi-bin/acf\ - cgi-bin/cli\ - cgi-bin/mvc.lua\ index.html\ - sample.html\ EXTRA_DIST=Makefile DISTFILES=$(WWW_DIST) $(EXTRA_DIST) @@ -36,6 +33,5 @@ install: cp "$$i" "$$dest";\ done chmod 755 $(install_dir)/cgi-bin/acf - chmod 700 $(install_dir)/cgi-bin/cli .PHONY: $(phony) diff --git a/www/cgi-bin/acf b/www/cgi-bin/acf index d866de9..7f6592d 100755 --- a/www/cgi-bin/acf +++ b/www/cgi-bin/acf @@ -1,6 +1,6 @@ #!/usr/bin/haserl --shell=lua --upload-limit=256 <% -require("mvc") +mvc = require("acf.mvc") -- create a new container FRAMEWORK=mvc:new() diff --git a/www/cgi-bin/cli b/www/cgi-bin/cli deleted file mode 100755 index 437a211..0000000 --- a/www/cgi-bin/cli +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/lua -if #arg == 0 then - print([[ACF Client interface - -Usage: cli [action] [parameter]... - -Actions are of the form "prefix/controller/action" -Parameters are of the form "parameter=value" - list and multi select parameters are of the form "parameter[1]=value" - boolean parameters are true if defined, false is undefined - -Example: -cli acf-util/password/newuser password="test123" password_confirm="test123" roles[1]="ADMIN" userid="root" Create - -For forms, remember to pass in the "option" value as a parameter (see Create in example above). -Output will be a serialized Lua table. - ]]) - return -end - -require("posix") -local PATH = package.path -local p = posix.dirname(arg[0]) -if p:sub(1,1) ~= "/" then p = posix.getcwd().."/"..p end -package.path = p.."/?.lua;" .. package.path -require("mvc") -package.path = PATH - --- this is to get around having to store --- the config file in /etc/helloworld/helloworld.conf -ENV={} -ENV.HOME="." -FRAMEWORK=mvc:new() -FRAMEWORK:read_config("acf") -APP=FRAMEWORK:new("acf_cli") - --- command line will have URI-type string defining prefix/controller/action --- (put into ENV.PATH_INFO) --- followed by parameters --- (put into APP.clientdata) -ENV.PATH_INFO = arg[1] -APP.clientdata = {} -for i=2,#arg do - a,v = string.match(arg[i], "([^=]*)=(.*)") - if v then - APP.clientdata[a] = v - else - APP.clientdata[arg[i]] = true - end -end -APP:dispatch() -APP:destroy() -FRAMEWORK:destroy() diff --git a/www/cgi-bin/mvc.lua b/www/cgi-bin/mvc.lua deleted file mode 100755 index 41aa9db..0000000 --- a/www/cgi-bin/mvc.lua +++ /dev/null @@ -1,357 +0,0 @@ ---[[ Basic MVC framework - Written for Alpine Configuration Framework (ACF) - see www.alpinelinux.org for more information - Copyright (C) 2007 Nathan Angelacos - Licensed under the terms of GPL2 - ]]-- -module(..., package.seeall) - -require("posix") - -mvc = {} - --- the constructor ---[[ Builds a new MVC object. If "module" is given, then tries to load - self.conf.appdir .. module "-controller.lua" in c.worker and - self.conf.appdir .. module "-model.lua" in c.model - - The returned .conf table is guaranteed to have the following - appdir - where the application lives - confdir - where the configuration file is - sessiondir - where session data and other temporary stuff goes - appname - the name of the application - ]] - -new = function (self, modname) - local model_loaded = true - local worker_loaded = true - local c = {} - c.worker = {} - c.model = {} - - -- make defaults if the parent doesn't have them - if self.conf == nil then - c.conf = { appdir = "", confdir = "", - tempdir = "", appname = "" } - end - - -- If no clientdata, then clientdata is a null table - if self.clientdata == nil then - c.clientdata = {} - end - - -- If we don't have an application name, use the modname - if (self.conf == nil ) or (self.conf.appname == nil) then - c.conf.appname = modname - end - - -- load the module code here - if (modname) then - c.worker = self:soft_require( modname .. "-controller") - if c.worker == nil then - c.worker = {} - worker_loaded = false - end - c.model = self:soft_require( modname .. "-model" ) - if c.model == nil then - c.model = {} - model_loaded = false - end - end - - -- The magic that makes all the metatables point in the correct - -- direction. c.model -> c.worker -> parent -> parent.worker -> - -- grandparent -> grandparent -> worker (and so on) - - -- The model looks in worker for missing - setmetatable (c.model, c.model ) - c.model.__index = c.worker - - -- the worker looks in the parent table for missing - setmetatable (c.worker, c.worker) - c.worker.__index = self - - -- the table looks in the worker for missing - setmetatable (c, c) - c.__index = c.worker - - -- ensure an "mvc" table exists, even if empty - if (type(rawget(c.worker, "mvc")) ~= "table") then - c.worker.mvc = {} - end - - setmetatable (c.worker.mvc, c.worker.mvc) - -- If creating a new parent container, then - -- we are the top of the chain. - if (modname) then - c.worker.mvc.__index = self.worker.mvc - else - c.worker.mvc.__index = self.mvc - end - - -- run the worker on_load code - if type(rawget(c.worker.mvc, "on_load")) == "function" then - c.worker.mvc.on_load(c, self) - c.worker.mvc.on_load = nil - end - - -- save the new self on the SELF stack - if not SELF then SELF = {} end - SELF[#SELF + 1] = c - - return c, worker_loaded, model_loaded -end - -destroy = function (self) - if type(rawget(self.worker.mvc, "on_unload")) == "function" then - self.worker.mvc.on_unload(self) - self.worker.mvc.on_unload = nil - end - - -- remove the self from the SELF stack (should be at the end, but just in case) - if SELF then - for i,s in ipairs(SELF) do - if s == self then - table.remove(SELF, i) - break - end - end - end - - -- remove packages from package.loaded - if self["_NAME"] then package.loaded[self["_NAME"]] = nil end - if self.model and self.model["_NAME"] then package.loaded[self.model["_NAME"]] = nil end -end - --- This is a sample front controller/dispatch. -dispatch = function (self, userprefix, userctlr, useraction) - local controller = nil - local success, err = xpcall ( function () - - if userprefix == nil then - self.conf.prefix, self.conf.controller, self.conf.action = - parse_path_info(ENV["PATH_INFO"]) - else - self.conf.prefix = userprefix - self.conf.controller = userctlr or "" - self.conf.action = useraction or "" - end - - -- If they didn't provide a controller, and a default was specified - -- use it - if self.conf.controller == "" and self.conf.default_controller then - self.conf.controller = self.conf.default_controller - self.conf.prefix = self.conf.default_prefix or "/" - end - - local worker_loaded - controller, worker_loaded = self:new(self.conf.prefix .. self.conf.controller) - - if not worker_loaded then - self.conf.type = "dispatch" - error(self.conf) - end - - if controller.conf.action == "" then - controller.conf.action = rawget(controller.worker, "default_action") or "" - end - - local action = controller.conf.action - - -- Because of the inheritance, normally the - -- controller.worker.action will flow up, so that all children have - -- actions of all parents. We use rawget to make sure that only - -- controller defined actions are used on dispatch - -- If the action is missing, raise an error - if ( type(rawget(controller.worker, action)) ~= "function") then - self.conf.type = "dispatch" - error (self.conf) - end - - -- run the (first found) pre_exec code, starting at the controller - -- and moving up the parents - if type(controller.worker.mvc.pre_exec) == "function" then - controller.worker.mvc.pre_exec ( controller ) - end - - -- run the action - local viewtable = controller.worker[action](controller) - - -- run the post_exec code - if type(controller.worker.mvc.post_exec) == "function" then - controller.worker.mvc.post_exec ( controller ) - end - - local viewfunc = controller:view_resolver() - - -- we're done with the controller, destroy it - controller:destroy() - controller = nil - - viewfunc (viewtable) - end, - self:soft_traceback(message) - ) - - if not success then - local handler - if controller then - handler = controller.worker or controller - if handler then handler:exception_handler(err) end - controller:destroy() - controller = nil - end - if nil == handler then - handler = self.worker or mvc - handler:exception_handler(err) - end - end -end - --- Tries to see if name exists in the self.conf.appdir, and if so, it loads it. --- otherwise, returns nil, but no error -soft_require = function (self, name ) - local filename, file - for p in string.gmatch(self.conf.appdir, "[^,]+") do - filename = p .. name .. ".lua" - file = io.open(filename) - if file then - file:close() - local PATH=package.path - -- FIXME - this should really try to open the lua file, - -- and if it doesnt exist silently fail. - -- This version allows things from /usr/local/lua/5.1 to - -- be loaded - package.path = p .. "/?.lua;" .. package.path - local t - if posix.dirname(name) == "." then - t = require(posix.basename(name)) - else - t = require(posix.basename(posix.dirname(name)).."."..posix.basename(name)) - end - package.path = PATH - return t - end - end - return nil -end - --- look in various places for a config file, and store it in self.conf -read_config = function( self, appname ) - appname = appname or self.conf.appname - self.conf.appname = self.conf.appname or appname - - local confs = { (ENV["HOME"] or ENV["PWD"] or "") .. "/." .. - appname .. "/" .. appname .. ".conf", - ( ENV["HOME"] or ENV["PWD"] or "") .. "/" .. - appname .. ".conf", - ENV["ROOT"] or "" .. "/etc/" .. appname .. "/" .. - appname .. ".conf", - ENV["ROOT"] or "" .. "/etc/" .. appname .. ".conf" - } - for i, filename in ipairs (confs) do - local file = io.open (filename) - if (file) then - self.conf.confdir = posix.dirname(filename) .. "/" - self.conf.conffile = filename - for line in file:lines() do - key, value = string.match(line, "^%s*([^[=%s#]*)%s*=%s*(.*)") - if key then - self.conf[key] = value - end - end - file:close() - break - end - end - - if (#self.conf.confdir) then -- check for an appname-hooks.lua file - self.conf.app_hooks = {} - setmetatable (self.conf.app_hooks, {__index = _G}) - - -- loadfile loads into the global environment - -- so we set env 0, not env 1 - setfenv (0, self.conf.app_hooks) - local f = loadfile(self.conf.confdir .. "/" .. appname.. "-hooks.lua") - if (f) then f() end - setfenv (0, _G) - -- setmetatable (self.conf.app_hooks, {}) - end - -end - --- parse a "URI" like string into a prefix, controller and action --- return them (or blank strings) -parse_path_info = function( str ) - str = str or "" - local words = {} - str = string.gsub(str, "/+$", "") - for x=1,3 do - words[#words+1] = string.match(str, "[^/]+$") - str = string.gsub(str, "/+[^/]*$", "") - end - prefix = "/"..(words[#words] or "").."/" - if prefix == "//" then prefix = "/" end - controller = words[#words-1] or "" - action = words[#words-2] or "" - - return prefix, controller, action -end - --- The view resolver of last resort. -view_resolver = function(self) - return function() - if ENV["REQUEST_METHOD"] then - io.write ("Content-type: text/plain\n\n") - end - io.write ("Your controller and application did not specify a view resolver.\n") - io.write ("The MVC framework has no view available. sorry.\n") - return - end -end - --- Generates a debug.traceback if called with no arguments -soft_traceback = function (self, message ) - if message then - return message - else - return debug.traceback - end -end - --- The exception hander of last resort -exception_handler = function (self, message ) - if ENV["REQUEST_METHOD"] then - print ("Content-Type: text/plain\n\n") - end - print ("The following unhandled application error occured:\n\n") - - if (type(message) == "table" ) then - if (message.type == "dispatch") then - print ('controller: "' .. message.controller .. '" does not have a "' .. - message.action .. '" action.') - else - print ("An error of type: '" .. (tostring(message.type) or "nil") .. "' was raised." ) - end - else - print (tostring(message)) - end -end - --- create a Configuration Framework Entity (cfe) --- returns a table with at least "value", "type", and "label" -cfe = function ( optiontable ) - optiontable = optiontable or {} - me = { value="", - type="text", - label="" } - for key,value in pairs(optiontable) do - me[key] = value - end - return me -end -_G.cfe = cfe - -logevent = function ( ... ) - os.execute ( "logger \"ACF: " .. (... or "") .. "\"" ) -end diff --git a/www/sample.html b/www/sample.html deleted file mode 100644 index e4c9e14..0000000 --- a/www/sample.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - -Alpine - - - - - - - -
- - -
-

Networking : Interfaces

-

[ welcome ] > [ login ] > [ bgp ] > [ firewall ] > [ content filter ] > [ interfaces ]

-
- - - -
- - - -

-This is plain old content -

- - -

Errors

-

This is error text. As if you didn't know that. Just check the errors below.

-

This is some plain content level hide text

-

This is a page with a link in it.

- -

Networking - Status

-

This is the networking page. This is a very long paragraph in that page, talking about -all the good things on this page. This is not the real page, its just a standin page for -the page you want. Evenutally, you'll see the page you want. But not quite yet.

- -

Status

-

The service is running

-
-
-
bozo
-
This is error text
- -
foo
- -
- -
Command
-
- - - -
- -
Textbox
-
-
- - -
A Tag with no form element
-
This is just some text
- -
-
- -

Configure

-

Bring Service Down

-

Bring Service Up

-
-
- -
This is c-trailer
- - - - -- cgit v1.2.3