Software /
code /
prosody
Comparison
plugins/muc/whois.lib.lua @ 6214:9813c74ce006
plugins/muc: Move `whois` code to seperate file
author | daurnimator <quae@daurnimator.com> |
---|---|
date | Thu, 03 Apr 2014 14:24:27 -0400 |
child | 6991:84e01dbb739e |
comparison
equal
deleted
inserted
replaced
6213:95bddf0142f4 | 6214:9813c74ce006 |
---|---|
1 -- Prosody IM | |
2 -- Copyright (C) 2008-2010 Matthew Wild | |
3 -- Copyright (C) 2008-2010 Waqas Hussain | |
4 -- Copyright (C) 2014 Daurnimator | |
5 -- | |
6 -- This project is MIT/X11 licensed. Please see the | |
7 -- COPYING file in the source package for more information. | |
8 -- | |
9 | |
10 local valid_whois = { | |
11 moderators = true; | |
12 anyone = true; | |
13 }; | |
14 | |
15 local function get_whois(room) | |
16 return room._data.whois or "moderators"; | |
17 end | |
18 | |
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; | |
23 if room.save then room:save(true); end | |
24 return true; | |
25 end | |
26 | |
27 module:hook("muc-disco#info", function(event) | |
28 event.reply:tag("feature", {var = get_whois(event.room) ~= "anyone" and "muc_semianonymous" or "muc_nonanonymous"}):up(); | |
29 end); | |
30 | |
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', | |
35 type = 'list-single', | |
36 label = 'Who May Discover Real JIDs?', | |
37 value = { | |
38 { value = 'moderators', label = 'Moderators Only', default = whois == 'moderators' }, | |
39 { value = 'anyone', label = 'Anyone', default = whois == 'anyone' } | |
40 } | |
41 }); | |
42 end); | |
43 | |
44 module:hook("muc-config-submitted", function(event) | |
45 local new = event.fields["muc#roomconfig_whois"]; | |
46 if new ~= nil and set_whois(event.room, new) then | |
47 local code = (new == 'moderators') and "173" or "172"; | |
48 event.status_codes[code] = true; | |
49 end | |
50 end); | |
51 | |
52 -- Mask 'from' jid as occupant jid if room is anonymous | |
53 module:hook("muc-invite", function(event) | |
54 local room, stanza = event.room, event.stanza; | |
55 if get_whois(room) == "moderators" and room:get_default_role(room:get_affiliation(stanza.attr.to)) ~= "moderator" then | |
56 local invite = stanza:get_child("x", "http://jabber.org/protocol/muc#user"):get_child("invite"); | |
57 local occupant_jid = room:get_occupant_jid(invite.attr.from); | |
58 if occupant_jid ~= nil then -- FIXME: This will expose real jid if inviter is not in room | |
59 invite.attr.from = occupant_jid; | |
60 end | |
61 end | |
62 end, 50); | |
63 | |
64 return { | |
65 get = get_whois; | |
66 set = set_whois; | |
67 }; |