page4.lua 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. -- This test checks the Lua functions:
  2. -- get_var, get_cookie, md5, url_encode
  3. now = os.time()
  4. cookie_name = "CivetWeb-test-page4"
  5. if mg.request_info.http_headers.Cookie then
  6. cookie_value = tonumber(mg.get_cookie(mg.request_info.http_headers.Cookie, cookie_name))
  7. end
  8. mg.write("HTTP/1.0 200 OK\r\n")
  9. mg.write("Connection: close\r\n")
  10. mg.write("Content-Type: text/html; charset=utf-8\r\n")
  11. mg.write("Cache-Control: max-age=0, must-revalidate\r\n")
  12. if not cookie_value then
  13. mg.write("Set-Cookie: " .. cookie_name .. "=" .. tostring(now) .. "\r\n")
  14. end
  15. mg.write("\r\n")
  16. mg.write("<html>\r\n<head><title>CivetWeb Lua script test page 4</title></head>\r\n<body>\r\n")
  17. mg.write("<p>Test of CivetWeb Lua Functions:</p>\r\n");
  18. mg.write("<pre>\r\n");
  19. -- get_var of query_string
  20. mg.write("get_var test (check query string):\r\n")
  21. if not mg.request_info.query_string then
  22. mg.write(" No query string. You may try <a href='?a=a1&amp;junk&amp;b=b2&amp;cc=cNotSet&amp;d=a, b and d should be set&amp;z=z'>this example</a>.\r\n")
  23. else
  24. for _,var in ipairs({'a','b','c','d'}) do
  25. value = mg.get_var(mg.request_info.query_string, var);
  26. if value then
  27. mg.write(" Variable " .. var .. ": value " .. value .. "\r\n");
  28. else
  29. mg.write(" Variable " .. var .. " not set\r\n");
  30. end
  31. end
  32. end
  33. mg.write("\r\n")
  34. -- md5
  35. mg.write("MD5 test:\r\n")
  36. test_string = "abcd\0efgh"
  37. mg.write(" String with embedded 0, length " .. string.len(test_string))
  38. test_md5 = mg.md5(test_string)
  39. mg.write(", MD5 " .. test_md5 .. "\r\n")
  40. if mg.md5("") == "d41d8cd98f00b204e9800998ecf8427e" then
  41. mg.write(" MD5 of empty string OK\r\n")
  42. else
  43. mg.write(" Error: MD5 of empty string NOT OK\r\n")
  44. end
  45. if mg.md5("The quick brown fox jumps over the lazy dog.") == "e4d909c290d0fb1ca068ffaddf22cbd0" then
  46. mg.write(" MD5 of test string OK\r\n")
  47. else
  48. mg.write(" Error: MD5 of test string NOT OK\r\n")
  49. end
  50. mg.write("\r\n")
  51. -- get_cookie
  52. mg.write("Cookie test:\r\n")
  53. if not cookie_value then
  54. mg.write(" Cookie not set yet. Please reload the page.\r\n")
  55. else
  56. mg.write(" Cookie set to " .. cookie_value .. "\r\n")
  57. mg.write(" You visited this page " .. os.difftime(now, cookie_value) .. " seconds before.\r\n")
  58. end
  59. mg.write("\r\n")
  60. -- test 'require' of other Lua scripts
  61. mg.write("require test\r\n")
  62. script_path = mg.script_name:match("(.*)page%d*.lua")
  63. if type(script_path)=='string' then
  64. package.path = script_path .. "?.lua;" .. package.path
  65. mg.write(" Lua search path: " .. package.path .. "\r\n")
  66. require "html_esc"
  67. require "require_test"
  68. if htmlEscape then
  69. for i=0,15 do
  70. mg.write(" ")
  71. for j=0,15 do
  72. mg.write(tostring(htmlEscape[16*i+j]))
  73. end
  74. mg.write("\r\n")
  75. end
  76. else
  77. mg.write(" 'require' test failed (htmlEscape)\r\n")
  78. end
  79. if HugeText then
  80. mg.write("\r\n")
  81. local ht = HugeText(os.date("%a %b. %d"))
  82. for i=1,#ht do
  83. mg.write(" " .. ht[i] .. "\r\n")
  84. end
  85. else
  86. mg.write(" 'require' test failed (HugeText)\r\n")
  87. end
  88. else
  89. mg.write(" name match failed\r\n")
  90. end
  91. mg.write("\r\n")
  92. -- test get_response_code_text
  93. mg.write("HTTP helper methods test:\r\n")
  94. if (htmlEscape("<a b & c d>") == "&lt;a b &amp; c d&gt;") then
  95. mg.write(" htmlEscape test OK\r\n")
  96. else
  97. mg.write(" Error: htmlEscape test NOT OK\r\n")
  98. end
  99. if (mg.get_response_code_text(200) == "OK") then
  100. mg.write(" get_response_code_text test OK\r\n")
  101. else
  102. mg.write(" Error: get_response_code_text test NOT OK\r\n")
  103. end
  104. mg.write("\r\n")
  105. -- url_encode
  106. mg.write("URL encode/decode test:\r\n")
  107. if mg.url_encode("") == "" then
  108. mg.write(" url_encode of empty string OK\r\n")
  109. else
  110. mg.write(" Error: url_encode of empty string NOT OK\r\n")
  111. end
  112. raw_string = [[ !"#$%&'()*+,-./0123456789:;<=>?@]]
  113. mg.write(" original string: " .. htmlEscape(raw_string) .. "\r\n")
  114. mg_string = mg.url_encode(raw_string):upper()
  115. ref_string = "%20!%22%23%24%25%26'()*%2B%2C-.%2F0123456789%3A%3B%3C%3D%3E%3F%40" -- from http://www.w3schools.com/tags/ref_urlencode.asp
  116. mg.write(" mg-url: " .. htmlEscape(mg_string) .. "\r\n")
  117. mg.write(" reference url: " .. htmlEscape(ref_string) .. "\r\n")
  118. dec_mg_string = mg.url_decode(mg_string)
  119. dec_ref_string = mg.url_decode(ref_string)
  120. mg.write(" decoded mg-url: " .. htmlEscape(dec_mg_string) .. "\r\n")
  121. mg.write(" decoded reference url: " .. htmlEscape(dec_ref_string) .. "\r\n")
  122. dec_mg_string = mg.url_decode(mg_string, false)
  123. dec_ref_string = mg.url_decode(ref_string, false)
  124. mg.write(" decoded mg-url: " .. htmlEscape(dec_mg_string) .. "\r\n")
  125. mg.write(" decoded reference url: " .. htmlEscape(dec_ref_string) .. "\r\n")
  126. dec_mg_string = mg.url_decode(mg_string, true)
  127. dec_ref_string = mg.url_decode(ref_string, true)
  128. mg.write(" decoded mg-url: " .. htmlEscape(dec_mg_string) .. "\r\n")
  129. mg.write(" decoded reference url: " .. htmlEscape(dec_ref_string) .. "\r\n")
  130. mg.write("\r\n")
  131. -- base64_encode
  132. mg.write("BASE64 encode/decode test:\r\n")
  133. raw_string = [[ !"#$%&'()*+,-./0123456789:;<=>?@]]
  134. mg.write(" original string: " .. htmlEscape(raw_string) .. "\r\n")
  135. mg_string = mg.base64_encode(raw_string)
  136. ref_string = "ICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9A" -- from http://www.base64encode.org/
  137. mg.write(" mg-base64: " .. htmlEscape(mg_string) .. "\r\n")
  138. mg.write(" reference base64: " .. htmlEscape(ref_string) .. "\r\n")
  139. dec_mg_string = mg.base64_decode(mg_string)
  140. dec_ref_string = mg.base64_decode(ref_string)
  141. mg.write(" decoded mg-base64: " .. htmlEscape(dec_mg_string) .. "\r\n")
  142. mg.write(" decoded reference base64: " .. htmlEscape(dec_ref_string) .. "\r\n")
  143. mg.write("\r\n")
  144. raw_string = [[<?> -?-]]
  145. mg.write(" original string: " .. htmlEscape(raw_string) .. "\r\n")
  146. mg_string = mg.base64_encode(raw_string)
  147. ref_string = "PD8+IC0/LQ==" -- from http://www.base64encode.org/
  148. mg.write(" mg-base64: " .. htmlEscape(mg_string) .. "\r\n")
  149. mg.write(" reference base64: " .. htmlEscape(ref_string) .. "\r\n")
  150. dec_mg_string = mg.base64_decode(mg_string)
  151. dec_ref_string = mg.base64_decode(ref_string)
  152. mg.write(" decoded mg-base64: " .. htmlEscape(dec_mg_string) .. "\r\n")
  153. mg.write(" decoded reference base64: " .. htmlEscape(dec_ref_string) .. "\r\n")
  154. mg.write("\r\n")
  155. -- random
  156. mg.write("Random numbers:\r\n")
  157. for i=1,10 do mg.write(string.format("%18u\r\n", mg.random())) end
  158. mg.write("\r\n")
  159. -- uuid
  160. if mg.uuid then
  161. mg.write("UUIDs:\r\n")
  162. for i=1,10 do mg.write(string.format("%40s\r\n", mg.uuid())) end
  163. mg.write("\r\n")
  164. end
  165. -- end of page
  166. mg.write("</pre>\r\n</body>\r\n</html>\r\n")