webmcp

annotate framework/env/request/__init.lua @ 101:dd21d2e06a95

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

Impressum / About Us