# HG changeset patch # User Kim Alvefur # Date 1611669223 -3600 # Node ID c52fcea39c8ed70b5a136df80deaac29f3d942a7 # Parent 7c8b02c5a335ef865ac6c2b036f6dce558fb3a56 mod_http_file_share: Add file type filter Unlike mod_http_upload, this can't be bypassed by uploading with a different file extension. diff -r 7c8b02c5a335 -r c52fcea39c8e plugins/mod_http_file_share.lua --- a/plugins/mod_http_file_share.lua Tue Jan 26 14:53:24 2021 +0100 +++ b/plugins/mod_http_file_share.lua Tue Jan 26 14:53:43 2021 +0100 @@ -29,6 +29,7 @@ local secret = module:get_option_string(module.name.."_secret", require"util.id".long()); local external_base_url = module:get_option_string(module.name .. "_base_url"); local file_size_limit = module:get_option_number(module.name .. "_size_limit", 10 * 1024 * 1024); -- 10 MB +local file_types = module:get_option_set(module.name .. "_allowed_file_types", {}); local access = module:get_option_set(module.name .. "_access", {}); @@ -44,6 +45,7 @@ local upload_errors = errors.init(module.name, namespace, { access = { "auth"; "forbidden" }; filename = { "modify"; "bad-request", "Invalid filename" }; + filetype = { "modify"; "not-acceptable", "File type not allowed" }; filesize = { "modify"; "not-acceptable"; "File too large"; st.stanza("file-too-large", {xmlns = namespace}):tag("max-size"):text(tostring(file_size_limit)); }; }); @@ -63,6 +65,10 @@ return false, upload_errors.new("filesize"); end + if not ( file_types:empty() or file_types:contains(filetype) or file_types:contains(filetype:gsub("/.*", "/*")) ) then + return false, upload_errors.new("filetype"); + end + return true; end diff -r 7c8b02c5a335 -r c52fcea39c8e spec/scansion/http_upload.scs --- a/spec/scansion/http_upload.scs Tue Jan 26 14:53:24 2021 +0100 +++ b/spec/scansion/http_upload.scs Tue Jan 26 14:53:43 2021 +0100 @@ -50,6 +50,19 @@ +Romeo sends: + + + + +Romeo receives: + + + + File type not allowed + + + Romeo disconnects # recording ended on 2021-01-27T22:10:46Z diff -r 7c8b02c5a335 -r c52fcea39c8e spec/scansion/prosody.cfg.lua --- a/spec/scansion/prosody.cfg.lua Tue Jan 26 14:53:24 2021 +0100 +++ b/spec/scansion/prosody.cfg.lua Tue Jan 26 14:53:43 2021 +0100 @@ -134,3 +134,4 @@ Component "upload.localhost" "http_file_share" http_file_share_size_limit = 10000000 +http_file_share_allowed_file_types = { "text/plain", "image/*" }