2013-12-20 16:29:46 +01:00
--
-- This file is part of the Doodle3D project (http://doodle3d.com).
--
-- @copyright 2013, Doodle3D
-- @license This software is licensed under the terms of the GNU GPL v2 or later.
-- See file LICENSE.txt or visit http://www.gnu.org/licenses/gpl.html for full license details.
2013-11-05 01:46:32 +01:00
---
-- This file wraps @{main.handle_request} in main.lua for command-line or CGI usage.
2013-08-21 22:49:17 +02:00
-- It emulates the env table usually constructed by uhttpd-mod-lua.
local main = require ( 'main' )
2013-11-05 01:46:32 +01:00
--- Create an environment table mimicking the table uhttpd-mod-lua passes into @{main.handle_request}.
--
-- The table is created using shell environment variables leaving out only 'DOCUMENT\_ROOT',
-- 'SCRIPT\_PATH' and the regular shell variables (e.g., IFS, HOME and PS1).
--
2013-11-08 18:54:57 +01:00
-- See [information on CGI environment variables](http://techpubs.sgi.com/library/dynaweb_docs/0530/SGI_Developer/books/NetscapeSrv_PG/sgi_html/ch01.html).
--
2013-11-05 01:46:32 +01:00
-- Fields present in the 'real' env table but not in this one are: 'HTTP\_VERSION'
-- and another table 'headers' which is mostly mirrored by the 'HTTP\_*' fields.
-- Note that the 'headers' table may contain extra fields (e.g., 'cache-control').
2013-08-21 22:49:17 +02:00
-- @treturn table An environment table created from shell environment variables.
local function createEnvTableFromShellEnvironment ()
local environ = {}
2013-11-05 01:46:32 +01:00
2013-08-21 22:49:17 +02:00
environ [ 'CONTENT_LENGTH' ] = os.getenv ( 'CONTENT_LENGTH' ) or ''
environ [ 'CONTENT_TYPE' ] = os.getenv ( 'CONTENT_TYPE' ) or ''
environ [ 'GATEWAY_INTERFACE' ] = os.getenv ( 'GATEWAY_INTERFACE' ) or ''
environ [ 'HTTP_ACCEPT' ] = os.getenv ( 'HTTP_ACCEPT' ) or ''
environ [ 'HTTP_ACCEPT_CHARSET' ] = os.getenv ( 'HTTP_ACCEPT_CHARSET' ) or ''
environ [ 'HTTP_ACCEPT_ENCODING' ] = os.getenv ( 'HTTP_ACCEPT_ENCODING' ) or ''
environ [ 'HTTP_ACCEPT_LANGUAGE' ] = os.getenv ( 'HTTP_ACCEPT_LANGUAGE' ) or ''
environ [ 'HTTP_AUTHORIZATION' ] = os.getenv ( 'HTTP_AUTHORIZATION' ) or ''
environ [ 'HTTP_CONNECTION' ] = os.getenv ( 'HTTP_CONNECTION' ) or ''
environ [ 'HTTP_COOKIE' ] = os.getenv ( 'HTTP_COOKIE' ) or ''
environ [ 'HTTP_HOST' ] = os.getenv ( 'HTTP_HOST' ) or ''
environ [ 'HTTP_REFERER' ] = os.getenv ( 'HTTP_REFERER' ) or ''
environ [ 'HTTP_USER_AGENT' ] = os.getenv ( 'HTTP_USER_AGENT' ) or ''
environ [ 'PATH_INFO' ] = os.getenv ( 'PATH_INFO' ) or ''
environ [ 'QUERY_STRING' ] = os.getenv ( 'QUERY_STRING' ) or ''
environ [ 'REDIRECT_STATUS' ] = os.getenv ( 'REDIRECT_STATUS' ) or ''
environ [ 'REMOTE_ADDR' ] = os.getenv ( 'REMOTE_ADDR' ) or ''
environ [ 'REMOTE_HOST' ] = os.getenv ( 'REMOTE_HOST' ) or ''
environ [ 'REMOTE_PORT' ] = os.getenv ( 'REMOTE_PORT' ) or ''
environ [ 'REQUEST_METHOD' ] = os.getenv ( 'REQUEST_METHOD' ) or ''
environ [ 'REQUEST_URI' ] = os.getenv ( 'REQUEST_URI' ) or ''
environ [ 'SCRIPT_FILENAME' ] = os.getenv ( 'SCRIPT_FILENAME' ) or ''
environ [ 'SCRIPT_NAME' ] = os.getenv ( 'SCRIPT_NAME' ) or ''
environ [ 'SERVER_ADDR' ] = os.getenv ( 'SERVER_ADDR' ) or ''
environ [ 'SERVER_NAME' ] = os.getenv ( 'SERVER_NAME' ) or ''
environ [ 'SERVER_PORT' ] = os.getenv ( 'SERVER_PORT' ) or ''
environ [ 'SERVER_PROTOCOL' ] = os.getenv ( 'SERVER_PROTOCOL' ) or ''
environ [ 'SERVER_SOFTWARE' ] = os.getenv ( 'SERVER_SOFTWARE' ) or ''
2013-11-05 01:46:32 +01:00
2013-08-21 22:49:17 +02:00
return environ
end
--- Entry point for cgi-bin wrapper script. ---
local rv = handle_request ( createEnvTableFromShellEnvironment ())
os.exit ( rv )