Mercurial > prosody-modules
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(); |
