comparison mod_http_upload/mod_http_upload.lua @ 2683:d0948bd96a7b

mod_http_upload: Add support for limiting file types to upload
author Kim Alvefur <zash@zash.se>
date Thu, 13 Apr 2017 20:29:41 +0200
parents 3fd50495c89d
children e491a15d7621
comparison
equal deleted inserted replaced
2682:3fd50495c89d 2683:d0948bd96a7b
29 29
30 -- config 30 -- config
31 local file_size_limit = module:get_option_number(module.name .. "_file_size_limit", 1024 * 1024); -- 1 MB 31 local file_size_limit = module:get_option_number(module.name .. "_file_size_limit", 1024 * 1024); -- 1 MB
32 local quota = module:get_option_number(module.name .. "_quota"); 32 local quota = module:get_option_number(module.name .. "_quota");
33 local max_age = module:get_option_number(module.name .. "_expire_after"); 33 local max_age = module:get_option_number(module.name .. "_expire_after");
34 local allowed_file_types = module:get_option_set(module.name .. "_allowed_file_types");
34 35
35 --- sanity 36 --- sanity
36 local parser_body_limit = module:context("*"):get_option_number("http_max_content_size", 10*1024*1024); 37 local parser_body_limit = module:context("*"):get_option_number("http_max_content_size", 10*1024*1024);
37 if file_size_limit > parser_body_limit then 38 if file_size_limit > parser_body_limit then
38 module:log("warn", "%s_file_size_limit exceeds HTTP parser limit on body size, capping file size to %d B", 39 module:log("warn", "%s_file_size_limit exceeds HTTP parser limit on body size, capping file size to %d B",
138 origin.send(st.error_reply(stanza, "modify", "bad-request", "MIME type does not match file extension")); 139 origin.send(st.error_reply(stanza, "modify", "bad-request", "MIME type does not match file extension"));
139 return true; 140 return true;
140 end 141 end
141 end 142 end
142 143
144 if allowed_file_types then
145 if not (allowed_file_types:contains(mimetype) or allowed_file_types:contains(mimetype:gsub("/.*", "/*"))) then
146 origin.send(st.error_reply(stanza, "cancel", "not-allowed", "File type not allowed"));
147 return true;
148 end
149 end
150
143 local reply = st.reply(stanza); 151 local reply = st.reply(stanza);
144 reply:tag("slot", { xmlns = xmlns }); 152 reply:tag("slot", { xmlns = xmlns });
145 153
146 local random_dir; 154 local random_dir;
147 repeat random_dir = uuid(); 155 repeat random_dir = uuid();