Software /
code /
prosody
Comparison
plugins/mod_httpserver.lua @ 2785:08e0659ba1f2
mod_httpserver: Rudimentary directory detection, return forbidden instead of causing a traceback (since commit 0325f241a26c)
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Fri, 01 Jan 2010 21:32:23 +0000 |
parent | 2776:bdca5025fb46 |
child | 2923:b7049746bd29 |
comparison
equal
deleted
inserted
replaced
2784:e165414a454c | 2785:08e0659ba1f2 |
---|---|
13 local t_concat = table.concat; | 13 local t_concat = table.concat; |
14 | 14 |
15 local http_base = config.get("*", "core", "http_path") or "www_files"; | 15 local http_base = config.get("*", "core", "http_path") or "www_files"; |
16 | 16 |
17 local response_400 = { status = "400 Bad Request", body = "<h1>Bad Request</h1>Sorry, we didn't understand your request :(" }; | 17 local response_400 = { status = "400 Bad Request", body = "<h1>Bad Request</h1>Sorry, we didn't understand your request :(" }; |
18 local response_403 = { status = "403 Forbidden", body = "<h1>Forbidden</h1>You don't have permission to view the contents of this directory :(" }; | |
18 local response_404 = { status = "404 Not Found", body = "<h1>Page Not Found</h1>Sorry, we couldn't find what you were looking for :(" }; | 19 local response_404 = { status = "404 Not Found", body = "<h1>Page Not Found</h1>Sorry, we couldn't find what you were looking for :(" }; |
19 | 20 |
20 -- TODO: Should we read this from /etc/mime.types if it exists? (startup time...?) | 21 -- TODO: Should we read this from /etc/mime.types if it exists? (startup time...?) |
21 local mime_map = { | 22 local mime_map = { |
22 html = "text/html"; | 23 html = "text/html"; |
49 function serve_file(path) | 50 function serve_file(path) |
50 local f, err = open(http_base..path, "rb"); | 51 local f, err = open(http_base..path, "rb"); |
51 if not f then return response_404; end | 52 if not f then return response_404; end |
52 local data = f:read("*a"); | 53 local data = f:read("*a"); |
53 f:close(); | 54 f:close(); |
55 if not data then | |
56 return response_403; | |
57 end | |
54 local ext = path:match("%.([^.]*)$"); | 58 local ext = path:match("%.([^.]*)$"); |
55 local mime = mime_map[ext]; -- Content-Type should be nil when not known | 59 local mime = mime_map[ext]; -- Content-Type should be nil when not known |
56 return { | 60 return { |
57 headers = { ["Content-Type"] = mime; }; | 61 headers = { ["Content-Type"] = mime; }; |
58 body = data; | 62 body = data; |