2 -- Copyright (C) 2008-2010 Matthew Wild
3 -- Copyright (C) 2008-2010 Waqas Hussain
4 -- Copyright (C) 2014 Daurnimator
6 -- This project is MIT/X11 licensed. Please see the
7 -- COPYING file in the source package for more information.
15 local function get_whois(room
)
16 return room
._data
.whois
or "moderators";
19 local function set_whois(room
, whois
)
20 assert(valid_whois
[whois
], "Invalid whois value")
21 if get_whois(room
) == whois
then return false; end
22 room
._data
.whois
= whois
;
26 module
:hook("muc-disco#info", function(event
)
27 local whois
= get_whois(event
.room
) ~= "anyone" and "muc_semianonymous" or "muc_nonanonymous";
28 event
.reply
:tag("feature", { var
= whois
}):up();
31 module
:hook("muc-config-form", function(event
)
32 local whois
= get_whois(event
.room
);
33 table.insert(event
.form
, {
34 name
= 'muc#roomconfig_whois',
36 label
= 'Addresses (JIDs) of room occupants may be viewed by:',
38 { value
= 'moderators', label
= 'Moderators only', default
= whois
== 'moderators' },
39 { value
= 'anyone', label
= 'Anyone', default
= whois
== 'anyone' }
44 module
:hook("muc-config-submitted/muc#roomconfig_whois", function(event
)
45 if set_whois(event
.room
, event
.value
) then
46 local code
= (event
.value
== 'moderators') and "173" or "172";
47 event
.status_codes
[code
] = true;
51 -- Mask 'from' jid as occupant jid if room is anonymous
52 module
:hook("muc-invite", function(event
)
53 local room
, stanza
= event
.room
, event
.stanza
;
54 if get_whois(room
) == "moderators" and room
:get_default_role(room
:get_affiliation(stanza
.attr
.to
)) ~= "moderator" then
55 local invite
= stanza
:get_child("x", "http://jabber.org/protocol/muc#user"):get_child("invite");
56 local occupant_jid
= room
:get_occupant_jid(invite
.attr
.from
);
57 if occupant_jid
~= nil then -- FIXME: This will expose real jid if inviter is not in room
58 invite
.attr
.from
= occupant_jid
;