Annotate

mod_auto_answer_disco_info/mod_auto_answer_disco_info.lua @ 5698:17ea26cf7259

mod_storage_s3: Use '@' as placeholder for empty (host) store slots Used when the server stores things for itself.
author Kim Alvefur <zash@zash.se>
date Sat, 14 Oct 2023 22:49:57 +0200
parent 4585:05c74210c007
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2900
0286ccacec7c mod_auto_answer_disco_info: New module answering disco#info queries on the behalf of the recipient
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
1 module:depends("cache_c2s_caps");
0286ccacec7c mod_auto_answer_disco_info: New module answering disco#info queries on the behalf of the recipient
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
2
0286ccacec7c mod_auto_answer_disco_info: New module answering disco#info queries on the behalf of the recipient
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
3 local st = require "util.stanza";
0286ccacec7c mod_auto_answer_disco_info: New module answering disco#info queries on the behalf of the recipient
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
4
3268
4cdd1ddae72c mod_auto_answer_disco_info: Simplify iq handling by hooking on the full payload tag instead of iq/full.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3106
diff changeset
5 local function disco_handler(event)
3081
e0ef90e96931 mod_auto_answer_disco_info: Switch to origin.log to provide better debug to admins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 2912
diff changeset
6 local stanza, origin = event.stanza, event.origin;
3268
4cdd1ddae72c mod_auto_answer_disco_info: Simplify iq handling by hooking on the full payload tag instead of iq/full.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3106
diff changeset
7 local query = stanza.tags[1];
2900
0286ccacec7c mod_auto_answer_disco_info: New module answering disco#info queries on the behalf of the recipient
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
8 local to = stanza.attr.to;
0286ccacec7c mod_auto_answer_disco_info: New module answering disco#info queries on the behalf of the recipient
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
9 local node = query.attr.node;
0286ccacec7c mod_auto_answer_disco_info: New module answering disco#info queries on the behalf of the recipient
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
10
2903
01692f0052e8 mod_cache_c2s_caps: Use prosody.full_sessions instead of _G.full_sessions (thanks luacheck)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 2902
diff changeset
11 local target_session = prosody.full_sessions[to];
2911
43adc18ff9f3 mod_auto_answer_disco_info: Don’t answer if the target session isn’t online
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 2903
diff changeset
12 if target_session == nil then
43adc18ff9f3 mod_auto_answer_disco_info: Don’t answer if the target session isn’t online
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 2903
diff changeset
13 return;
43adc18ff9f3 mod_auto_answer_disco_info: Don’t answer if the target session isn’t online
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 2903
diff changeset
14 end
43adc18ff9f3 mod_auto_answer_disco_info: Don’t answer if the target session isn’t online
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 2903
diff changeset
15
2900
0286ccacec7c mod_auto_answer_disco_info: New module answering disco#info queries on the behalf of the recipient
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
16 local disco_info = target_session.caps_cache;
0286ccacec7c mod_auto_answer_disco_info: New module answering disco#info queries on the behalf of the recipient
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
17 if disco_info ~= nil and (node == nil or node == disco_info.attr.node) then
0286ccacec7c mod_auto_answer_disco_info: New module answering disco#info queries on the behalf of the recipient
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
18 local iq = st.reply(stanza);
0286ccacec7c mod_auto_answer_disco_info: New module answering disco#info queries on the behalf of the recipient
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
19 iq:add_child(st.clone(disco_info));
3106
1fe7da46e915 mod_auto_answer_disco_info: Don’t traceback on iqs coming from mod_muc.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3081
diff changeset
20 local log = origin.log or module._log;
1fe7da46e915 mod_auto_answer_disco_info: Don’t traceback on iqs coming from mod_muc.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 3081
diff changeset
21 log("debug", "Answering disco#info on the behalf of %s", to);
2900
0286ccacec7c mod_auto_answer_disco_info: New module answering disco#info queries on the behalf of the recipient
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
22 module:send(iq);
0286ccacec7c mod_auto_answer_disco_info: New module answering disco#info queries on the behalf of the recipient
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
23 return true;
0286ccacec7c mod_auto_answer_disco_info: New module answering disco#info queries on the behalf of the recipient
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
24 end
0286ccacec7c mod_auto_answer_disco_info: New module answering disco#info queries on the behalf of the recipient
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
25 end
0286ccacec7c mod_auto_answer_disco_info: New module answering disco#info queries on the behalf of the recipient
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
26
4585
05c74210c007 mod_auto_answer_disco_info: Fix to use event that is fired
Kim Alvefur <zash@zash.se>
parents: 3268
diff changeset
27 module:hook("iq/full", function(event)
05c74210c007 mod_auto_answer_disco_info: Fix to use event that is fired
Kim Alvefur <zash@zash.se>
parents: 3268
diff changeset
28 local stanza = event.stanza;
05c74210c007 mod_auto_answer_disco_info: Fix to use event that is fired
Kim Alvefur <zash@zash.se>
parents: 3268
diff changeset
29 if stanza.attr.type == "get" then
05c74210c007 mod_auto_answer_disco_info: Fix to use event that is fired
Kim Alvefur <zash@zash.se>
parents: 3268
diff changeset
30 if stanza:get_child("query", "http://jabber.org/protocol/disco#info") then
05c74210c007 mod_auto_answer_disco_info: Fix to use event that is fired
Kim Alvefur <zash@zash.se>
parents: 3268
diff changeset
31 return disco_handler(event);
05c74210c007 mod_auto_answer_disco_info: Fix to use event that is fired
Kim Alvefur <zash@zash.se>
parents: 3268
diff changeset
32 end
05c74210c007 mod_auto_answer_disco_info: Fix to use event that is fired
Kim Alvefur <zash@zash.se>
parents: 3268
diff changeset
33 end
05c74210c007 mod_auto_answer_disco_info: Fix to use event that is fired
Kim Alvefur <zash@zash.se>
parents: 3268
diff changeset
34 end, 1);