Software /
code /
prosody-modules
Annotate
mod_bob/mod_bob.lua @ 6110: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 (3 months ago) |
parent | 5163:41fbed2de482 |
rev | line source |
---|---|
3342
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
1 module:depends("cache_c2s_caps"); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
2 |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
3 local st = require "util.stanza"; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
4 local encodings = require "util.encodings"; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
5 local b64_encode = encodings.base64.encode; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
6 local b64_decode = encodings.base64.decode; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
7 local sha1 = require"util.hashes".sha1; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
8 |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
9 -- TODO: Move that to storage. |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
10 local cache = {}; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
11 -- TODO: use util.cache for this. |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
12 local in_flight = {}; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
13 |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
14 local function check_cid(src) |
3343
2e65160187a4
mod_bob: Simplify check_cid using string.match. (thanks Zash!)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3342
diff
changeset
|
15 return src:match("^cid:(%w+%+%w+@bob%.xmpp%.org)$"); |
3342
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
16 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
17 |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
18 local function handle_data_carrier(tag) |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
19 if tag.name ~= "data" or tag.attr.xmlns ~= "urn:xmpp:bob" then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
20 return tag; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
21 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
22 local cid = tag.attr.cid; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
23 local media_type = tag.attr.type; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
24 local max_age = tag.attr['max-age']; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
25 local b64_content = tag:get_text(); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
26 local content = b64_decode(b64_content); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
27 local hash = sha1(content, true); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
28 if cid ~= "sha1+"..hash.."@bob.xmpp.org" then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
29 module:log("debug", "Invalid BoB cid, %s ~= %s", cid, "sha1+"..hash.."@bob.xmpp.org"); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
30 return nil; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
31 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
32 cache[cid] = { media_type = media_type, max_age = max_age, content = content }; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
33 if in_flight[cid] then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
34 local iq = st.iq({ type = "result", id = "fixme" }); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
35 iq:add_direct_child(tag); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
36 for jid, data in pairs(in_flight[cid]) do |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
37 iq.attr.from = data.from; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
38 iq.attr.to = jid; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
39 iq.attr.id = data.id; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
40 module:send(iq); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
41 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
42 in_flight[cid] = nil; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
43 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
44 return nil; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
45 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
46 |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
47 local current_id = 0; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
48 local function send_iq(room_jid, jid, cid, log) |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
49 local iq = st.iq({ type = "get", from = room_jid, to = jid, id = "bob-"..current_id }) |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
50 :tag("data", { xmlns = "urn:xmpp:bob", cid = cid }); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
51 log("debug", "found BoB image in XHTML-IM, asking %s for cid %s", jid, cid); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
52 module:send(iq); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
53 in_flight[cid] = {}; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
54 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
55 |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
56 local function find_images(tag, jid, room_jid, log) |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
57 if tag.name == "img" and tag.attr.xmlns == "http://www.w3.org/1999/xhtml" then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
58 local src = tag.attr.src; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
59 local cid = check_cid(src); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
60 if not cid then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
61 return; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
62 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
63 if cache[cid] then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
64 log("debug", "cid %s already found in cache", cid); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
65 return; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
66 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
67 if in_flight[cid] then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
68 log("debug", "cid %s already queried", cid); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
69 return; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
70 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
71 send_iq(room_jid, jid, cid, log); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
72 return; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
73 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
74 for child in tag:childtags(nil, "http://www.w3.org/1999/xhtml") do |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
75 find_images(child, jid, room_jid, log); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
76 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
77 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
78 |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
79 local function message_handler(event) |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
80 local stanza, origin = event.stanza, event.origin; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
81 local jid = stanza.attr.from; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
82 local room_jid = stanza.attr.to; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
83 local log = origin.log or module._log; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
84 |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
85 -- Remove and cache all <data/> elements embedded here. |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
86 stanza:maptags(handle_data_carrier); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
87 |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
88 -- Find and query all of the cids not already cached. |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
89 local tag = stanza:get_child("html", "http://jabber.org/protocol/xhtml-im"); |
3368
76fc915647ab
mod_bob: Don’t try to access XHTML-IM when it isn’t present.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3343
diff
changeset
|
90 if not tag then |
76fc915647ab
mod_bob: Don’t try to access XHTML-IM when it isn’t present.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3343
diff
changeset
|
91 return; |
76fc915647ab
mod_bob: Don’t try to access XHTML-IM when it isn’t present.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3343
diff
changeset
|
92 end |
3342
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
93 for body in tag:childtags("body", "http://www.w3.org/1999/xhtml") do |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
94 find_images(body, jid, room_jid, log); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
95 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
96 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
97 |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
98 local function handle_data_get(stanza, cid, log) |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
99 local data = cache[cid]; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
100 if not data then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
101 log("debug", "BoB requested for data not in cache (cid %s), falling through.", cid); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
102 if in_flight[cid] then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
103 log("debug", "But an iq has already been sent, let’s wait…"); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
104 in_flight[cid][stanza.attr.from] = { id = stanza.attr.id, from = stanza.attr.to }; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
105 return true; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
106 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
107 return nil; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
108 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
109 |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
110 local iq = st.reply(stanza); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
111 iq:text_tag("data", b64_encode(data.content), { |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
112 xmlns = "urn:xmpp:bob", |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
113 cid = cid, |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
114 type = data.media_type, |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
115 ['max-age'] = data.max_age, |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
116 }); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
117 log("debug", "Answering BoB request for cid %s on the behalf of %s", cid, stanza.attr.to); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
118 module:send(iq); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
119 return true; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
120 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
121 |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
122 local function iq_handler(event) |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
123 local stanza, origin = event.stanza, event.origin; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
124 local tag = stanza.tags[1]; |
5163
41fbed2de482
mod_bob: Fix traceback when iq has no payload (thanks meaz)
Matthew Wild <mwild1@gmail.com>
parents:
3368
diff
changeset
|
125 if not tag or tag.name ~= "data" or tag.attr.xmlns ~= "urn:xmpp:bob" then |
3342
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
126 return nil; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
127 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
128 local log = origin.log or module._log; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
129 local cid = tag.attr.cid; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
130 if not cid then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
131 log("debug", "BoB iq doesn’t contain a cid attribute."); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
132 return; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
133 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
134 if stanza.attr.type == "get" then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
135 return handle_data_get(stanza, cid, log); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
136 elseif stanza.attr.type == "result" then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
137 handle_data_carrier(tag); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
138 return true; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
139 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
140 -- TODO: also handle error iqs. |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
141 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
142 |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
143 module:hook("message/bare", message_handler, 1); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
144 module:hook("iq/full", iq_handler, 1); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
145 module:hook("iq/bare", iq_handler, 1); |