Changeset

6185:d4a8840e72f9

plugins/muc/muc.lib: Fix anonymous check in `send_occupant_list`
author daurnimator <quae@daurnimator.com>
date Fri, 28 Mar 2014 13:34:46 -0400
parents 6184:2bfc4b12ec8f
children 6186:85f7cd91dc31
files plugins/muc/muc.lib.lua
diffstat 1 files changed, 12 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/plugins/muc/muc.lib.lua	Fri Mar 28 13:14:33 2014 -0400
+++ b/plugins/muc/muc.lib.lua	Fri Mar 28 13:34:46 2014 -0400
@@ -273,13 +273,21 @@
 end
 
 function room_mt:send_occupant_list(to, filter)
-	local to_occupant = self:get_occupant_by_real_jid(to);
-	local has_anonymous = self:get_whois() ~= "anyone"
+	local to_bare = jid_bare(to);
+	local is_anonymous = true;
+	if self:get_whois() ~= "anyone" then
+		local affiliation = self:get_affiliation(to);
+		if affiliation ~= "admin" and affiliation ~= "owner" then
+			local occupant = self:get_occupant_by_real_jid(to);
+			if not occupant or occupant.role ~= "moderator" then
+				is_anonymous = false;
+			end
+		end
+	end
 	for occupant_jid, occupant in self:each_occupant() do
 		if filter == nil or filter(occupant_jid, occupant) then
 			local x = st.stanza("x", {xmlns='http://jabber.org/protocol/muc#user'});
-			local is_anonymous = has_anonymous and occupant.role ~= "moderator" and to_occupant.bare_jid ~= occupant.bare_jid;
-			self:build_item_list(occupant, x, is_anonymous);
+			self:build_item_list(occupant, x, is_anonymous and to_bare ~= occupant.bare_jid); -- can always see your own jids
 			local pres = st.clone(occupant:get_presence());
 			pres.attr.to = to;
 			pres:add_child(x);