Annotate

mod_http_upload_external/mod_http_upload_external.lua @ 2877:d6badf56ab5f

mod_http_upload_external: add support for XEP-0363 version 0.3
author Jonas Wielicki <jonas@wielicki.name>
date Sun, 11 Feb 2018 16:11:17 +0100
parent 2332:c2cf5b40b66d
child 2939:280305c043b0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
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 base_url = assert(module:get_option_string(module.name .. "_base_url"), module.name .. "_base_url is a required option");
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
18 local secret = assert(module:get_option_string(module.name .. "_secret"), module.name .. "_secret is a required option");
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
19
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
20 -- 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
21 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
22
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 -- namespace
2877
d6badf56ab5f mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents: 2332
diff changeset
24 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
25 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
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 -- 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
28 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
29 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
30 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
31
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_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
33 { 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
34 { 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
35 }: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
36
d6badf56ab5f mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents: 2332
diff changeset
37 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
38 { 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
39 { 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
40 }: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
41
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
42 local function magic_crypto_dust(random, filename, filesize)
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 local message = string.format("%s/%s %d", random, filename, filesize);
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 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
45 random, filename = http.urlencode(random), http.urlencode(filename);
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 return base_url .. random .. "/" .. filename, "?v=" .. digest;
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 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
48
2877
d6badf56ab5f mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents: 2332
diff changeset
49 local function handle_request(origin, stanza, xmlns, filename, filesize)
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
50 -- 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
51 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
52 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
53 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
54 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
55 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
56 -- 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
57 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
58 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
59 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
60 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
61 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
62 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
63 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
64 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
65 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
66 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
67 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
68 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
69 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
70 :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
71 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
72 end
d6badf56ab5f mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents: 2332
diff changeset
73 local random = uuid();
d6badf56ab5f mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents: 2332
diff changeset
74 local get_url, verify = magic_crypto_dust(random, filename, filesize);
d6badf56ab5f mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents: 2332
diff changeset
75 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
76
d6badf56ab5f mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents: 2332
diff changeset
77 module:log("info", "Handing out upload slot %s to %s@%s", get_url, origin.username, origin.host);
d6badf56ab5f mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents: 2332
diff changeset
78
d6badf56ab5f mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents: 2332
diff changeset
79 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
80 end
d6badf56ab5f mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents: 2332
diff changeset
81
d6badf56ab5f mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents: 2332
diff changeset
82 -- hooks
d6badf56ab5f mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents: 2332
diff changeset
83 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
84 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
85 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
86 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
87 local filesize = tonumber(request:get_child_text("size"));
d6badf56ab5f mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents: 2332
diff changeset
88
d6badf56ab5f mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents: 2332
diff changeset
89 local get_url, put_url = handle_request(
d6badf56ab5f mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents: 2332
diff changeset
90 origin, stanza, legacy_namespace, filename, filesize);
d6badf56ab5f mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents: 2332
diff changeset
91
d6badf56ab5f mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents: 2332
diff changeset
92 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
93 -- 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
94 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
95 end
2877
d6badf56ab5f mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents: 2332
diff changeset
96
d6badf56ab5f mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents: 2332
diff changeset
97 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
98 :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
99 :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
100 :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
101 :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
102 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
103 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
104 end);
2877
d6badf56ab5f mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents: 2332
diff changeset
105
d6badf56ab5f mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents: 2332
diff changeset
106 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
107 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
108 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
109 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
110 local filesize = tonumber(request.attr.size);
d6badf56ab5f mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents: 2332
diff changeset
111 local get_url, put_url = handle_request(
d6badf56ab5f mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents: 2332
diff changeset
112 origin, stanza, legacy_namespace, filename, filesize);
d6badf56ab5f mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents: 2332
diff changeset
113
d6badf56ab5f mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents: 2332
diff changeset
114 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
115 -- 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
116 return true;
d6badf56ab5f mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents: 2332
diff changeset
117 end
d6badf56ab5f mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents: 2332
diff changeset
118
d6badf56ab5f mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents: 2332
diff changeset
119 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
120 :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
121 :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
122 :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
123 :up();
d6badf56ab5f mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents: 2332
diff changeset
124 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
125 return true;
d6badf56ab5f mod_http_upload_external: add support for XEP-0363 version 0.3
Jonas Wielicki <jonas@wielicki.name>
parents: 2332
diff changeset
126 end);