webmcp
view framework/env/request/__init.lua @ 212:47ebf4213716
Storage of Moonbridge's HTTP request and request handler options in request environment
| author | jbe | 
|---|---|
| date | Sat Jan 10 00:50:44 2015 +0100 (2015-01-10) | 
| parents | dd21d2e06a95 | 
| children | ba3dd4a17e3d | 
 line source
     1 request._http_request = nil
     2 request._http_options = {}
     4 request._status = nil
     5 request._forward = nil
     6 request._forward_processed = false
     7 request._redirect = nil
     8 request._absolute_baseurl = nil
     9 request._is_404 = false
    10 request._404_route = nil
    11 request._force_absolute_baseurl = false
    12 request._perm_params = {}
    13 request._csrf_secret = nil
    14 request._json_requests_allowed = false
    16 request._params = {}
    17 local depth
    18 if cgi then  -- if-clause to support interactive mode
    19   if cgi.params._webmcp_404 then
    20     request.force_absolute_baseurl()
    21     request._is_404 = true
    22   end
    23   for key, value in pairs(cgi.params) do
    24     if not string.match(key, "^_webmcp_") then
    25       request._params[key] = value
    26     end
    27   end
    28   local path = cgi.params._webmcp_path
    29   if path then
    30     local function parse()
    31       local module, action, view, suffix, id
    32       if path == "" then
    33         request._module = "index"
    34         request._view   = "index"
    35         return
    36       end
    37       module = string.match(path, "^([^/]+)/$")
    38       if module then
    39         request._module = module
    40         request._view   = "index"
    41         return
    42       end
    43       module, action = string.match(path, "^([^/]+)/([^/.]+)$")
    44       if module then
    45         request._module = module
    46         request._action = action
    47         return
    48       end
    49       module, view, suffix = string.match(path, "^([^/]+)/([^/.]+)%.([^/]+)$")
    50       if module then
    51         request._module = module
    52         request._view   = view
    53         request._suffix = suffix
    54         return
    55       end
    56       module, view, id, suffix = string.match(path, "^([^/]+)/([^/]+)/([^/.]+)%.([^/]+)$")
    57       if module then
    58         request._module = module
    59         request._view   = view
    60         request._id     = id
    61         request._suffix = suffix
    62         return
    63       end
    64       request._is_404 = true
    65     end
    66     parse()
    67     -- allow id to also be set by "_webmcp_id" parameter
    68     if cgi.params._webmcp_id ~= nil then
    69       request._id = cgi.params._webmcp_id
    70     end
    71     depth = 0
    72     for match in string.gmatch(path, "/") do
    73       depth = depth + 1
    74     end
    75   else
    76     request._module = cgi.params._webmcp_module
    77     request._action = cgi.params._webmcp_action
    78     request._view   = cgi.params._webmcp_view
    79     request._suffix = cgi.params._webmcp_suffix
    80     request._id     = cgi.params._webmcp_id
    81     depth = tonumber(cgi.params._webmcp_urldepth)
    82   end
    83 end
    84 if depth and depth > 0 then
    85   local elements = {}
    86   for i = 1, depth do
    87     elements[#elements+1] = "../"
    88   end
    89   request._relative_baseurl = table.concat(elements)
    90 else
    91   request._relative_baseurl = "./"
    92 end
    94 request._app_basepath = assert(
    95   os.getenv("WEBMCP_APP_BASEPATH"),
    96   'WEBMCP_APP_BASEPATH is not set.'
    97 )
    98 if not string.find(request._app_basepath, "/$") then
    99   request._app_basebase = request._app_basepath .. "/"
   100 end
