Mercurial > prosody-hg
comparison plugins/mod_disco.lua @ 9223:80dbb60d81e4
mod_disco: Simplify iq handling by hooking on iq-get/ instead of iq/.
| author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
|---|---|
| date | Fri, 24 Aug 2018 20:34:18 +0200 |
| parents | b0093d3b2d04 |
| children | ae2a11066001 |
comparison
equal
deleted
inserted
replaced
| 9222:fe8abac62682 | 9223:80dbb60d81e4 |
|---|---|
| 93 module:hook("item-removed/identity", clear_disco_cache); | 93 module:hook("item-removed/identity", clear_disco_cache); |
| 94 module:hook("item-removed/feature", clear_disco_cache); | 94 module:hook("item-removed/feature", clear_disco_cache); |
| 95 module:hook("item-removed/extension", clear_disco_cache); | 95 module:hook("item-removed/extension", clear_disco_cache); |
| 96 | 96 |
| 97 -- Handle disco requests to the server | 97 -- Handle disco requests to the server |
| 98 module:hook("iq/host/http://jabber.org/protocol/disco#info:query", function(event) | 98 module:hook("iq-get/host/http://jabber.org/protocol/disco#info:query", function(event) |
| 99 local origin, stanza = event.origin, event.stanza; | 99 local origin, stanza = event.origin, event.stanza; |
| 100 if stanza.attr.type ~= "get" then return; end | |
| 101 local node = stanza.tags[1].attr.node; | 100 local node = stanza.tags[1].attr.node; |
| 102 if node and node ~= "" and node ~= "http://prosody.im#"..get_server_caps_hash() then | 101 if node and node ~= "" and node ~= "http://prosody.im#"..get_server_caps_hash() then |
| 103 local reply = st.reply(stanza):tag('query', {xmlns='http://jabber.org/protocol/disco#info', node=node}); | 102 local reply = st.reply(stanza):tag('query', {xmlns='http://jabber.org/protocol/disco#info', node=node}); |
| 104 local node_event = { origin = origin, stanza = stanza, reply = reply, node = node, exists = false}; | 103 local node_event = { origin = origin, stanza = stanza, reply = reply, node = node, exists = false}; |
| 105 local ret = module:fire_event("host-disco-info-node", node_event); | 104 local ret = module:fire_event("host-disco-info-node", node_event); |
| 115 reply_query.attr.node = node; | 114 reply_query.attr.node = node; |
| 116 local reply = st.reply(stanza):add_child(reply_query); | 115 local reply = st.reply(stanza):add_child(reply_query); |
| 117 origin.send(reply); | 116 origin.send(reply); |
| 118 return true; | 117 return true; |
| 119 end); | 118 end); |
| 120 module:hook("iq/host/http://jabber.org/protocol/disco#items:query", function(event) | 119 module:hook("iq-get/host/http://jabber.org/protocol/disco#items:query", function(event) |
| 121 local origin, stanza = event.origin, event.stanza; | 120 local origin, stanza = event.origin, event.stanza; |
| 122 if stanza.attr.type ~= "get" then return; end | |
| 123 local node = stanza.tags[1].attr.node; | 121 local node = stanza.tags[1].attr.node; |
| 124 if node and node ~= "" then | 122 if node and node ~= "" then |
| 125 local reply = st.reply(stanza):tag('query', {xmlns='http://jabber.org/protocol/disco#items', node=node}); | 123 local reply = st.reply(stanza):tag('query', {xmlns='http://jabber.org/protocol/disco#items', node=node}); |
| 126 local node_event = { origin = origin, stanza = stanza, reply = reply, node = node, exists = false}; | 124 local node_event = { origin = origin, stanza = stanza, reply = reply, node = node, exists = false}; |
| 127 local ret = module:fire_event("host-disco-items-node", node_event); | 125 local ret = module:fire_event("host-disco-items-node", node_event); |
| 153 end | 151 end |
| 154 end); | 152 end); |
| 155 | 153 |
| 156 -- Handle disco requests to user accounts | 154 -- Handle disco requests to user accounts |
| 157 if module:get_host_type() ~= "local" then return end -- skip for components | 155 if module:get_host_type() ~= "local" then return end -- skip for components |
| 158 module:hook("iq/bare/http://jabber.org/protocol/disco#info:query", function(event) | 156 module:hook("iq-get/bare/http://jabber.org/protocol/disco#info:query", function(event) |
| 159 local origin, stanza = event.origin, event.stanza; | 157 local origin, stanza = event.origin, event.stanza; |
| 160 if stanza.attr.type ~= "get" then return; end | |
| 161 local node = stanza.tags[1].attr.node; | 158 local node = stanza.tags[1].attr.node; |
| 162 local username = jid_split(stanza.attr.to) or origin.username; | 159 local username = jid_split(stanza.attr.to) or origin.username; |
| 163 if not stanza.attr.to or is_contact_subscribed(username, module.host, jid_bare(stanza.attr.from)) then | 160 if not stanza.attr.to or is_contact_subscribed(username, module.host, jid_bare(stanza.attr.from)) then |
| 164 if node and node ~= "" then | 161 if node and node ~= "" then |
| 165 local reply = st.reply(stanza):tag('query', {xmlns='http://jabber.org/protocol/disco#info', node=node}); | 162 local reply = st.reply(stanza):tag('query', {xmlns='http://jabber.org/protocol/disco#info', node=node}); |
| 180 module:fire_event("account-disco-info", { origin = origin, reply = reply }); | 177 module:fire_event("account-disco-info", { origin = origin, reply = reply }); |
| 181 origin.send(reply); | 178 origin.send(reply); |
| 182 return true; | 179 return true; |
| 183 end | 180 end |
| 184 end); | 181 end); |
| 185 module:hook("iq/bare/http://jabber.org/protocol/disco#items:query", function(event) | 182 module:hook("iq-get/bare/http://jabber.org/protocol/disco#items:query", function(event) |
| 186 local origin, stanza = event.origin, event.stanza; | 183 local origin, stanza = event.origin, event.stanza; |
| 187 if stanza.attr.type ~= "get" then return; end | |
| 188 local node = stanza.tags[1].attr.node; | 184 local node = stanza.tags[1].attr.node; |
| 189 local username = jid_split(stanza.attr.to) or origin.username; | 185 local username = jid_split(stanza.attr.to) or origin.username; |
| 190 if not stanza.attr.to or is_contact_subscribed(username, module.host, jid_bare(stanza.attr.from)) then | 186 if not stanza.attr.to or is_contact_subscribed(username, module.host, jid_bare(stanza.attr.from)) then |
| 191 if node and node ~= "" then | 187 if node and node ~= "" then |
| 192 local reply = st.reply(stanza):tag('query', {xmlns='http://jabber.org/protocol/disco#items', node=node}); | 188 local reply = st.reply(stanza):tag('query', {xmlns='http://jabber.org/protocol/disco#items', node=node}); |
