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