Annotate

mod_auto_answer_disco_info/mod_auto_answer_disco_info.lua @ 2922:9f60905406ba

mod_register_web: Include IP address in pre-registration check event to allow other modules a chance to act on it
author Kim Alvefur <zash@zash.se>
date Sat, 10 Mar 2018 02:38:42 +0100
parent 2912:6e5bd5d8a5e2
child 3081:e0ef90e96931
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
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
5 local function iq_stanza_handler(event)
2902
037ad1cd0d31 mod_auto_answer_disco_info: Remove unused variable (thanks luacheck)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 2900
diff changeset
6 local stanza = event.stanza;
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
7 local type = stanza.attr.type;
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
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 query = stanza:get_child("query", "http://jabber.org/protocol/disco#info");
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 if type ~= "get" or query == nil 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
11 return;
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
12 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
13
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
14 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
15 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
16
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
17 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
18 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
19 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
20 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
21
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 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
23 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
24 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
25 iq:add_child(st.clone(disco_info));
2912
6e5bd5d8a5e2 mod_auto_answer_disco_info: Improve the debug message to include the recipient
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 2911
diff changeset
26 module: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
27 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
28 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
29 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
30 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
31
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
32 module:hook("iq/full", iq_stanza_handler, 1);