webmcp

annotate framework/env/request/__init.lua @ 91:2f8d8edd1836

URL parsing inside WebMCP to simplify webserver configuration
author jbe
date Wed Oct 10 17:41:46 2012 +0200 (2012-10-10)
parents 985024b16520
children db4bf2e6513c
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/bsw@0 6 request._404_route = nil
jbe/bsw@0 7 request._force_absolute_baseurl = false
jbe/bsw@0 8 request._perm_params = {}
jbe/bsw@0 9 request._csrf_secret = nil
jbe@1 10 request._json_requests_allowed = false
jbe/bsw@0 11
jbe@91 12 request._params = {}
jbe/bsw@0 13 local depth
jbe/bsw@0 14 if cgi then -- if-clause to support interactive mode
jbe@91 15 for key, value in pairs(cgi.params) do
jbe@91 16 if not string.match(key, "^_webmcp_") then
jbe@91 17 request._params[key] = value
jbe@91 18 end
jbe@91 19 end
jbe@91 20 local path = cgi.params._webmcp_path
jbe@91 21 if path then
jbe@91 22 local function parse()
jbe@91 23 local module, action, view, suffix, id
jbe@91 24 if path == "" then
jbe@91 25 request._module = "index"
jbe@91 26 request._view = "index"
jbe@91 27 depth = 0
jbe@91 28 end
jbe@91 29 module = string.match(path, "^([^/]+)/$")
jbe@91 30 if module then
jbe@91 31 request._module = module
jbe@91 32 request._view = "index"
jbe@91 33 depth = 1
jbe@91 34 return
jbe@91 35 end
jbe@91 36 module, action = string.match(path, "^([^/]+)/([^/.]+)$")
jbe@91 37 if module then
jbe@91 38 request._module = module
jbe@91 39 request._action = action
jbe@91 40 depth = 1
jbe@91 41 return
jbe@91 42 end
jbe@91 43 module, view, suffix = string.match(path, "^([^/]+)/([^/.]+)%.([^/]+)$")
jbe@91 44 if module then
jbe@91 45 request._module = module
jbe@91 46 request._view = view
jbe@91 47 request._suffix = suffix
jbe@91 48 depth = 1
jbe@91 49 return
jbe@91 50 end
jbe@91 51 module, view, id, suffix = string.match(path, "^([^/]+)/([^/]+)/([^/.]+)%.([^/]+)$")
jbe@91 52 if module then
jbe@91 53 request._module = module
jbe@91 54 request._view = view
jbe@91 55 request._id = id
jbe@91 56 request._suffix = suffix
jbe@91 57 depth = 2
jbe@91 58 return
jbe@91 59 end
jbe@91 60 end
jbe@91 61 parse()
jbe@91 62 else
jbe@91 63 request._module = cgi.params._webmcp_module
jbe@91 64 request._action = cgi.params._webmcp_action
jbe@91 65 request._view = cgi.params._webmcp_view
jbe@91 66 request._suffix = cgi.params._webmcp_suffix
jbe@91 67 request._id = cgi.params._webmcp_id
jbe@91 68 end
jbe/bsw@0 69 depth = tonumber(cgi.params._webmcp_urldepth)
jbe/bsw@0 70 end
jbe/bsw@0 71 if depth and depth > 0 then
jbe/bsw@0 72 local elements = {}
jbe/bsw@0 73 for i = 1, depth do
jbe/bsw@0 74 elements[#elements+1] = "../"
jbe/bsw@0 75 end
jbe/bsw@0 76 request._relative_baseurl = table.concat(elements)
jbe/bsw@0 77 else
jbe/bsw@0 78 request._relative_baseurl = "./"
jbe/bsw@0 79 end
jbe/bsw@0 80
jbe/bsw@0 81 request._app_basepath = assert(
jbe/bsw@0 82 os.getenv("WEBMCP_APP_BASEPATH"),
jbe/bsw@0 83 'WEBMCP_APP_BASEPATH is not set.'
jbe/bsw@0 84 )
jbe/bsw@0 85 if not string.find(request._app_basepath, "/$") then
jbe/bsw@0 86 request._app_basebase = request._app_basepath .. "/"
jbe/bsw@0 87 end

Impressum / About Us