mod_storage_xep0227: Skip self-contacts on roster import
authorMatthew Wild <mwild1@gmail.com>
Fri, 14 Jan 2022 16:55:18 +0000
changeset 12187 e77c938ed92b
parent 12184 53e0ae770917
child 12188 326f5466ddc7
mod_storage_xep0227: Skip self-contacts on roster import
plugins/mod_storage_xep0227.lua
--- a/plugins/mod_storage_xep0227.lua	Mon Jan 10 18:23:54 2022 +0100
+++ b/plugins/mod_storage_xep0227.lua	Fri Jan 14 16:55:18 2022 +0000
@@ -238,6 +238,7 @@
 		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 @@
 			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