printenv.lua revision 1.3 1 -- $NetBSD: printenv.lua,v 1.3 2015/12/07 03:11:48 kamil Exp $
2
3 -- this small Lua script demonstrates the use of Lua in (bozo)httpd
4 -- it will simply output the "environment"
5
6 -- Keep in mind that bozohttpd forks for each request when started in
7 -- daemon mode, you can set global veriables here, but they will have
8 -- the same value on each invocation. You can not keep state between
9 -- two calls.
10
11 -- You can test this example by running the following command:
12 -- /usr/libexec/httpd -b -f -I 8080 -L test printenv.lua .
13 -- and then navigate to: http://127.0.0.1:8080/test/printenv
14
15 local httpd = require 'httpd'
16
17 function printenv(env, headers, query)
18
19 -- we get the "environment" in the env table, the values are more
20 -- or less the same as the variable for a CGI program
21
22 -- output headers using httpd.write()
23 -- httpd.write() will not append newlines
24 httpd.write("HTTP/1.1 200 Ok\r\n")
25 httpd.write("Content-Type: text/html\r\n\r\n")
26
27 -- output html using httpd.print()
28 -- you can also use print() and io.write() but they will not work with SSL
29 httpd.print([[
30 <html>
31 <head>
32 <title>Bozotic Lua Environment</title>
33 </head>
34 <body>
35 <h1>Bozotic Lua Environment</h1>
36 ]])
37
38 httpd.print('module version: ' .. httpd._VERSION .. '<br>')
39
40 httpd.print('<h2>Server Environment</h2>')
41 -- print the list of "environment" variables
42 for k, v in pairs(env) do
43 httpd.print(k .. '=' .. v .. '<br/>')
44 end
45
46 httpd.print('<h2>Request Headers</h2>')
47 for k, v in pairs(headers) do
48 httpd.print(k .. '=' .. v .. '<br/>')
49 end
50
51 if query ~= nil then
52 httpd.print('<h2>Query Variables</h2>')
53 for k, v in pairs(query) do
54 httpd.print(k .. '=' .. v .. '<br/>')
55 end
56 end
57
58 httpd.print('<h2>Form Test</h2>')
59
60 httpd.print([[
61 <form method="POST" action="form?sender=me">
62 <input type="text" name="a_value">
63 <input type="submit">
64 </form>
65 ]])
66 -- output a footer
67 httpd.print([[
68 </body>
69 </html>
70 ]])
71 end
72
73 function form(env, header, query)
74
75 httpd.write("HTTP/1.1 200 Ok\r\n")
76 httpd.write("Content-Type: text/html\r\n\r\n")
77
78 if query ~= nil then
79 httpd.print('<h2>Form Variables</h2>')
80
81 if env.CONTENT_TYPE ~= nil then
82 httpd.print('Content-type: ' .. env.CONTENT_TYPE .. '<br>')
83 end
84
85 for k, v in pairs(query) do
86 httpd.print(k .. '=' .. v .. '<br/>')
87 end
88 else
89 httpd.print('No values')
90 end
91 end
92
93 -- register this handler for http://<hostname>/<prefix>/printenv
94 httpd.register_handler('printenv', printenv)
95 httpd.register_handler('form', form)
96