Mercurial > prosody-modules
annotate mod_bob/mod_bob.lua @ 5193:2bb29ece216b
mod_http_oauth2: Implement stateless dynamic client registration
Replaces previous explicit registration that required either the
additional module mod_adhoc_oauth2_client or manually editing the
database. That method was enough to have something to test with, but
would not probably not scale easily.
Dynamic client registration allows creating clients on the fly, which
may be even easier in theory.
In order to not allow basically unauthenticated writes to the database,
we implement a stateless model here.
per_host_key := HMAC(config -> oauth2_registration_key, hostname)
client_id := JWT { client metadata } signed with per_host_key
client_secret := HMAC(per_host_key, client_id)
This should ensure everything we need to know is part of the client_id,
allowing redirects etc to be validated, and the client_secret can be
validated with only the client_id and the per_host_key.
A nonce injected into the client_id JWT should ensure nobody can submit
the same client metadata and retrieve the same client_secret
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 03 Mar 2023 21:14:19 +0100 |
parents | 41fbed2de482 |
children |
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); |