page2.lua 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. mg.write("HTTP/1.0 200 OK\r\n")
  2. mg.write("Content-Type: text/html\r\n")
  3. mg.write("\r\n")
  4. mg.write([[<html><body>
  5. <p>This is Lua script example 2, served by the
  6. <a href="https://github.com/civetweb/civetweb">CivetWeb web server</a>,
  7. version ]] .. mg.version .. [[.
  8. </p><p>
  9. The following features are available:
  10. <ul>
  11. ]])
  12. function print_if_available(tab, name)
  13. if tab then
  14. mg.write("<li>" .. name .. " available</li>\n")
  15. else
  16. mg.write("<li>" .. name .. " not available</li>\n")
  17. end
  18. end
  19. function recurse(tab, excl)
  20. excl = excl or {}
  21. mg.write("<ul>\n")
  22. for k,v in pairs(tab) do
  23. if type(v) == "table" then
  24. mg.write("<li>" .. tostring(k) .. ":</li>\n")
  25. if excl[v] then
  26. -- cyclic
  27. else
  28. excl[v] = true
  29. recurse(v, excl)
  30. excl[v] = false
  31. end
  32. else
  33. mg.write("<li>" .. tostring(k) .. " = " .. tostring(v) .. "</li>\n")
  34. end
  35. end
  36. mg.write("</ul>\n")
  37. end
  38. -- Print Lua version and available libraries
  39. mg.write("<li>" .. _VERSION .. " with the following standard libraries</li>\n")
  40. mg.write("<ul>\n")
  41. libs = {"string", "math", "table", "io", "os", "bit32", "utf8", "package", "coroutine", "debug"};
  42. for _,n in ipairs(libs) do
  43. print_if_available(_G[n], n);
  44. end
  45. mg.write("</ul>\n")
  46. print_if_available(sqlite3, "sqlite3 binding")
  47. print_if_available(lfs, "lua file system")
  48. --recurse(_G)
  49. -- Print mg library
  50. libname = "mg"
  51. print_if_available(_G[libname], libname .. " library")
  52. recurse(_G[libname])
  53. -- Print connect function
  54. print_if_available(connect, "connect function")
  55. -- Get all server options
  56. mg.write("<li>server options</li>\n")
  57. recurse(mg.get_option())
  58. -- Print some data from random generators
  59. if mg.uuid then
  60. mg.write("<li>random data</li>\n")
  61. local t = {GUID = mg.uuid(), random = mg.random()}
  62. recurse(t)
  63. end
  64. -- Print loaded packages known to Lua
  65. if package and (type(package.loaded)=="table") then
  66. if #package.loaded > 0 then
  67. mg.write("<li>loaded packages</li>\n")
  68. recurse(package.loaded)
  69. else
  70. mg.write("<li>loaded packages: none</li>\n")
  71. end
  72. end
  73. -- Print preloaded packages known to Lua
  74. if xml then
  75. mg.write("<li>xml</li>\n")
  76. recurse(xml)
  77. end
  78. -- Current date/time
  79. mg.write("</ul></p>\n");
  80. mg.write("<p> Today is " .. os.date("%A") .. "</p>\n");
  81. -- Request content
  82. mg.write("\n<hr/>\n")
  83. l = mg.request_info.content_length
  84. if l then
  85. mg.write("<p>Content-Length = "..l..":<br>\n<pre>\n")
  86. mg.write(mg.read())
  87. mg.write("\n</pre>\n</p>\n")
  88. else
  89. mg.write("<p>not request content available</p>\n")
  90. end
  91. -- Directory listing
  92. mg.write("\n<hr/>\n")
  93. mg.write("<p>\n");
  94. if not lfs then
  95. mg.write("lfs not available\n")
  96. else
  97. mg.write("Files in " .. lfs.currentdir())
  98. mg.write("\n<ul>\n")
  99. local cnt = 0
  100. for f in lfs.dir(".") do
  101. cnt = cnt + 1
  102. if (cnt < 6) then
  103. local mime = mg.get_mime_type(f)
  104. mg.write("<li>" .. f .. " (" .. mime .. ")</li>\n")
  105. local at = lfs.attributes(f);
  106. recurse(at)
  107. end
  108. end
  109. mg.write("</ul>\n")
  110. mg.write(string.format("<ul>%u files total</ul>\n", cnt))
  111. end
  112. mg.write([[
  113. </p>
  114. </body></html>
  115. ]])