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{

Impressum / About Us