From fc65325c174e13cc1a9329d154e74069257ebb12 Mon Sep 17 00:00:00 2001 From: Steven Barth Date: Tue, 6 May 2008 20:44:45 +0000 Subject: [PATCH] * General code cleanup * Removed unnecessary module dependencies * Completed SGI abstraction * Reworked ffluci.sgi.webuci --- contrib/package/lua-luci/patches/200-lua-path | 15 +++++++ core/contrib/webuci_bootstrap.lua | 20 +++++++++ core/src/ffluci/cbi.lua | 3 +- core/src/ffluci/config.lua | 5 +-- core/src/ffluci/debug.lua | 2 +- core/src/ffluci/dispatcher.lua | 2 +- core/src/ffluci/fs.lua | 5 +++ core/src/ffluci/i18n.lua | 4 +- core/src/ffluci/menu.lua | 45 ++++++++++++------- core/src/ffluci/sgi/haserl.lua | 9 ++++ core/src/ffluci/sgi/webuci.lua | 16 +++++-- core/src/ffluci/sys.lua | 5 +++ core/src/ffluci/template.lua | 8 ++-- core/src/ffluci/util.lua | 6 --- core/src/ffluci/view/cbi/header.htm | 2 +- core/src/ffluci/view/error404.htm | 2 +- 16 files changed, 107 insertions(+), 42 deletions(-) create mode 100644 contrib/package/lua-luci/patches/200-lua-path diff --git a/contrib/package/lua-luci/patches/200-lua-path b/contrib/package/lua-luci/patches/200-lua-path new file mode 100644 index 0000000000..62dd00e399 --- /dev/null +++ b/contrib/package/lua-luci/patches/200-lua-path @@ -0,0 +1,15 @@ +--- b/src/luaconf.h 2008-05-06 20:10:46.000000000 +0200 ++++ a/src/luaconf.h 2008-05-06 20:10:27.000000000 +0200 +@@ -95,9 +95,9 @@ + ".\\?.dll;" LUA_CDIR"?.dll;" LUA_CDIR"loadall.dll" + + #else +-#define LUA_ROOT "/usr/local/" +-#define LUA_LDIR LUA_ROOT "share/lua/5.1/" +-#define LUA_CDIR LUA_ROOT "lib/lua/5.1/" ++#define LUA_ROOT "/usr/" ++#define LUA_LDIR LUA_ROOT "share/lua/" ++#define LUA_CDIR LUA_ROOT "lib/lua/" + #define LUA_PATH_DEFAULT \ + "./?.lua;" LUA_LDIR"?.lua;" LUA_LDIR"?/init.lua;" \ + LUA_CDIR"?.lua;" LUA_CDIR"?/init.lua" diff --git a/core/contrib/webuci_bootstrap.lua b/core/contrib/webuci_bootstrap.lua index 1733437075..fd4c47ab57 100644 --- a/core/contrib/webuci_bootstrap.lua +++ b/core/contrib/webuci_bootstrap.lua @@ -1,2 +1,22 @@ package.path = "/usr/lib/lua/?.lua;/usr/lib/lua/?/init.lua;" .. package.path package.cpath = "/usr/lib/lua/?.so;" .. package.cpath +module("webuci", package.seeall) + +function prepare_req(uri) + require("ffluci.menu").get() + REQUEST_URI = uri +end + +function init_req(context) + SERVER_PROTOCOL = context.server_proto + REMOTE_ADDR = context.remote_addr + REQUEST_METHOD = context.request_method + PATH_INFO = "/" .. context.uri + REMOTE_PORT = context.remote_port + SERVER_ADDR = context.server_addr + SCRIPT_NAME = REQUEST_URI:sub(1, #REQUEST_URI - #context.uri) +end + +function handle_req(context) + require("ffluci.dispatcher").httpdispatch() +end \ No newline at end of file diff --git a/core/src/ffluci/cbi.lua b/core/src/ffluci/cbi.lua index 4d6d25c396..3384e5c38a 100644 --- a/core/src/ffluci/cbi.lua +++ b/core/src/ffluci/cbi.lua @@ -39,8 +39,9 @@ function load(cbimap) require("ffluci.fs") require("ffluci.i18n") require("ffluci.config") + require("ffluci.sys") - local cbidir = ffluci.config.path .. "/model/cbi/" + local cbidir = ffluci.sys.libpath() .. "/model/cbi/" local func, err = loadfile(cbidir..cbimap..".lua") if not func then diff --git a/core/src/ffluci/config.lua b/core/src/ffluci/config.lua index 90fa6b1c91..0db45ac891 100644 --- a/core/src/ffluci/config.lua +++ b/core/src/ffluci/config.lua @@ -28,10 +28,7 @@ limitations under the License. module("ffluci.config", package.seeall) require("ffluci.model.uci") require("ffluci.util") -require("ffluci.debug") - --- Our path (wtf Lua lacks __file__ support) -path = ffluci.debug.path +require("ffluci.sys") -- Warning! This is only for fallback and compatibility purporses! -- main = {} diff --git a/core/src/ffluci/debug.lua b/core/src/ffluci/debug.lua index f1132edcc4..1be40348e4 100644 --- a/core/src/ffluci/debug.lua +++ b/core/src/ffluci/debug.lua @@ -1,2 +1,2 @@ module("ffluci.debug", package.seeall) -path = require("ffluci.fs").dirname(debug.getinfo(1, 'S').source:sub(2)) \ No newline at end of file +__file__ = debug.getinfo(1, 'S').source:sub(2) \ No newline at end of file diff --git a/core/src/ffluci/dispatcher.lua b/core/src/ffluci/dispatcher.lua index 15ac3c7b31..813e35d590 100644 --- a/core/src/ffluci/dispatcher.lua +++ b/core/src/ffluci/dispatcher.lua @@ -150,7 +150,7 @@ end -- Dispatches a request depending on the PATH_INFO variable function httpdispatch() - local pathinfo = os.getenv("PATH_INFO") or "" + local pathinfo = ffluci.http.get_path_info() or "" local parts = pathinfo:gmatch("/[%w-]+") local sanitize = function(s, default) diff --git a/core/src/ffluci/fs.lua b/core/src/ffluci/fs.lua index 6e8859a0de..3eb562b80a 100644 --- a/core/src/ffluci/fs.lua +++ b/core/src/ffluci/fs.lua @@ -28,6 +28,11 @@ module("ffluci.fs", package.seeall) require("posix") +-- Glob +function glob(pattern) + return posix.glob(pattern) +end + -- Checks whether a file exists function isfile(filename) local fp = io.open(path, "r") diff --git a/core/src/ffluci/i18n.lua b/core/src/ffluci/i18n.lua index 11f4afe871..489308cc9e 100644 --- a/core/src/ffluci/i18n.lua +++ b/core/src/ffluci/i18n.lua @@ -25,11 +25,11 @@ limitations under the License. ]]-- module("ffluci.i18n", package.seeall) - require("ffluci.config") +require("ffluci.sys") table = {} -i18ndir = ffluci.config.path .. "/i18n/" +i18ndir = ffluci.sys.libpath() .. "/i18n/" -- Clears the translation table function clear() diff --git a/core/src/ffluci/menu.lua b/core/src/ffluci/menu.lua index e55c0e76a4..5cbb725a42 100644 --- a/core/src/ffluci/menu.lua +++ b/core/src/ffluci/menu.lua @@ -27,18 +27,15 @@ module("ffluci.menu", package.seeall) require("ffluci.fs") require("ffluci.util") -require("ffluci.template") -require("ffluci.i18n") -require("ffluci.config") -require("ffluci.model.ipkg") +require("ffluci.sys") -- Default modelpath -modelpath = ffluci.config.path .. "/model/menu/" +modelpath = ffluci.sys.libpath() .. "/model/menu/" -- Menu definition extra scope scope = { - translate = ffluci.i18n.translate, - loadtrans = ffluci.i18n.loadc, + translate = function(...) return require("ffluci.i18n").translate(...) end, + loadtrans = function(...) return require("ffluci.i18n").loadc(...) end, isfile = ffluci.fs.mtime } @@ -101,26 +98,40 @@ end -- Collect all menu information provided in the model dir function collect() + local generators = {} + for k, menu in pairs(ffluci.fs.dir(modelpath)) do if menu:sub(1, 1) ~= "." then local f = loadfile(modelpath.."/"..menu) - local env = ffluci.util.clone(scope) - - env.add = add - env.sel = sel - env.act = act - - setfenv(f, env) - f() + if f then + table.insert(generators, f) + end end end + + return generators +end + +-- Parse the collected information +function parse(generators) + menu = {} + for i, f in pairs(generators) do + local env = ffluci.util.clone(scope) + + env.add = add + env.sel = sel + env.act = act + + setfenv(f, env) + f() + end + return menu end -- Returns the menu information function get() if not menu then - menu = {} - collect() + menu = parse(collect()) end return menu end \ No newline at end of file diff --git a/core/src/ffluci/sgi/haserl.lua b/core/src/ffluci/sgi/haserl.lua index 76dc3854af..e58189d1cf 100644 --- a/core/src/ffluci/sgi/haserl.lua +++ b/core/src/ffluci/sgi/haserl.lua @@ -54,12 +54,21 @@ function ffluci.http.formvaluetable(prefix) return ffluci.http.formvalue(prefix, {}) end +-- Returns the path info +function ffluci.http.get_path_info() + return ENV.PATH_INFO +end -- Returns the User's IP function ffluci.http.get_remote_addr() return ENV.REMOTE_ADDR end +-- Returns the request URI +function ffluci.http.get_request_uri() + return ENV.REQUEST_URI +end + -- Returns the script name function ffluci.http.get_script_name() return ENV.SCRIPT_NAME diff --git a/core/src/ffluci/sgi/webuci.lua b/core/src/ffluci/sgi/webuci.lua index 2977802959..c60964662e 100644 --- a/core/src/ffluci/sgi/webuci.lua +++ b/core/src/ffluci/sgi/webuci.lua @@ -51,15 +51,25 @@ function ffluci.http.formvaluetable(prefix) return vals end +-- Returns the path info +function ffluci.http.get_path_info() + return webuci.PATH_INFO +end -- Returns the User's IP function ffluci.http.get_remote_addr() - return os.getenv("REMOTE_ADDR") + return webuci.REMOTE_ADDR +end + +-- Returns the request URI +function ffluci.http.get_request_uri() + return webuci.REQUEST_URI end + -- Returns the script name function ffluci.http.get_script_name() - return os.getenv("SCRIPT_NAME") + return webuci.SCRIPT_NAME end @@ -81,5 +91,5 @@ end -- Sets HTTP-Status-Header function ffluci.http.set_status(code, message) - print("Status: " .. tostring(code) .. " " .. message) + print(webuci.REQUEST_METHOD .. " " .. tostring(code) .. " " .. message) end diff --git a/core/src/ffluci/sys.lua b/core/src/ffluci/sys.lua index d71bce71bc..3766548932 100644 --- a/core/src/ffluci/sys.lua +++ b/core/src/ffluci/sys.lua @@ -82,6 +82,11 @@ function httpget(url) return exec("wget -qO- '"..url:gsub("'", "").."'") end +-- Returns the FFLuci-Basedir +function libpath() + return ffluci.fs.dirname(require("ffluci.debug").__file__) +end + -- Returns the load average function loadavg() local loadavg = io.lines("/proc/loadavg")() diff --git a/core/src/ffluci/template.lua b/core/src/ffluci/template.lua index 04cc07dbb1..a972f2bc42 100644 --- a/core/src/ffluci/template.lua +++ b/core/src/ffluci/template.lua @@ -28,11 +28,9 @@ module("ffluci.template", package.seeall) require("ffluci.config") require("ffluci.util") require("ffluci.fs") -require("ffluci.i18n") require("ffluci.http") -require("ffluci.model.uci") -viewdir = ffluci.config.path .. "/view/" +viewdir = ffluci.sys.libpath() .. "/view/" -- Compile modes: @@ -52,8 +50,8 @@ compiler_enable_bytecode = false -- Define the namespace for template modules viewns = { - translate = ffluci.i18n.translate, - config = function(...) return ffluci.model.uci.get(...) or "" end, + translate = function(...) return require("ffluci.i18n").translate(...) end, + config = function(...) return require("ffluci.model.uci").get(...) or "" end, controller = ffluci.http.get_script_name(), media = ffluci.config.main.mediaurlbase, write = io.write, diff --git a/core/src/ffluci/util.lua b/core/src/ffluci/util.lua index 3ff7bc2033..b76278ddab 100644 --- a/core/src/ffluci/util.lua +++ b/core/src/ffluci/util.lua @@ -139,12 +139,6 @@ function resfenv(f) end --- Returns the Haserl unique sessionid -function sessionid() - return ENV.SESSIONID -end - - -- Splits a string into an array function split(str, pat, max, regex) pat = pat or "\n" diff --git a/core/src/ffluci/view/cbi/header.htm b/core/src/ffluci/view/cbi/header.htm index 1b69a3a319..97542f031e 100644 --- a/core/src/ffluci/view/cbi/header.htm +++ b/core/src/ffluci/view/cbi/header.htm @@ -1,5 +1,5 @@ <%+header%> -
"> +
diff --git a/core/src/ffluci/view/error404.htm b/core/src/ffluci/view/error404.htm index adc671de00..1a9d74a9f2 100644 --- a/core/src/ffluci/view/error404.htm +++ b/core/src/ffluci/view/error404.htm @@ -1,5 +1,5 @@ <%+header%>

404 Not Found

Sorry, the object you requested was not found.

-Unable to dispatch: <%=os.getenv("PATH_INFO")%> +Unable to dispatch: <%=ffluci.http.get_path_info()%> <%+footer%> \ No newline at end of file -- 2.30.2