diff options
author | Holger Weiss <holger@zedat.fu-berlin.de> | 2019-02-20 17:01:34 +0100 |
---|---|---|
committer | Holger Weiss <holger@zedat.fu-berlin.de> | 2019-02-20 17:01:34 +0100 |
commit | 9c66cc58857f8854654a0edb3bcbd161fbf95bcb (patch) | |
tree | 218046fd5144b47327af8bd890887fc5cf882aca /src/mod_muc.erl | |
parent | Don't crash on malformed 'modules' section (diff) | |
parent | disallow room creation if archive not empty and (diff) |
Merge remote-tracking branch 'processone/pr/2763'
* processone/pr/2763:
disallow room creation if archive not empty and clear_archive_on_room_destroy is false
check if mod_mam is loaded before calling mod_mam:is_empty_for_room
added cmds to list and destroy empty rooms by ejabberdctl
allow check if archive is empty for or user or room
option to prevent archive removal on room destroy
Diffstat (limited to 'src/mod_muc.erl')
-rw-r--r-- | src/mod_muc.erl | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/mod_muc.erl b/src/mod_muc.erl index 29474e511..ae3c6f9f7 100644 --- a/src/mod_muc.erl +++ b/src/mod_muc.erl @@ -65,7 +65,8 @@ iq_set_register_info/5, count_online_rooms_by_user/3, get_online_rooms_by_user/3, - can_use_nick/4]). + can_use_nick/4, + check_create_room/4]). -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3, @@ -112,10 +113,14 @@ %% API %%==================================================================== start(Host, Opts) -> + ejabberd_hooks:add(check_create_room, Host, ?MODULE, + check_create_room, 50), gen_mod:start_child(?MODULE, Host, Opts). stop(Host) -> Rooms = shutdown_rooms(Host), + ejabberd_hooks:delete(check_create_room, Host, ?MODULE, + check_create_room, 50), gen_mod:stop_child(?MODULE, Host), {wait, Rooms}. @@ -442,7 +447,9 @@ do_route1(Host, ServerHost, Access, HistorySize, RoomShaper, true -> case check_user_can_create_room( ServerHost, AccessCreate, From, Room) and - check_create_roomid(ServerHost, Room) of + ejabberd_hooks:run_fold(check_create_room, + ServerHost, true, + [ServerHost, Room, Host]) of true -> {ok, Pid} = start_new_room( Host, ServerHost, Access, @@ -611,9 +618,10 @@ check_user_can_create_room(ServerHost, AccessCreate, _ -> false end. -check_create_roomid(ServerHost, RoomID) -> +check_create_room(Acc, ServerHost, RoomID, _Host) -> Max = gen_mod:get_module_opt(ServerHost, ?MODULE, max_room_id), Regexp = gen_mod:get_module_opt(ServerHost, ?MODULE, regexp_room_id), + Acc and (byte_size(RoomID) =< Max) and (re:run(RoomID, Regexp, [unicode, {capture, none}]) == match). |