mod_auto_answer_disco_info/mod_auto_answer_disco_info.lua
author Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
Wed, 07 Mar 2018 20:17:56 +0100
changeset 2916 6e5bd5d8a5e2
parent 2915 43adc18ff9f3
child 3085 e0ef90e96931
permissions -rw-r--r--
mod_auto_answer_disco_info: Improve the debug message to include the recipient
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2904
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)
2906
037ad1cd0d31 mod_auto_answer_disco_info: Remove unused variable (thanks luacheck)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 2904
diff changeset
     6
	local stanza = event.stanza;
2904
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
2907
01692f0052e8 mod_cache_c2s_caps: Use prosody.full_sessions instead of _G.full_sessions (thanks luacheck)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 2906
diff changeset
    17
	local target_session = prosody.full_sessions[to];
2915
43adc18ff9f3 mod_auto_answer_disco_info: Don’t answer if the target session isn’t online
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 2907
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: 2907
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: 2907
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: 2907
diff changeset
    21
2904
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));
2916
6e5bd5d8a5e2 mod_auto_answer_disco_info: Improve the debug message to include the recipient
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 2915
diff changeset
    26
		module:log("debug", "Answering disco#info on the behalf of %s", to);
2904
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);