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

Impressum / About Us