Software /
code /
prosody
Comparison
plugins/mod_httpserver.lua @ 2771:c9834f338a4e
mod_httpserver: Return Content-Type header based on file extension.
author | Waqas Hussain <waqas20@gmail.com> |
---|---|
date | Thu, 10 Dec 2009 16:22:34 +0500 |
parent | 1870:5b5e4a4ecb55 |
child | 2772:18d83fd07db1 |
comparison
equal
deleted
inserted
replaced
2770:716260e3b017 | 2771:c9834f338a4e |
---|---|
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_404 = { status = "404 Not Found", body = "<h1>Page Not Found</h1>Sorry, we couldn't find what you were looking for :(" }; | 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 | |
20 -- TODO: Should we read this from /etc/mime.types if it exists? (startup time...?) | |
21 local mime_map = { | |
22 html = "text/html"; | |
23 htm = "text/html"; | |
24 xml = "text/xml"; | |
25 xsl = "text/xml"; | |
26 txt = "plain/text; charset=utf-8"; | |
27 js = "text/javascript"; | |
28 css = "text/css"; | |
29 }; | |
19 | 30 |
20 local function preprocess_path(path) | 31 local function preprocess_path(path) |
21 if path:sub(1,1) ~= "/" then | 32 if path:sub(1,1) ~= "/" then |
22 path = "/"..path; | 33 path = "/"..path; |
23 end | 34 end |
38 function serve_file(path) | 49 function serve_file(path) |
39 local f, err = open(http_base..path, "r"); | 50 local f, err = open(http_base..path, "r"); |
40 if not f then return response_404; end | 51 if not f then return response_404; end |
41 local data = f:read("*a"); | 52 local data = f:read("*a"); |
42 f:close(); | 53 f:close(); |
43 return data; | 54 local ext = path:match("%.([^.]*)$"); |
55 local mime = mime_map[ext]; | |
56 if not mime then | |
57 mime = ext and "application/octet-stream" or "text/html"; | |
58 end | |
59 module:log("warn", "ext: %s, mime: %s", ext, mime); | |
60 return { | |
61 headers = { ["Content-Type"] = mime; }; | |
62 body = data; | |
63 }; | |
44 end | 64 end |
45 | 65 |
46 local function handle_file_request(method, body, request) | 66 local function handle_file_request(method, body, request) |
47 local path = preprocess_path(request.url.path); | 67 local path = preprocess_path(request.url.path); |
48 if not path then return response_400; end | 68 if not path then return response_400; end |