aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/muc/muc.lib.lua
diff options
context:
space:
mode:
authorMatthew Wild <mwild1@gmail.com>2013-08-30 14:15:29 +0100
committerMatthew Wild <mwild1@gmail.com>2013-08-30 14:15:29 +0100
commit6b32cecbae817e9dad851974e468aff3d3dec392 (patch)
treea07f2da515f036877b38fee05bf5991d0f29d5b4 /plugins/muc/muc.lib.lua
parent0485b69ae4fccc82fcd63d13fb2b3b73a229e80b (diff)
downloadprosody-6b32cecbae817e9dad851974e468aff3d3dec392.tar.gz
prosody-6b32cecbae817e9dad851974e468aff3d3dec392.zip
mod_muc: Support for locking newly-created rooms until they are configured (enabled with muc_room_locking = true)
Diffstat (limited to 'plugins/muc/muc.lib.lua')
-rw-r--r--plugins/muc/muc.lib.lua13
1 files changed, 13 insertions, 0 deletions
diff --git a/plugins/muc/muc.lib.lua b/plugins/muc/muc.lib.lua
index 8800640f..0565d692 100644
--- a/plugins/muc/muc.lib.lua
+++ b/plugins/muc/muc.lib.lua
@@ -480,6 +480,12 @@ function room_mt:handle_to_occupant(origin, stanza) -- PM, vCards, etc
log("debug", "%s joining as %s", from, to);
if not next(self._affiliations) then -- new room, no owners
self._affiliations[jid_bare(from)] = "owner";
+ if self.locked and not stanza:get_child("x", "http://jabber.org/protocol/muc") then
+ self.locked = nil; -- Older groupchat protocol doesn't lock
+ end
+ elseif self.locked then -- Deny entry
+ origin.send(st.error_reply(stanza, "cancel", "item-not-found"));
+ return;
end
local affiliation = self:get_affiliation(from);
local role = self:get_default_role(affiliation)
@@ -501,6 +507,9 @@ function room_mt:handle_to_occupant(origin, stanza) -- PM, vCards, etc
if self._data.whois == 'anyone' then
pr:tag("status", {code='100'}):up();
end
+ if self.locked then
+ pr:tag("status", {code='201'}):up();
+ end
pr.attr.to = from;
self:_route_stanza(pr);
self:send_history(from, stanza);
@@ -688,6 +697,10 @@ function room_mt:process_form(origin, stanza)
handle_option("password", "muc#roomconfig_roomsecret");
if self.save then self:save(true); end
+ if self.locked then
+ module:fire_event("muc-room-unlocked", { room = self });
+ self.locked = nil;
+ end
origin.send(st.reply(stanza));
if next(changed) then