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