preload.lua 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. -- SAPI for CivetWeb
  2. -- Wrapper for the native "mg" interface
  3. SAPI = {}
  4. SAPI.Request = {}
  5. SAPI.Request.getpostdata = function(n)
  6. local s = ""
  7. s = mg.read(n)
  8. return s
  9. end
  10. SAPI.Request.servervariable = function(varname)
  11. local s
  12. if varname == "REQUEST_METHOD" then
  13. s = mg.request_info.request_method
  14. elseif varname == "QUERY_STRING" then
  15. s = mg.request_info.query_string
  16. elseif varname == "SERVER_PORT" then
  17. s = mg.request_info.server_port
  18. elseif varname == "SERVER_NAME" then
  19. s = mg.auth_domain
  20. elseif varname == "PATH_INFO" then
  21. s = mg.request_info.path_info
  22. elseif varname == "AUTH_TYPE" then
  23. s = mg.request_info.query_string
  24. elseif varname == "REMOTE_ADDR" then
  25. s = mg.request_info.remote_addr
  26. elseif varname == "SERVER_SOFTWARE" then
  27. s = "CivetWeb/" .. mg.version
  28. elseif varname == "SERVER_PROTOCOL" then
  29. s = "HTTP/1.1"
  30. else
  31. print(varname)
  32. end
  33. return s or ""
  34. end
  35. SAPI._CurrentResponse = {contenttype = "text/plain", header={}, written=false, status=200}
  36. SAPI.Response = {}
  37. SAPI.Response.contenttype = function(header)
  38. SAPI._CurrentResponse.contenttype = header
  39. print("Content: " .. header)
  40. end
  41. SAPI.Response.errorlog = function(message)
  42. print("Error: " .. tostring(message))
  43. end
  44. SAPI.Response.header = function(header, value)
  45. local t = SAPI._CurrentResponse.header
  46. t[#t] = string.format("%s: %s", header, value)
  47. end
  48. SAPI.Response.redirect = function(uri)
  49. print("Redirect: " .. uri)
  50. end
  51. SAPI.Response.write = function(...)
  52. if not SAPI._CurrentResponse.written then
  53. if arg[1]:sub(4) ~= "HTTP" then
  54. mg.write("HTTP/1.1 " .. SAPI._CurrentResponse.status .. " " .. mg.get_response_code_text(SAPI._CurrentResponse.status) .. "\r\n")
  55. mg.write("Content-Type: " .. SAPI._CurrentResponse.contenttype .. "\r\n")
  56. for _,v in ipairs(SAPI._CurrentResponse.header) do
  57. mg.write(v .. "\r\n")
  58. end
  59. mg.write("\r\n")
  60. end
  61. SAPI._CurrentResponse.written = true;
  62. end
  63. for _,v in ipairs(arg) do
  64. mg.write(v)
  65. end
  66. end
  67. -----------------------------------------------------
  68. -- Use cgilua interface
  69. require "cgilua"