webmcp
changeset 221:25a20bd1f416
More work on Moonbridge integration: several changes in env/request
author | jbe |
---|---|
date | Wed Feb 25 01:33:27 2015 +0100 (2015-02-25) |
parents | e69251d4ba0e |
children | 38e5399718ca |
files | framework/env/request/__init.lua framework/env/request/add_header.lua framework/env/request/default_router.lua framework/env/request/get_action.lua framework/env/request/get_id_string.lua framework/env/request/get_module.lua framework/env/request/get_param_strings.lua framework/env/request/get_view.lua framework/env/request/handler.lua framework/env/request/is_404.lua framework/env/request/process.lua |
line diff
1.1 --- a/framework/env/request/__init.lua Sun Feb 22 17:16:13 2015 +0100 1.2 +++ b/framework/env/request/__init.lua Wed Feb 25 01:33:27 2015 +0100 1.3 @@ -1,12 +1,12 @@ 1.4 request._http_request = nil 1.5 request._http_options = {} 1.6 +request._response_headers = {} 1.7 1.8 request._status = nil 1.9 request._forward = nil 1.10 request._forward_processed = false 1.11 request._redirect = nil 1.12 request._absolute_baseurl = nil 1.13 -request._is_404 = false 1.14 request._404_route = nil 1.15 request._force_absolute_baseurl = false 1.16 request._perm_params = {}
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 2.2 +++ b/framework/env/request/add_header.lua Wed Feb 25 01:33:27 2015 +0100 2.3 @@ -0,0 +1,3 @@ 2.4 +function request.add_header(key, value) 2.5 + request._response_headers[#request._response_headers+1] = {key, value} 2.6 +end
3.1 --- a/framework/env/request/default_router.lua Sun Feb 22 17:16:13 2015 +0100 3.2 +++ b/framework/env/request/default_router.lua Wed Feb 25 01:33:27 2015 +0100 3.3 @@ -12,25 +12,22 @@ 3.4 if not path then 3.5 return nil 3.6 end 3.7 - if not string.match(path, "^/") then 3.8 - path = "/" .. path 3.9 - end 3.10 - if path == "/" then 3.11 + if path == "" then 3.12 return {module = "index", view = "index"} 3.13 end 3.14 - module = string.match(path, "^/([^/]+)/$") 3.15 + module = string.match(path, "^([^/]+)/$") 3.16 if module then 3.17 return {module = module, view = "index"} 3.18 end 3.19 - module, action = string.match(path, "^/([^/]+)/([^/.]+)$") 3.20 + module, action = string.match(path, "^([^/]+)/([^/.]+)$") 3.21 if module then 3.22 return {module = module, action = action} 3.23 end 3.24 - module, view, suffix = string.match(path, "^/([^/]+)/([^/.]+)%.([^/]+)$") 3.25 + module, view, suffix = string.match(path, "^([^/]+)/([^/.]+)%.([^/]+)$") 3.26 if module then 3.27 return {module = module, view = view, suffix = suffix} 3.28 end 3.29 - module, view, id, suffix = string.match(path, "^/([^/]+)/([^/]+)/([^/.]+)%.([^/]+)$") 3.30 + module, view, id, suffix = string.match(path, "^([^/]+)/([^/]+)/([^/.]+)%.([^/]+)$") 3.31 if module then 3.32 return {module = module, view = view, id = id, suffix = suffix} 3.33 end
4.1 --- a/framework/env/request/get_action.lua Sun Feb 22 17:16:13 2015 +0100 4.2 +++ b/framework/env/request/get_action.lua Wed Feb 25 01:33:27 2015 +0100 4.3 @@ -10,6 +10,6 @@ 4.4 if request._forward_processed then 4.5 return nil 4.6 else 4.7 - return request._action 4.8 + return request._route.action 4.9 end 4.10 end
5.1 --- a/framework/env/request/get_id_string.lua Sun Feb 22 17:16:13 2015 +0100 5.2 +++ b/framework/env/request/get_id_string.lua Wed Feb 25 01:33:27 2015 +0100 5.3 @@ -7,5 +7,5 @@ 5.4 --]]-- 5.5 5.6 function request.get_id_string() 5.7 - return request._id 5.8 + return request._route.id 5.9 end
6.1 --- a/framework/env/request/get_module.lua Sun Feb 22 17:16:13 2015 +0100 6.2 +++ b/framework/env/request/get_module.lua Wed Feb 25 01:33:27 2015 +0100 6.3 @@ -8,8 +8,8 @@ 6.4 6.5 function request.get_module() 6.6 if request._forward_processed then 6.7 - return request._forward.module or request._module or 'index' 6.8 + return request._forward.module or request._route.module or 'index' 6.9 else 6.10 - return request._module or 'index' 6.11 + return request._route.module or 'index' 6.12 end 6.13 end
7.1 --- a/framework/env/request/get_param_strings.lua Sun Feb 22 17:16:13 2015 +0100 7.2 +++ b/framework/env/request/get_param_strings.lua Wed Feb 25 01:33:27 2015 +0100 7.3 @@ -1,19 +1,26 @@ 7.4 --[[-- 7.5 params = 7.6 -param.get_param_strings() 7.7 +request.get_param_strings() 7.8 7.9 This function returns a table with all raw GET/POST parameters as strings or list of strings (except internal parameters like "_webmcp_path" or "_webmcp_id"). Modifications of the returned table have no side effects. 7.10 7.11 --]]-- 7.12 7.13 +local function merge_params(tbl, params_list) 7.14 + for key, values in pairs(tbl) do 7.15 + if string.match(key, "^_webmcp_") then 7.16 + -- do nothing 7.17 + elseif string.match(key, "%[%]$") then 7.18 + tbl[key] = table.new(values) 7.19 + else 7.20 + tbl[key] = values[1] 7.21 + end 7.22 + end 7.23 +end 7.24 + 7.25 function request.get_param_strings() 7.26 local t = {} 7.27 - for key, value in pairs(request._params) do 7.28 - if type(value) == 'table' then 7.29 - t[key] = table.new(value) 7.30 - else 7.31 - t[key] = value 7.32 - end 7.33 - end 7.34 + merge_params(t, request._http_request.get_params_list) 7.35 + merge_params(t, request._http_request.post_params_list) 7.36 return t 7.37 end
8.1 --- a/framework/env/request/get_view.lua Sun Feb 22 17:16:13 2015 +0100 8.2 +++ b/framework/env/request/get_view.lua Wed Feb 25 01:33:27 2015 +0100 8.3 @@ -11,13 +11,13 @@ 8.4 return request._forward.view or 'index' 8.5 else 8.6 if request._view then 8.7 - local suffix = request._suffix or "html" 8.8 + local suffix = request._route._suffix or "html" 8.9 if suffix == "html" then 8.10 - return request._view 8.11 + return request._route._view 8.12 else 8.13 - return request._view .. "." .. suffix 8.14 + return request._route._view .. "." .. suffix 8.15 end 8.16 - elseif not request._action then 8.17 + elseif not request._route._action then 8.18 return 'index' 8.19 else 8.20 return nil
9.1 --- a/framework/env/request/handler.lua Sun Feb 22 17:16:13 2015 +0100 9.2 +++ b/framework/env/request/handler.lua Wed Feb 25 01:33:27 2015 +0100 9.3 @@ -11,20 +11,16 @@ 9.4 request._http_request = http_request 9.5 local path = http_request.path 9.6 if path then 9.7 - local elements = {} 9.8 + local relative_baseurl_elements = {} 9.9 for match in string.gmatch(path, "/") do 9.10 - elements[#elements+1] = "../" 9.11 + relative_baseurl_elements[#relative_baseurl_elements+1] = "../" 9.12 end 9.13 - elements[#elements] = nil 9.14 - if #elements > 0 then 9.15 - request._relative_baseurl = table.concat(elements) 9.16 - else 9.17 - request._relative_baseurl = "./" 9.18 - end 9.19 + request._relative_baseurl = table.concat(relative_baseurl_elements) 9.20 else 9.21 request._relative_baseurl = nil 9.22 end 9.23 - request.process(request.router()) 9.24 + request._route = request.router() 9.25 + request.process() 9.26 end 9.27 9.28 --//--
10.1 --- a/framework/env/request/is_404.lua Sun Feb 22 17:16:13 2015 +0100 10.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 10.3 @@ -1,11 +0,0 @@ 10.4 ---[[-- 10.5 -is_404 = -- boolean 10.6 -request.is_404() 10.7 - 10.8 -Returns true, if this request results in a 404, else false. 10.9 - 10.10 ---]]-- 10.11 - 10.12 -function request.is_404() 10.13 - return request._is_404 10.14 -end
11.1 --- a/framework/env/request/process.lua Sun Feb 22 17:16:13 2015 +0100 11.2 +++ b/framework/env/request/process.lua Wed Feb 25 01:33:27 2015 +0100 11.3 @@ -10,7 +10,7 @@ 11.4 end 11.5 end 11.6 11.7 -function request.process(route) 11.8 +function request.process() 11.9 11.10 local success, error_info = xpcall( 11.11 function() 11.12 @@ -23,15 +23,7 @@ 11.13 if blob then slot.restore_all(blob) end 11.14 end 11.15 11.16 - 11.17 - if request.is_404() then 11.18 - request.set_status("404 Not Found") 11.19 - if request.get_404_route() then 11.20 - request.forward(request.get_404_route()) 11.21 - else 11.22 - error("No 404 page set.") 11.23 - end 11.24 - elseif request.get_action() then 11.25 + if request.get_action() then 11.26 trace.request{ 11.27 module = request.get_module(), 11.28 action = request.get_action() 11.29 @@ -48,9 +40,9 @@ 11.30 request.set_status("404 Not Found") 11.31 request.forward(request.get_404_route()) 11.32 else 11.33 - if cgi.method ~= "POST" then 11.34 + if request._http_request.method ~= "POST" then 11.35 request.set_status("405 Method Not Allowed") 11.36 - cgi.add_header("Allow: POST") 11.37 + request.add_header("Allow", "POST") 11.38 error("Tried to invoke an action with a GET request.") 11.39 end 11.40 local action_status = execute.filtered_action{