--- /dev/null
+--- 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"
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
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
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 = {}
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
-- 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)
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")
]]--
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()
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
}
-- 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
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
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
-- Sets HTTP-Status-Header
function ffluci.http.set_status(code, message)
- print("Status: " .. tostring(code) .. " " .. message)
+ print(webuci.REQUEST_METHOD .. " " .. tostring(code) .. " " .. message)
end
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")()
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:
-- 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,
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"
<%+header%>
- <form method="post" action="<%=os.getenv("REQUEST_URI")%>">
+ <form method="post" action="<%=ffluci.http.get_request_uri()%>">
<div>
<script type="text/javascript" src="<%=media%>/cbi.js"></script>
<input type="hidden" name="cbi.submit" value="1" />
<%+header%>
<h1>404 Not Found</h1>
<p>Sorry, the object you requested was not found.</p>
-<tt>Unable to dispatch: <%=os.getenv("PATH_INFO")%></tt>
+<tt>Unable to dispatch: <%=ffluci.http.get_path_info()%></tt>
<%+footer%>
\ No newline at end of file