Software /
code /
prosody
Comparison
plugins/mod_disco.lua @ 13408:d7857ef7843a 0.12
mod_disco: Advertise disco#info and #items on bare JIDs to fix #1664
Having to add these in *there* places seems less than ideal.
I would also think that advertising disco#info is a bit redundant, since
it is a requirement for everything in XMPP and if it was missing you
would get an error back.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 17 Dec 2023 18:55:14 +0100 |
parent | 12388:50fcd3879482 |
child | 13409:95d8875c90dc |
comparison
equal
deleted
inserted
replaced
13378:db30ffbf2090 | 13408:d7857ef7843a |
---|---|
170 local username = jid_split(stanza.attr.to) or origin.username; | 170 local username = jid_split(stanza.attr.to) or origin.username; |
171 local is_admin = um_is_admin(stanza.attr.to or origin.full_jid, module.host) | 171 local is_admin = um_is_admin(stanza.attr.to or origin.full_jid, module.host) |
172 if not stanza.attr.to or (expose_admins and is_admin) or is_contact_subscribed(username, module.host, jid_bare(stanza.attr.from)) then | 172 if not stanza.attr.to or (expose_admins and is_admin) or is_contact_subscribed(username, module.host, jid_bare(stanza.attr.from)) then |
173 if node and node ~= "" then | 173 if node and node ~= "" then |
174 local reply = st.reply(stanza):tag('query', {xmlns='http://jabber.org/protocol/disco#info', node=node}); | 174 local reply = st.reply(stanza):tag('query', {xmlns='http://jabber.org/protocol/disco#info', node=node}); |
175 reply:tag("feature", { var = "http://jabber.org/protocol/disco#info" }):up(); | |
176 reply:tag("feature", { var = "http://jabber.org/protocol/disco#items" }):up(); | |
175 if not reply.attr.from then reply.attr.from = origin.username.."@"..origin.host; end -- COMPAT To satisfy Psi when querying own account | 177 if not reply.attr.from then reply.attr.from = origin.username.."@"..origin.host; end -- COMPAT To satisfy Psi when querying own account |
176 local node_event = { origin = origin, stanza = stanza, reply = reply, node = node, exists = false}; | 178 local node_event = { origin = origin, stanza = stanza, reply = reply, node = node, exists = false}; |
177 local ret = module:fire_event("account-disco-info-node", node_event); | 179 local ret = module:fire_event("account-disco-info-node", node_event); |
178 if ret ~= nil then return ret; end | 180 if ret ~= nil then return ret; end |
179 if node_event.exists then | 181 if node_event.exists then |
190 elseif prosody.hosts[module.host].users.name == "anonymous" then | 192 elseif prosody.hosts[module.host].users.name == "anonymous" then |
191 reply:tag('identity', {category='account', type='anonymous'}):up(); | 193 reply:tag('identity', {category='account', type='anonymous'}):up(); |
192 else | 194 else |
193 reply:tag('identity', {category='account', type='registered'}):up(); | 195 reply:tag('identity', {category='account', type='registered'}):up(); |
194 end | 196 end |
197 reply:tag("feature", { var = "http://jabber.org/protocol/disco#info" }):up(); | |
198 reply:tag("feature", { var = "http://jabber.org/protocol/disco#items" }):up(); | |
195 module:fire_event("account-disco-info", { origin = origin, reply = reply }); | 199 module:fire_event("account-disco-info", { origin = origin, reply = reply }); |
196 origin.send(reply); | 200 origin.send(reply); |
197 return true; | 201 return true; |
198 end | 202 end |
199 end); | 203 end); |