annotate mod_http_upload_external/mod_http_upload_external.lua @ 6082:1a6cd0bbb7ab

mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version. diff --git a/mod_compliance_2023/README.md b/mod_compliance_2023/README.md new file mode 100644 --- /dev/null +++ b/mod_compliance_2023/README.md @@ -0,0 +1,22 @@ +--- +summary: XMPP Compliance Suites 2023 self-test +labels: +- Stage-Beta +rockspec: + dependencies: + - mod_cloud_notify + +... + +Compare the list of enabled modules with +[XEP-0479: XMPP Compliance Suites 2023] and produce basic report to the +Prosody log file. + +If installed with the Prosody plugin installer then all modules needed for a green checkmark should be included. (With prosody 0.12 only [mod_cloud_notify] is not included with prosody and we need the community module) + +# Compatibility + + Prosody-Version Status + --------------- ---------------------- + trunk Works as of 2024-12-21 + 0.12 Works diff --git a/mod_compliance_2023/mod_compliance_2023.lua b/mod_compliance_2023/mod_compliance_2023.lua new file mode 100644 --- /dev/null +++ b/mod_compliance_2023/mod_compliance_2023.lua @@ -0,0 +1,79 @@ +-- Copyright (c) 2021 Kim Alvefur +-- +-- This module is MIT licensed. + +local hostmanager = require "core.hostmanager"; + +local array = require "util.array"; +local set = require "util.set"; + +local modules_enabled = module:get_option_inherited_set("modules_enabled"); + +for host in pairs(hostmanager.get_children(module.host)) do + local component = module:context(host):get_option_string("component_module"); + if component then + modules_enabled:add(component); + modules_enabled:include(module:context(host):get_option_set("modules_enabled", {})); + end +end + +local function check(suggested, alternate, ...) + if set.intersection(modules_enabled, set.new({suggested; alternate; ...})):empty() then return suggested; end + return false; +end + +local compliance = { + array {"Server"; check("tls"); check("disco")}; + + array {"Advanced Server"; check("pep", "pep_simple")}; + + array {"Web"; check("bosh"); check("websocket")}; + + -- No Server requirements for Advanced Web + + array {"IM"; check("vcard_legacy", "vcard"); check("carbons"); check("http_file_share", "http_upload")}; + + array { + "Advanced IM"; + check("vcard_legacy", "vcard"); + check("blocklist"); + check("muc"); + check("private"); + check("smacks"); + check("mam"); + check("bookmarks"); + }; + + array {"Mobile"; check("smacks"); check("csi_simple", "csi_battery_saver")}; + + array {"Advanced Mobile"; check("cloud_notify")}; + + array {"A/V Calling"; check("turn_external", "external_services", "turncredentials", "extdisco")}; + +}; + +function check_compliance() + local compliant = true; + for _, suite in ipairs(compliance) do + local section = suite:pop(1); + if module:get_option_boolean("compliance_" .. section:lower():gsub("%A", "_"), true) then + local missing = set.new(suite:filter(function(m) return type(m) == "string" end):map(function(m) return "mod_" .. m end)); + if suite[1] then + if compliant then + compliant = false; + module:log("warn", "Missing some modules for XMPP Compliance 2023"); + end + module:log("info", "%s Compliance: %s", section, missing); + end + end + end + + if compliant then module:log("info", "XMPP Compliance 2023: Compliant ✔️"); end +end + +if prosody.start_time then + check_compliance() +else + module:hook_global("server-started", check_compliance); +end +
author Menel <menel@snikket.de>
date Sun, 22 Dec 2024 16:06:28 +0100
parents 16995e7624f0
children
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;
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);