xref: /minix3/libexec/httpd/printenv.lua (revision 340f5e56603e4275faeb89a9aacace41ba22d661)
1*340f5e56SDavid van Moolenbroek-- $NetBSD: printenv.lua,v 1.2 2014/01/02 08:21:38 mrg Exp $
2*340f5e56SDavid van Moolenbroek
3*340f5e56SDavid van Moolenbroek-- this small Lua script demonstrates the use of Lua in (bozo)httpd
4*340f5e56SDavid van Moolenbroek-- it will simply output the "environment"
5*340f5e56SDavid van Moolenbroek
6*340f5e56SDavid van Moolenbroek-- Keep in mind that bozohttpd forks for each request when started in
7*340f5e56SDavid van Moolenbroek-- daemon mode, you can set global veriables here, but they will have
8*340f5e56SDavid van Moolenbroek-- the same value on each invocation.  You can not keep state between
9*340f5e56SDavid van Moolenbroek-- two calls.
10*340f5e56SDavid van Moolenbroek
11*340f5e56SDavid van Moolenbroeklocal httpd = require 'httpd'
12*340f5e56SDavid van Moolenbroek
13*340f5e56SDavid van Moolenbroekfunction printenv(env, headers, query)
14*340f5e56SDavid van Moolenbroek
15*340f5e56SDavid van Moolenbroek	-- we get the "environment" in the env table, the values are more
16*340f5e56SDavid van Moolenbroek	-- or less the same as the variable for a CGI program
17*340f5e56SDavid van Moolenbroek
18*340f5e56SDavid van Moolenbroek	if count == nil then
19*340f5e56SDavid van Moolenbroek		count = 1
20*340f5e56SDavid van Moolenbroek	end
21*340f5e56SDavid van Moolenbroek
22*340f5e56SDavid van Moolenbroek	-- output a header
23*340f5e56SDavid van Moolenbroek	print([[
24*340f5e56SDavid van Moolenbroek		<html>
25*340f5e56SDavid van Moolenbroek			<head>
26*340f5e56SDavid van Moolenbroek				<title>Bozotic Lua Environment</title>
27*340f5e56SDavid van Moolenbroek			</head>
28*340f5e56SDavid van Moolenbroek			<body>
29*340f5e56SDavid van Moolenbroek				<h1>Bozotic Lua Environment</h1>
30*340f5e56SDavid van Moolenbroek	]])
31*340f5e56SDavid van Moolenbroek
32*340f5e56SDavid van Moolenbroek	print('module version: ' .. httpd._VERSION .. '<br>')
33*340f5e56SDavid van Moolenbroek
34*340f5e56SDavid van Moolenbroek	print('<h2>Server Environment</h2>')
35*340f5e56SDavid van Moolenbroek	-- print the list of "environment" variables
36*340f5e56SDavid van Moolenbroek	for k, v in pairs(env) do
37*340f5e56SDavid van Moolenbroek		print(k .. '=' .. v .. '<br/>')
38*340f5e56SDavid van Moolenbroek	end
39*340f5e56SDavid van Moolenbroek
40*340f5e56SDavid van Moolenbroek	print('<h2>Request Headers</h2>')
41*340f5e56SDavid van Moolenbroek	for k, v in pairs(headers) do
42*340f5e56SDavid van Moolenbroek		print(k .. '=' .. v .. '<br/>')
43*340f5e56SDavid van Moolenbroek	end
44*340f5e56SDavid van Moolenbroek
45*340f5e56SDavid van Moolenbroek	if query ~= nil then
46*340f5e56SDavid van Moolenbroek		print('<h2>Query Variables</h2>')
47*340f5e56SDavid van Moolenbroek		for k, v in pairs(query) do
48*340f5e56SDavid van Moolenbroek			print(k .. '=' .. v .. '<br/>')
49*340f5e56SDavid van Moolenbroek		end
50*340f5e56SDavid van Moolenbroek	end
51*340f5e56SDavid van Moolenbroek
52*340f5e56SDavid van Moolenbroek	print('<h2>Form Test</h2>')
53*340f5e56SDavid van Moolenbroek
54*340f5e56SDavid van Moolenbroek	print([[
55*340f5e56SDavid van Moolenbroek	<form method="POST" action="/rest/form?sender=me">
56*340f5e56SDavid van Moolenbroek	<input type="text" name="a_value">
57*340f5e56SDavid van Moolenbroek	<input type="submit">
58*340f5e56SDavid van Moolenbroek	</form>
59*340f5e56SDavid van Moolenbroek	]])
60*340f5e56SDavid van Moolenbroek	-- output a footer
61*340f5e56SDavid van Moolenbroek	print([[
62*340f5e56SDavid van Moolenbroek		</body>
63*340f5e56SDavid van Moolenbroek	</html>
64*340f5e56SDavid van Moolenbroek	]])
65*340f5e56SDavid van Moolenbroekend
66*340f5e56SDavid van Moolenbroek
67*340f5e56SDavid van Moolenbroekfunction form(env, header, query)
68*340f5e56SDavid van Moolenbroek	if query ~= nil then
69*340f5e56SDavid van Moolenbroek		print('<h2>Form Variables</h2>')
70*340f5e56SDavid van Moolenbroek
71*340f5e56SDavid van Moolenbroek		if env.CONTENT_TYPE ~= nil then
72*340f5e56SDavid van Moolenbroek			print('Content-type: ' .. env.CONTENT_TYPE .. '<br>')
73*340f5e56SDavid van Moolenbroek		end
74*340f5e56SDavid van Moolenbroek
75*340f5e56SDavid van Moolenbroek		for k, v in pairs(query) do
76*340f5e56SDavid van Moolenbroek			print(k .. '=' .. v .. '<br/>')
77*340f5e56SDavid van Moolenbroek		end
78*340f5e56SDavid van Moolenbroek	else
79*340f5e56SDavid van Moolenbroek		print('No values')
80*340f5e56SDavid van Moolenbroek	end
81*340f5e56SDavid van Moolenbroekend
82*340f5e56SDavid van Moolenbroek
83*340f5e56SDavid van Moolenbroek-- register this handler for http://<hostname>/<prefix>/printenv
84*340f5e56SDavid van Moolenbroekhttpd.register_handler('printenv', printenv)
85*340f5e56SDavid van Moolenbroekhttpd.register_handler('form', form)
86