comparison mod_http_upload/mod_http_upload.lua @ 3625:a578b4977bb0

mod_http_upload: Duplicate mime types handling from mod_http_files (fixes #1374) When using net.http.files this isn't automatically provided via mod_http_files so we need to do it ourselves.
author Kim Alvefur <zash@zash.se>
date Sat, 29 Jun 2019 19:26:08 +0200
parents d8cc8b71a199
children aa12b95a6d36
comparison
equal deleted inserted replaced
3624:3109a65ab7f4 3625:a578b4977bb0
48 48
49 if not pcall(function () 49 if not pcall(function ()
50 http_files = require "net.http.files"; 50 http_files = require "net.http.files";
51 end) then 51 end) then
52 http_files = module:depends"http_files"; 52 http_files = module:depends"http_files";
53 end
54
55 local mime_map = module:shared("/*/http_files/mime").types;
56 if not mime_map then
57 mime_map = {
58 html = "text/html", htm = "text/html",
59 xml = "application/xml",
60 txt = "text/plain",
61 css = "text/css",
62 js = "application/javascript",
63 png = "image/png",
64 gif = "image/gif",
65 jpeg = "image/jpeg", jpg = "image/jpeg",
66 svg = "image/svg+xml",
67 };
68 module:shared("/*/http_files/mime").types = mime_map;
69
70 local mime_types, err = io.open(module:get_option_path("mime_types_file", "/etc/mime.types", "config"), "r");
71 if mime_types then
72 local mime_data = mime_types:read("*a");
73 mime_types:close();
74 setmetatable(mime_map, {
75 __index = function(t, ext)
76 local typ = mime_data:match("\n(%S+)[^\n]*%s"..(ext:lower()).."%s") or "application/octet-stream";
77 t[ext] = typ;
78 return typ;
79 end
80 });
81 end
53 end 82 end
54 83
55 -- namespaces 84 -- namespaces
56 local namespace = "urn:xmpp:http:upload:0"; 85 local namespace = "urn:xmpp:http:upload:0";
57 local legacy_namespace = "urn:xmpp:http:upload"; 86 local legacy_namespace = "urn:xmpp:http:upload";
340 else 369 else
341 response.conn:close(); 370 response.conn:close();
342 end 371 end
343 end 372 end
344 373
345 local serve_uploaded_files = http_files.serve(storage_path); 374 local serve_uploaded_files = http_files.serve({ path = storage_path, mime_map = mime_map });
346 375
347 local function serve_head(event, path) 376 local function serve_head(event, path)
348 set_cross_domain_headers(event.response); 377 set_cross_domain_headers(event.response);
349 event.response.send = send_response_sans_body; 378 event.response.send = send_response_sans_body;
350 event.response.send_file = send_response_sans_body; 379 event.response.send_file = send_response_sans_body;