Software /
code /
prosody
Diff
plugins/muc/muc.lib.lua @ 5808:026367992a0f
mod_muc: Support for locking newly-created rooms until they are configured (enabled with muc_room_locking = true)
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Fri, 30 Aug 2013 14:15:29 +0100 |
parent | 5776:bd0ff8ae98a8 |
child | 5854:16a2bb97c5f5 |
line wrap: on
line diff
--- a/plugins/muc/muc.lib.lua Fri Aug 30 14:10:51 2013 +0100 +++ b/plugins/muc/muc.lib.lua Fri Aug 30 14:15:29 2013 +0100 @@ -480,6 +480,12 @@ 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 @@ 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 @@ 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