Mercurial > prosody-hg
comparison plugins/muc/mod_muc.lua @ 2033:38d32c154cec
MUC: Added config option 'restrict_room_creation' to allow restricting room creation to admins.
| author | Waqas Hussain <waqas20@gmail.com> |
|---|---|
| date | Wed, 21 Oct 2009 11:58:33 +0500 |
| parents | 4f33100195a0 |
| children | b4628c4d9ee2 b7049746bd29 |
comparison
equal
deleted
inserted
replaced
| 2032:2714ccde2569 | 2033:38d32c154cec |
|---|---|
| 12 end | 12 end |
| 13 | 13 |
| 14 local muc_host = module:get_host(); | 14 local muc_host = module:get_host(); |
| 15 local muc_name = module:get_option("name"); | 15 local muc_name = module:get_option("name"); |
| 16 if type(muc_name) ~= "string" then muc_name = "Prosody Chatrooms"; end | 16 if type(muc_name) ~= "string" then muc_name = "Prosody Chatrooms"; end |
| 17 local restrict_room_creation = module:get_option("restrict_room_creation"); | |
| 18 if restrict_room_creation and restrict_room_creation ~= true then restrict_room_creation = nil; end | |
| 17 local history_length = 20; | 19 local history_length = 20; |
| 18 | 20 |
| 19 local muc_new_room = module:require "muc".new_room; | 21 local muc_new_room = module:require "muc".new_room; |
| 20 local register_component = require "core.componentmanager".register_component; | 22 local register_component = require "core.componentmanager".register_component; |
| 21 local deregister_component = require "core.componentmanager".deregister_component; | 23 local deregister_component = require "core.componentmanager".deregister_component; |
| 22 local jid_split = require "util.jid".split; | 24 local jid_split = require "util.jid".split; |
| 25 local jid_bare = require "util.jid".bare; | |
| 23 local st = require "util.stanza"; | 26 local st = require "util.stanza"; |
| 24 local uuid_gen = require "util.uuid".generate; | 27 local uuid_gen = require "util.uuid".generate; |
| 25 local datamanager = require "util.datamanager"; | 28 local datamanager = require "util.datamanager"; |
| 29 local um_is_admin = require "core.usermanager".is_admin; | |
| 26 | 30 |
| 27 local rooms = {}; | 31 local rooms = {}; |
| 28 local persistent_rooms = datamanager.load(nil, muc_host, "persistent") or {}; | 32 local persistent_rooms = datamanager.load(nil, muc_host, "persistent") or {}; |
| 29 local component; | 33 local component; |
| 34 | |
| 35 local function is_admin(jid) | |
| 36 return um_is_admin(jid) or um_is_admin(jid, module.host); | |
| 37 end | |
| 30 | 38 |
| 31 local function room_route_stanza(room, stanza) core_post_stanza(component, stanza); end | 39 local function room_route_stanza(room, stanza) core_post_stanza(component, stanza); end |
| 32 local function room_save(room, forced) | 40 local function room_save(room, forced) |
| 33 local node = jid_split(room.jid); | 41 local node = jid_split(room.jid); |
| 34 persistent_rooms[room.jid] = room._data.persistent; | 42 persistent_rooms[room.jid] = room._data.persistent; |
| 103 if to_node then | 111 if to_node then |
| 104 local bare = to_node.."@"..to_host; | 112 local bare = to_node.."@"..to_host; |
| 105 if to_host == muc_host or bare == muc_host then | 113 if to_host == muc_host or bare == muc_host then |
| 106 local room = rooms[bare]; | 114 local room = rooms[bare]; |
| 107 if not room then | 115 if not room then |
| 108 room = muc_new_room(bare); | 116 if not(restrict_room_creation) or is_admin(stanza.attr.from) then |
| 109 room.route_stanza = room_route_stanza; | 117 room = muc_new_room(bare); |
| 110 room.save = room_save; | 118 room.route_stanza = room_route_stanza; |
| 111 rooms[bare] = room; | 119 room.save = room_save; |
| 120 rooms[bare] = room; | |
| 121 end | |
| 112 end | 122 end |
| 113 room:handle_stanza(origin, stanza); | 123 if room then |
| 114 if not next(room._occupants) and not persistent_rooms[room.jid] then -- empty, non-persistent room | 124 room:handle_stanza(origin, stanza); |
| 115 rooms[bare] = nil; -- discard room | 125 if not next(room._occupants) and not persistent_rooms[room.jid] then -- empty, non-persistent room |
| 126 rooms[bare] = nil; -- discard room | |
| 127 end | |
| 128 else | |
| 129 origin.send(st.error_reply(stanza, "cancel", "not-allowed")); | |
| 116 end | 130 end |
| 117 else --[[not for us?]] end | 131 else --[[not for us?]] end |
| 118 return; | 132 return; |
| 119 end | 133 end |
| 120 -- to the main muc domain | 134 -- to the main muc domain |
