Software /
code /
prosody-modules
Annotate
mod_auto_answer_disco_info/mod_auto_answer_disco_info.lua @ 4241:5e8b54deeb30
mod_post_msg: Advertise mod_rest, the spiritual successor
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 12 Nov 2020 20:36:53 +0100 |
parent | 3268:4cdd1ddae72c |
child | 4585:05c74210c007 |
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 |
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
|
27 module:hook("iq-get/full/http://jabber.org/protocol/disco#info:query", disco_handler, 1); |