diff options
author | Matthew Wild <mwild1@gmail.com> | 2022-01-14 16:55:18 +0000 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2022-01-14 16:55:18 +0000 |
commit | 2d0db1b0a3a9887f9c94b6a8e4e14836bd2747b9 (patch) | |
tree | cbad8d1776ef699e369c703f78313b6379f6ecea /plugins/mod_storage_xep0227.lua | |
parent | e0b15fcba3125d7f5f981f565a65f6bae770ace6 (diff) | |
download | prosody-2d0db1b0a3a9887f9c94b6a8e4e14836bd2747b9.tar.gz prosody-2d0db1b0a3a9887f9c94b6a8e4e14836bd2747b9.zip |
mod_storage_xep0227: Skip self-contacts on roster import
Diffstat (limited to 'plugins/mod_storage_xep0227.lua')
-rw-r--r-- | plugins/mod_storage_xep0227.lua | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/plugins/mod_storage_xep0227.lua b/plugins/mod_storage_xep0227.lua index fa6bffc7..45cfaa77 100644 --- a/plugins/mod_storage_xep0227.lua +++ b/plugins/mod_storage_xep0227.lua @@ -238,6 +238,7 @@ handlers.roster = { local xml = self:_get_user_xml(user, self.host); local usere = xml and getUserElement(xml); if usere then + local user_jid = jid.join(usere.name, self.host); usere:remove_children("query", "jabber:iq:roster"); usere:maptags(function (tag) if tag.attr.xmlns == "jabber:client" and tag.name == "presence" and tag.attr.type == "subscribe" then @@ -248,18 +249,21 @@ handlers.roster = { if data and next(data) ~= nil then local roster = st.stanza("query", {xmlns='jabber:iq:roster'}); usere:add_child(roster); - for jid, item in pairs(data) do - if jid then - roster:tag("item", { - jid = jid, - subscription = item.subscription, - ask = item.ask, - name = item.name, - }); - for group in pairs(item.groups) do - roster:tag("group"):text(group):up(); + for contact_jid, item in pairs(data) do + contact_jid = jid.bare(jid.prep(contact_jid)); + if contact_jid ~= false then + if contact_jid ~= user_jid then -- Skip self-contacts + roster:tag("item", { + jid = contact_jid, + subscription = item.subscription, + ask = item.ask, + name = item.name, + }); + for group in pairs(item.groups) do + roster:tag("group"):text(group):up(); + end + roster:up(); -- move out from item end - roster:up(); -- move out from item else roster.attr.version = item.version; for pending_jid in pairs(item.pending) do |