Mercurial > prosody-modules
view mod_poke_strangers/mod_poke_strangers.lua @ 4298:020dd0a59f1f
mod_muc_markers: Add option for @id rewriting, default off (may break some clients)
XEP-0333 was updated to clarify that stanza-id should be used
instead of the 'id' attribute when in a MUC. Some clients still
use the id attribute, which is why we were rewriting it.
Rewriting is bad because mod_muc advertises stable_id, indicating
that Prosody does *not* rewrite ids. Recent versions of Conversations
actually depend on this being true.
All clients should migrate to using stanza-id for markers. See XEP-0333.
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Mon, 14 Dec 2020 12:09:25 +0000 |
parents | 0aa8aa6cdb1b |
children | 1e28f32257d6 |
line wrap: on
line source
local st = require"util.stanza"; local jid_split = require "util.jid".split; local jid_bare = require "util.jid".bare; local is_contact_subscribed = require "core.rostermanager".is_contact_subscribed; local uuid_generate = require "util.uuid".generate; local set = require "util.set"; local recently_queried = set.new(); local version_id = uuid_generate(); local disco_id = uuid_generate(); module:hook("iq-result/host/" .. version_id, function (event) module:log("info", "Stranger " .. event.stanza.attr.from .. " version: " .. tostring(event.stanza)); return true; end); module:hook("iq-result/host/" .. disco_id, function (event) module:log("info", "Stranger " .. event.stanza.attr.from .. " disco: " .. tostring(event.stanza)); return true; end); function check_subscribed(event) local stanza = event.stanza; local local_user_jid = stanza.attr.to; local to_user, to_host, to_resource = jid_split(local_user_jid); local stranger_jid = stanza.attr.from; if recently_queried:contains(stranger_jid) then module:log("debug", "Not re-poking " .. stranger_jid); return nil; end local from_jid = jid_bare(stranger_jid); if to_user and not is_contact_subscribed(to_user, to_host, from_jid) then if to_resource and stanza.attr.type == "groupchat" then return nil; end recently_queried:add(stranger_jid); module:send(st.iq({ type = "get", to = stranger_jid, from = to_host, id = version_id }):query("jabber:iq:version")); module:send(st.iq({ type = "get", to = stranger_jid, from = to_host, id = disco_id }):query("http://jabber.org/protocol/disco#info")); end return nil; end module:hook("message/bare", check_subscribed, 225); module:hook("message/full", check_subscribed, 225); -- Not hooking iqs, as that could turn into infinite loops!