Mercurial > prosody-modules
annotate mod_http_upload_external/mod_http_upload_external.lua @ 4049:78f1de5301fc
mod_adhoc_dataforms_demo: Fix duplicate field prevention
It's supposed to only include each type of form field once per form at
most but it didn't note which fields it had added already. No idea what
the probability was anyways, probably pretty low.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Tue, 23 Jun 2020 19:40:55 +0200 |
parents | bedd3f4a8f90 |
children | 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; |
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
|
14 |
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 -- 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
|
16 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
|
17 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
|
18 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
|
19 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
|
20 module.name .. "_secret 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
|
21 |
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
|
22 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
|
23 |
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
|
24 -- 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
|
25 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
|
26 |
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 -- namespace |
2877
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
28 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
|
29 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
|
30 |
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
|
31 -- 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
|
32 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
|
33 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
|
34 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
|
35 |
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
|
36 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
|
37 { 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
|
38 { 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
|
39 }: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
|
40 |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
41 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
|
42 { 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
|
43 { 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
|
44 }: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
|
45 |
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
|
46 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
|
47 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
|
48 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
|
49 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
|
50 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
|
51 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
|
52 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
|
53 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
|
54 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
|
55 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
|
56 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
|
57 |
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
|
58 local function handle_request(origin, stanza, xmlns, filename, filesize, filetype) |
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
|
59 -- local clients only |
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
|
60 if origin.type ~= "c2s" 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
|
61 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
|
62 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
|
63 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
|
64 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
|
65 -- 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
|
66 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
|
67 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
|
68 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
|
69 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
|
70 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
|
71 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
|
72 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
|
73 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
|
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 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
|
76 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
|
77 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
|
78 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
|
79 :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
|
80 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
|
81 end |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
82 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
|
83 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
|
84 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
|
85 |
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
|
86 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
|
87 |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
88 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
|
89 end |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
90 |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
91 -- hooks |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
92 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
|
93 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
|
94 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
|
95 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
|
96 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
|
97 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
|
98 |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
99 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
|
100 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
|
101 |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
102 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
|
103 -- 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
|
104 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
|
105 end |
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 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
|
108 :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
|
109 :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
|
110 :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
|
111 :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
|
112 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
|
113 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
|
114 end); |
2877
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
115 |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
116 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
|
117 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
|
118 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
|
119 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
|
120 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
|
121 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
|
122 |
2877
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
123 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
|
124 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
|
125 |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
126 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
|
127 -- 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
|
128 return true; |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
129 end |
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 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
|
132 :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
|
133 :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
|
134 :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
|
135 :up(); |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
136 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
|
137 return true; |
d6badf56ab5f
mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents:
2332
diff
changeset
|
138 end); |