This is Lua script example 2, served by the
CivetWeb web server,
version ]] .. mg.version .. [[.
The following features are available:
]])
demo_data_for_xml = {}
demo_data_for_json = {}
function print_if_available(tab, name)
if tab then
mg.write("
" .. name .. " available
\n")
if type(tab)=="table" then
demo_data_for_xml[name] = {}
demo_data_for_xml[name][0] = name
demo_data_for_json[name] = {}
for nname,nval in pairs(tab) do
demo_data_for_xml[name][nname] = type(nval)
demo_data_for_json[name][nname] = type(nval)
end
else
demo_data_for_xml[name] = type(tab)
demo_data_for_json[name] = type(tab)
end
else
mg.write("
" .. name .. " not available
\n")
end
end
function recurse(tab, excl)
excl = excl or {}
mg.write("
\n")
for k,v in pairs(tab) do
if type(v) == "table" then
mg.write("
" .. tostring(k) .. ":
\n")
if excl[v] then
-- cyclic
else
excl[v] = true
recurse(v, excl)
excl[v] = false
end
else
mg.write("
" .. tostring(k) .. " = " .. tostring(v) .. "
\n")
end
end
mg.write("
\n")
end
-- Print Lua version and available libraries
mg.write("
" .. _VERSION .. " with the following standard libraries
\n")
mg.write("
\n")
libs = {"string", "math", "table", "io", "os", "bit32", "utf8", "package", "coroutine", "debug"};
for _,n in ipairs(libs) do
print_if_available(_G[n], n);
end
mg.write("
\n")
recurse(mg.get_option())
-- Print some data from random generators
if mg.uuid then
mg.write("
random data
\n")
local t = {GUID = mg.uuid(), random = mg.random()}
recurse(t)
end
-- Print loaded packages known to Lua
if package and (type(package.loaded)=="table") then
if #package.loaded > 0 then
mg.write("
loaded packages
\n")
recurse(package.loaded)
else
mg.write("
loaded packages: none
\n")
end
end
-- Load path
mg.write("
Package search path: " .. package.path .. "
\n");
-- End of list
mg.write("
\n");
-- Current date/time
mg.write("\n\n")
mg.write("
Today is " .. os.date("%A") .. "
\n");
-- Request content
mg.write("\n\n")
l = mg.request_info.content_length
if l then
mg.write("
Content-Length = "..l..": \n
\n")
mg.write(mg.read())
mg.write("\n
\n\n")
else
mg.write("
no request content available for " .. mg.request_info.request_method .. " method
\n")
end
-- Directory listing
mg.write("\n\n")
mg.write("
\n");
if not lfs then
mg.write("lfs not available\n")
else
mg.write("Files in " .. lfs.currentdir())
mg.write("\n
\n")
local cnt = 0
for f in lfs.dir(".") do
cnt = cnt + 1
if (cnt < 6) then
local mime = mg.get_mime_type(f)
mg.write("
" .. f .. " (" .. mime .. ")
\n")
local at = lfs.attributes(f);
recurse(at)
end
end
mg.write("
\n")
mg.write(string.format("
%u files total
\n", cnt))
end
mg.write("\n")
function htmlEsc(txt)
s = txt:gsub("%&", "&")
s = s:gsub("%<", "<")
s = s:gsub("%>", ">")
return (s)
end
function printTable(tab, indent)
indent = indent or 0
for k,v in pairs(tab) do
if (type(v)=="table") then
mg.write(string.rep(" ", indent) .. tostring(k) .. ":\n")
printTable(v, indent + 1)
else
mg.write(string.rep(" ", indent) .. tostring(k) .. "\t" .. tostring(v) .. "\n")
end
end
end
-- xml test
if (xml) then
mg.write("\n\n")
mg.write("
\n\n")
if mg.request_info.query_string then
qtab = mg.split_form_data(mg.request_info.query_string)
mg.write("
\nSplit form test: \n");
mg.write("
\n");
mg.write("
\n");
mg.write("
#
\n");
mg.write("
name
\n");
mg.write("
value
\n");
mg.write("
\n");
for n,t in pairs(qtab) do
mg.write("
\n");
mg.write("
" .. n .. "
\n");
mg.write("
" .. tostring(t.name) .. "
\n");
mg.write("
" .. tostring(t.value) .. "
\n");
mg.write("
\n");
end
mg.write("
\n");
mg.write("\n");
end
-- Test timer from Lua background script
mg.write("\n\n")
mg.write("
\nLua shared.timer ");
if (shared and shared.timer) then
mg.write(tostring(shared.timer))
mg.write([[ ]])
else
mg.write("not available")
end
mg.write("\n
\n")
-- Next section ...
mg.write("\n\n")
mg.write([[
]])