Software /
code /
prosody
Changeset
11314:7c8b02c5a335
mod_http_file_share: Add file size limit (default 10M)
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Tue, 26 Jan 2021 14:53:24 +0100 |
parents | 11313:e53894d26092 |
children | 11315:c52fcea39c8e |
files | plugins/mod_http_file_share.lua spec/scansion/http_upload.scs spec/scansion/prosody.cfg.lua |
diffstat | 3 files changed, 30 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/plugins/mod_http_file_share.lua Tue Jan 26 14:52:37 2021 +0100 +++ b/plugins/mod_http_file_share.lua Tue Jan 26 14:53:24 2021 +0100 @@ -14,6 +14,7 @@ local dm = require "core.storagemanager".olddm; local jwt = require "util.jwt"; local errors = require "util.error"; +local dataform = require "util.dataforms".new; local namespace = "urn:xmpp:http:upload:0"; @@ -27,6 +28,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 access = module:get_option_set(module.name .. "_access", {}); @@ -34,9 +36,16 @@ module:depends("http"); end +module:add_extension(dataform { + { name = "FORM_TYPE", type = "hidden", value = namespace }, + { name = "max-file-size", type = "text-single" }, +}:form({ ["max-file-size"] = tostring(file_size_limit) }, "result")); + local upload_errors = errors.init(module.name, namespace, { access = { "auth"; "forbidden" }; filename = { "modify"; "bad-request", "Invalid filename" }; + filesize = { "modify"; "not-acceptable"; "File too large"; + st.stanza("file-too-large", {xmlns = namespace}):tag("max-size"):text(tostring(file_size_limit)); }; }); function may_upload(uploader, filename, filesize, filetype) -- > boolean, error @@ -50,6 +59,10 @@ return false, upload_errors.new("filename"); end + if filesize > file_size_limit then + return false, upload_errors.new("filesize"); + end + return true; end
--- a/spec/scansion/http_upload.scs Tue Jan 26 14:52:37 2021 +0100 +++ b/spec/scansion/http_upload.scs Tue Jan 26 14:53:24 2021 +0100 @@ -22,6 +22,22 @@ </iq> Romeo sends: + <iq to='upload.localhost' type='get' id='46ca64f3-518e-42bd-8e2f-4ab2f6d2224f' xml:lang='en'> + <request content-type='text/plain' filename='toolarge.dat' xmlns='urn:xmpp:http:upload:0' size='10000000000'/> + </iq> + +Romeo receives: + <iq id='46ca64f3-518e-42bd-8e2f-4ab2f6d2224f' from='upload.localhost' type='error'> + <error type='modify'> + <not-acceptable xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/> + <text xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'>File too large</text> + <file-too-large xmlns='urn:xmpp:http:upload:0'> + <max-file-size>10000000</max-file-size> + </file-too-large> + </error> + </iq> + +Romeo sends: <iq to='upload.localhost' type='get' id='ac56d83f-a627-4732-8399-60492d1210b6' xml:lang='en'> <request content-type='text/plain' filename='invalid/filename.dat' xmlns='urn:xmpp:http:upload:0' size='1000'/> </iq>