Software /
code /
prosody-modules
Annotate
mod_http_upload_external/mod_http_upload_external.lua @ 5458:813fe4f76286
mod_http_oauth2: Do minimal validation of private-use URI schemes
Per draft-ietf-oauth-v2-1-08#section-2.3.1
> At a minimum, any private-use URI scheme that doesn't contain a period
> character (.) SHOULD be rejected.
Since this would rule out the OOB URI, which is useful for CLI tools and
such without a built-in http server, it is explicitly allowed.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Tue, 16 May 2023 22:18:12 +0200 |
parent | 4509:16995e7624f0 |
rev | line source |
---|---|
2332
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
1 -- mod_http_upload_external |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
2 -- |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
3 -- Copyright (C) 2015-2016 Kim Alvefur |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
4 -- |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
5 -- This file is MIT/X11 licensed. |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
6 -- |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
7 |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
8 -- imports |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
9 local st = require"util.stanza"; |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 local uuid = require"util.uuid".generate; |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
11 local http = require "util.http"; |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
12 local dataform = require "util.dataforms".new; |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
13 local HMAC = require "util.hashes".hmac_sha256; |
4509
16995e7624f0
mod_http_upload_external: add access control option
Nicolas Cedilnik <nicoco@nicoco.fr>
parents:
3167
diff
changeset
|
14 local jid = require "util.jid"; |
2332
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
15 |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
16 -- config |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
17 local file_size_limit = module:get_option_number(module.name .. "_file_size_limit", 100 * 1024 * 1024); -- 100 MB |
2978
ac99a04231b1
mod_http_upload_external: Add newer 'v2' protocol (and share_v2.php) which supports content-type preservation
Matthew Wild <mwild1@gmail.com>
parents:
2939
diff
changeset
|
18 local base_url = assert(module:get_option_string(module.name .. "_base_url"), |
ac99a04231b1
mod_http_upload_external: Add newer 'v2' protocol (and share_v2.php) which supports content-type preservation
Matthew Wild <mwild1@gmail.com>
parents:
2939
diff
changeset
|
19 module.name .. "_base_url is a required option"); |
ac99a04231b1
mod_http_upload_external: Add newer 'v2' protocol (and share_v2.php) which supports content-type preservation
Matthew Wild <mwild1@gmail.com>
parents:
2939
diff
changeset
|
20 local secret = assert(module:get_option_string(module.name .. "_secret"), |
ac99a04231b1
mod_http_upload_external: Add newer 'v2' protocol (and share_v2.php) which supports content-type preservation
Matthew Wild <mwild1@gmail.com>
parents:
2939
diff
changeset
|
21 module.name .. "_secret is a required option"); |
4509
16995e7624f0
mod_http_upload_external: add access control option
Nicolas Cedilnik <nicoco@nicoco.fr>
parents:
3167
diff
changeset
|
22 local access = module:get_option_set(module.name .. "_access", {}); |
2978
ac99a04231b1
mod_http_upload_external: Add newer 'v2' protocol (and share_v2.php) which supports content-type preservation
Matthew Wild <mwild1@gmail.com>
parents:
2939
diff
changeset
|
23 |
ac99a04231b1
mod_http_upload_external: Add newer 'v2' protocol (and share_v2.php) which supports content-type preservation
Matthew Wild <mwild1@gmail.com>
parents:
2939
diff
changeset
|
24 local token_protocol = module:get_option_string(module.name .. "_protocol", "v1"); |
2332
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
25 |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
26 -- depends |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
27 module:depends("disco"); |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
28 |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
29 -- namespace |
2877
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
30 local legacy_namespace = "urn:xmpp:http:upload"; |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
31 local namespace = "urn:xmpp:http:upload:0"; |
2332
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
32 |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
33 -- identity and feature advertising |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
34 module:add_identity("store", "file", module:get_option_string("name", "HTTP File Upload")) |
2877
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
35 module:add_feature(namespace); |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
36 module:add_feature(legacy_namespace); |
2332
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
37 |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 module:add_extension(dataform { |
2877
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
39 { name = "FORM_TYPE", type = "hidden", value = namespace }, |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
40 { name = "max-file-size", type = "text-single" }, |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
41 }:form({ ["max-file-size"] = tostring(file_size_limit) }, "result")); |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
42 |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
43 module:add_extension(dataform { |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
44 { name = "FORM_TYPE", type = "hidden", value = legacy_namespace }, |
2332
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
45 { name = "max-file-size", type = "text-single" }, |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
46 }:form({ ["max-file-size"] = tostring(file_size_limit) }, "result")); |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
47 |
2978
ac99a04231b1
mod_http_upload_external: Add newer 'v2' protocol (and share_v2.php) which supports content-type preservation
Matthew Wild <mwild1@gmail.com>
parents:
2939
diff
changeset
|
48 local function magic_crypto_dust(random, filename, filesize, filetype) |
ac99a04231b1
mod_http_upload_external: Add newer 'v2' protocol (and share_v2.php) which supports content-type preservation
Matthew Wild <mwild1@gmail.com>
parents:
2939
diff
changeset
|
49 local param, message; |
ac99a04231b1
mod_http_upload_external: Add newer 'v2' protocol (and share_v2.php) which supports content-type preservation
Matthew Wild <mwild1@gmail.com>
parents:
2939
diff
changeset
|
50 if token_protocol == "v1" then |
ac99a04231b1
mod_http_upload_external: Add newer 'v2' protocol (and share_v2.php) which supports content-type preservation
Matthew Wild <mwild1@gmail.com>
parents:
2939
diff
changeset
|
51 param, message = "v", string.format("%s/%s %d", random, filename, filesize); |
ac99a04231b1
mod_http_upload_external: Add newer 'v2' protocol (and share_v2.php) which supports content-type preservation
Matthew Wild <mwild1@gmail.com>
parents:
2939
diff
changeset
|
52 else |
ac99a04231b1
mod_http_upload_external: Add newer 'v2' protocol (and share_v2.php) which supports content-type preservation
Matthew Wild <mwild1@gmail.com>
parents:
2939
diff
changeset
|
53 param, message = "v2", string.format("%s/%s\0%d\0%s", random, filename, filesize, filetype); |
ac99a04231b1
mod_http_upload_external: Add newer 'v2' protocol (and share_v2.php) which supports content-type preservation
Matthew Wild <mwild1@gmail.com>
parents:
2939
diff
changeset
|
54 end |
2332
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
55 local digest = HMAC(secret, message, true); |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
56 random, filename = http.urlencode(random), http.urlencode(filename); |
2978
ac99a04231b1
mod_http_upload_external: Add newer 'v2' protocol (and share_v2.php) which supports content-type preservation
Matthew Wild <mwild1@gmail.com>
parents:
2939
diff
changeset
|
57 return base_url .. random .. "/" .. filename, "?"..param.."=" .. digest; |
2332
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
58 end |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
59 |
2978
ac99a04231b1
mod_http_upload_external: Add newer 'v2' protocol (and share_v2.php) which supports content-type preservation
Matthew Wild <mwild1@gmail.com>
parents:
2939
diff
changeset
|
60 local function handle_request(origin, stanza, xmlns, filename, filesize, filetype) |
4509
16995e7624f0
mod_http_upload_external: add access control option
Nicolas Cedilnik <nicoco@nicoco.fr>
parents:
3167
diff
changeset
|
61 local user_bare = jid.bare(stanza.attr.from); |
16995e7624f0
mod_http_upload_external: add access control option
Nicolas Cedilnik <nicoco@nicoco.fr>
parents:
3167
diff
changeset
|
62 local user_host = jid.host(user_bare); |
16995e7624f0
mod_http_upload_external: add access control option
Nicolas Cedilnik <nicoco@nicoco.fr>
parents:
3167
diff
changeset
|
63 |
16995e7624f0
mod_http_upload_external: add access control option
Nicolas Cedilnik <nicoco@nicoco.fr>
parents:
3167
diff
changeset
|
64 -- local clients or whitelisted jids/hosts only |
16995e7624f0
mod_http_upload_external: add access control option
Nicolas Cedilnik <nicoco@nicoco.fr>
parents:
3167
diff
changeset
|
65 if not (origin.type == "c2s" or access:contains(user_bare) or access:contains(user_host)) then |
2332
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
66 module:log("debug", "Request for upload slot from a %s", origin.type); |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
67 origin.send(st.error_reply(stanza, "cancel", "not-authorized")); |
2877
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
68 return nil, nil; |
2332
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
69 end |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
70 -- validate |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
71 if not filename or filename:find("/") then |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
72 module:log("debug", "Filename %q not allowed", filename or ""); |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
73 origin.send(st.error_reply(stanza, "modify", "bad-request", "Invalid filename")); |
2877
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
74 return nil, nil; |
2332
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
75 end |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
76 if not filesize then |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
77 module:log("debug", "Missing file size"); |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
78 origin.send(st.error_reply(stanza, "modify", "bad-request", "Missing or invalid file size")); |
2877
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
79 return nil, nil; |
2332
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
80 elseif filesize > file_size_limit then |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
81 module:log("debug", "File too large (%d > %d)", filesize, file_size_limit); |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
82 origin.send(st.error_reply(stanza, "modify", "not-acceptable", "File too large", |
2877
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
83 st.stanza("file-too-large", {xmlns=xmlns}) |
2332
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
84 :tag("max-size"):text(tostring(file_size_limit)))); |
2877
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
85 return nil, nil; |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
86 end |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
87 local random = uuid(); |
2978
ac99a04231b1
mod_http_upload_external: Add newer 'v2' protocol (and share_v2.php) which supports content-type preservation
Matthew Wild <mwild1@gmail.com>
parents:
2939
diff
changeset
|
88 local get_url, verify = magic_crypto_dust(random, filename, filesize, filetype); |
2877
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
89 local put_url = get_url .. verify; |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
90 |
3167
bedd3f4a8f90
mod_http_upload_external: Reduce slot request log level from info to debug for privacy improvement
Matthew Wild <mwild1@gmail.com>
parents:
3166
diff
changeset
|
91 module:log("debug", "Handing out upload slot %s to %s@%s [%d %s]", get_url, origin.username, origin.host, filesize, filetype); |
2877
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
92 |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
93 return get_url, put_url; |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
94 end |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
95 |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
96 -- hooks |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
97 module:hook("iq/host/"..legacy_namespace..":request", function (event) |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
98 local stanza, origin = event.stanza, event.origin; |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
99 local request = stanza.tags[1]; |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
100 local filename = request:get_child_text("filename"); |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
101 local filesize = tonumber(request:get_child_text("size")); |
3166
44a187c82b53
mod_http_upload_external: Fix to read content-type from correct place in stanza
Matthew Wild <mwild1@gmail.com>
parents:
3165
diff
changeset
|
102 local filetype = request:get_child_text("content-type") or "application/octet-stream"; |
2877
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
103 |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
104 local get_url, put_url = handle_request( |
2978
ac99a04231b1
mod_http_upload_external: Add newer 'v2' protocol (and share_v2.php) which supports content-type preservation
Matthew Wild <mwild1@gmail.com>
parents:
2939
diff
changeset
|
105 origin, stanza, legacy_namespace, filename, filesize, filetype); |
2877
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
106 |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
107 if not get_url then |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
108 -- error was already sent |
2332
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
109 return true; |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
110 end |
2877
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
111 |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
112 local reply = st.reply(stanza) |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
113 :tag("slot", { xmlns = legacy_namespace }) |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
114 :tag("get"):text(get_url):up() |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
115 :tag("put"):text(put_url):up() |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
116 :up(); |
2332
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
117 origin.send(reply); |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
118 return true; |
c2cf5b40b66d
mod_http_upload_external: Variant of mod_http_upload that delegates HTTP handling to other server using signed URLs
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
119 end); |
2877
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
120 |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
121 module:hook("iq/host/"..namespace..":request", function (event) |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
122 local stanza, origin = event.stanza, event.origin; |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
123 local request = stanza.tags[1]; |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
124 local filename = request.attr.filename; |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
125 local filesize = tonumber(request.attr.size); |
2978
ac99a04231b1
mod_http_upload_external: Add newer 'v2' protocol (and share_v2.php) which supports content-type preservation
Matthew Wild <mwild1@gmail.com>
parents:
2939
diff
changeset
|
126 local filetype = request.attr["content-type"] or "application/octet-stream"; |
ac99a04231b1
mod_http_upload_external: Add newer 'v2' protocol (and share_v2.php) which supports content-type preservation
Matthew Wild <mwild1@gmail.com>
parents:
2939
diff
changeset
|
127 |
2877
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
128 local get_url, put_url = handle_request( |
2978
ac99a04231b1
mod_http_upload_external: Add newer 'v2' protocol (and share_v2.php) which supports content-type preservation
Matthew Wild <mwild1@gmail.com>
parents:
2939
diff
changeset
|
129 origin, stanza, namespace, filename, filesize, filetype); |
2877
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
130 |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
131 if not get_url then |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
132 -- error was already sent |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
133 return true; |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
134 end |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
135 |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
136 local reply = st.reply(stanza) |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
137 :tag("slot", { xmlns = namespace}) |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
138 :tag("get", { url = get_url }):up() |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
139 :tag("put", { url = put_url }):up() |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
140 :up(); |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
141 origin.send(reply); |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
142 return true; |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
143 end); |