webmcp

changeset 270:aedd13009ddc

Proper handling of 404's and mime types for static file delivery
author jbe
date Fri Mar 20 16:38:37 2015 +0100 (2015-03-20)
parents 4858cffe1aa1
children d6bcb9eadd39
files framework/env/request/__init.lua framework/env/request/handler.lua framework/env/request/register_mime_type.lua
line diff
     1.1 --- a/framework/env/request/__init.lua	Fri Mar 20 15:47:51 2015 +0100
     1.2 +++ b/framework/env/request/__init.lua	Fri Mar 20 16:38:37 2015 +0100
     1.3 @@ -2,6 +2,18 @@
     1.4  request._in_progress = false
     1.5  
     1.6  -- initialize once
     1.7 +request._mime_types = {
     1.8 +  "html", "text/html",
     1.9 +  "css", "text/css",
    1.10 +  "js", "application/javascript",
    1.11 +  "png", "image/png",
    1.12 +  "jpeg", "image/jpeg",
    1.13 +  "jpg", "image/jpeg",
    1.14 +  "gif", "image/gif",
    1.15 +  "svg", "image/svg+xml",
    1.16 +  "pdf", "application/pdf",
    1.17 +  "txt", "text/plain"
    1.18 +}
    1.19  request._absolute_baseurl = nil
    1.20  request._http_options = {}
    1.21  
     2.1 --- a/framework/env/request/handler.lua	Fri Mar 20 15:47:51 2015 +0100
     2.2 +++ b/framework/env/request/handler.lua	Fri Mar 20 16:38:37 2015 +0100
     2.3 @@ -1,6 +1,6 @@
     2.4  --[[--
     2.5  request.handler(
     2.6 -  request,        -- HTTP request object
     2.7 +  http_request,   -- HTTP request object
     2.8    close           -- boolean indicating whether the server should announce to close the connection
     2.9  )
    2.10  
    2.11 @@ -18,7 +18,6 @@
    2.12    end
    2.13  end
    2.14  
    2.15 --- TODO: function incomplete yet
    2.16  function request.handler(http_request, close)
    2.17    _G.app = {}  -- may be overwritten or modified by request initializers
    2.18    do
    2.19 @@ -49,11 +48,21 @@
    2.20      function()
    2.21  
    2.22        if request._route.static then
    2.23 -        local f = assert(io.open(WEBMCP_BASE_PATH .. "static/" .. request._route.static, "r"))
    2.24 -        local d = f:read("*a")
    2.25 +        local f, errmsg = io.open(WEBMCP_BASE_PATH .. "static/" .. request._route.static, "r")
    2.26 +        if not f then
    2.27 +          if request.get_404_route() then
    2.28 +            request.set_status("404 Not Found")
    2.29 +            request.forward(request.get_404_route())
    2.30 +            return
    2.31 +          else
    2.32 +            error('Could not open static file "' .. request._route.static .. '": ' .. errmsg)
    2.33 +          end
    2.34 +        end
    2.35 +        local d = assert(f:read("*a"))
    2.36          f:close()
    2.37          slot.put_into("data", d)
    2.38 -        slot.set_layout(nil, "application/octet-stream")  -- TODO
    2.39 +        local filename_extension = string.match(request._route.static, "%.([^.]+)$")
    2.40 +        slot.set_layout(nil, request._mime_types[filename_extension] or "application/octet-stream")
    2.41          return
    2.42        end
    2.43  
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/framework/env/request/register_mime_type.lua	Fri Mar 20 16:38:37 2015 +0100
     3.3 @@ -0,0 +1,13 @@
     3.4 +--[[--
     3.5 +request.register_mime_type(
     3.6 +  filename_extension,
     3.7 +  mime_type
     3.8 +)
     3.9 +
    3.10 +Registers a mime type for a given filename extension (case sensitive).
    3.11 +
    3.12 +--]]--
    3.13 +
    3.14 +function request.register_mime_type(filename_extension, mime_type)
    3.15 +  request._mime_types[filename_extension] = mime_type
    3.16 +end

Impressum / About Us