summaryrefslogtreecommitdiff
path: root/src/mod_muc.erl
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-04-30 19:01:47 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-04-30 19:01:47 +0300
commitfddd6110e00df12c99a20a2cc9d074f5f4f1f965 (patch)
tree366575b855f1b2013db7eeb02ecb213f81c98c1f /src/mod_muc.erl
parentMerge branch 'new-option-validation' (diff)
Don't validate an option in gen_mod:get*opt() functions
The changes are very similar to those from previous commit: * Now there is no need to pass validating function in gen_mod:get_opt() and gen_mod:get_module_opt() functions, because the modules' configuration keeps already validated values. * New functions gen_mod:get_opt/2 and gen_mod:get_module_opt/3 are introduced. * Functions gen_mod:get_opt/4 and get_module_opt/5 are deprecated. If the functions are still called, the "function" argument is simply ignored. * Validating callback Mod:listen_opt_type/1 is introduced to validate listening options at startup.
Diffstat (limited to 'src/mod_muc.erl')
-rw-r--r--src/mod_muc.erl63
1 files changed, 17 insertions, 46 deletions
diff --git a/src/mod_muc.erl b/src/mod_muc.erl
index 9c8316e2..b37f1c94 100644
--- a/src/mod_muc.erl
+++ b/src/mod_muc.erl
@@ -224,8 +224,7 @@ get_online_rooms_by_user(ServerHost, LUser, LServer) ->
init([Host, Opts]) ->
process_flag(trap_exit, true),
- IQDisc = gen_mod:get_opt(iqdisc, Opts, fun gen_iq_handler:check_type/1,
- one_queue),
+ IQDisc = gen_mod:get_opt(iqdisc, Opts, one_queue),
#state{access = Access, host = MyHost,
history_size = HistorySize, queue_type = QueueType,
room_shaper = RoomShaper} = State = init_state(Host, Opts),
@@ -260,12 +259,8 @@ handle_call({create, Room, From, Nick, Opts}, _From,
{reply, ok, State}.
handle_cast({reload, ServerHost, NewOpts, OldOpts}, #state{host = OldHost}) ->
- NewIQDisc = gen_mod:get_opt(iqdisc, NewOpts,
- fun gen_iq_handler:check_type/1,
- one_queue),
- OldIQDisc = gen_mod:get_opt(iqdisc, OldOpts,
- fun gen_iq_handler:check_type/1,
- one_queue),
+ NewIQDisc = gen_mod:get_opt(iqdisc, NewOpts, one_queue),
+ OldIQDisc = gen_mod:get_opt(iqdisc, OldOpts, one_queue),
NewMod = gen_mod:db_mod(ServerHost, NewOpts, ?MODULE),
NewRMod = gen_mod:ram_db_mod(ServerHost, NewOpts, ?MODULE),
OldMod = gen_mod:db_mod(ServerHost, OldOpts, ?MODULE),
@@ -336,32 +331,15 @@ code_change(_OldVsn, State, _Extra) -> {ok, State}.
init_state(Host, Opts) ->
MyHost = gen_mod:get_opt_host(Host, Opts,
<<"conference.@HOST@">>),
- Access = gen_mod:get_opt(access, Opts,
- fun acl:access_rules_validator/1, all),
- AccessCreate = gen_mod:get_opt(access_create, Opts,
- fun acl:access_rules_validator/1, all),
- AccessAdmin = gen_mod:get_opt(access_admin, Opts,
- fun acl:access_rules_validator/1,
- none),
- AccessPersistent = gen_mod:get_opt(access_persistent, Opts,
- fun acl:access_rules_validator/1,
- all),
- HistorySize = gen_mod:get_opt(history_size, Opts,
- fun(I) when is_integer(I), I>=0 -> I end,
- 20),
- MaxRoomsDiscoItems = gen_mod:get_opt(max_rooms_discoitems, Opts,
- fun(I) when is_integer(I), I>=0 -> I end,
- 100),
- DefRoomOpts1 = gen_mod:get_opt(default_room_options, Opts,
- fun(L) when is_list(L) -> L end,
- []),
- QueueType = case gen_mod:get_opt(queue_type, Opts,
- mod_opt_type(queue_type)) of
- undefined ->
- ejabberd_config:default_queue_type(Host);
- Type ->
- Type
- end,
+ Access = gen_mod:get_opt(access, Opts, all),
+ AccessCreate = gen_mod:get_opt(access_create, Opts, all),
+ AccessAdmin = gen_mod:get_opt(access_admin, Opts, none),
+ AccessPersistent = gen_mod:get_opt(access_persistent, Opts, all),
+ HistorySize = gen_mod:get_opt(history_size, Opts, 20),
+ MaxRoomsDiscoItems = gen_mod:get_opt(max_rooms_discoitems, Opts, 100),
+ DefRoomOpts1 = gen_mod:get_opt(default_room_options, Opts, []),
+ QueueType = gen_mod:get_opt(queue_type, Opts,
+ ejabberd_config:default_queue_type(Host)),
DefRoomOpts =
lists:flatmap(
fun({Opt, Val}) ->
@@ -407,14 +385,12 @@ init_state(Host, Opts) ->
[Opt, Val]),
fun(_) -> undefined end
end,
- case gen_mod:get_opt(Opt, [{Opt, Val}], VFun) of
+ case ejabberd_config:prepare_opt_val(Opt, Val, VFun, undefined) of
undefined -> [];
NewVal -> [{Opt, NewVal}]
end
end, DefRoomOpts1),
- RoomShaper = gen_mod:get_opt(room_shaper, Opts,
- fun(A) when is_atom(A) -> A end,
- none),
+ RoomShaper = gen_mod:get_opt(room_shaper, Opts, none),
#state{host = MyHost,
server_host = Host,
access = {Access, AccessCreate, AccessAdmin, AccessPersistent},
@@ -601,7 +577,6 @@ process_disco_items(#iq{type = get, from = From, to = To, lang = Lang,
ServerHost = ejabberd_router:host_of_route(Host),
MaxRoomsDiscoItems = gen_mod:get_module_opt(
ServerHost, ?MODULE, max_rooms_discoitems,
- fun(I) when is_integer(I), I>=0 -> I end,
100),
case iq_disco_items(ServerHost, Host, From, Lang,
MaxRoomsDiscoItems, Node, RSM) of
@@ -655,12 +630,8 @@ check_user_can_create_room(ServerHost, AccessCreate,
end.
check_create_roomid(ServerHost, RoomID) ->
- Max = gen_mod:get_module_opt(ServerHost, ?MODULE, max_room_id,
- fun(infinity) -> infinity;
- (I) when is_integer(I), I>0 -> I
- end, infinity),
- Regexp = gen_mod:get_module_opt(ServerHost, ?MODULE, regexp_room_id,
- fun iolist_to_binary/1, ""),
+ Max = gen_mod:get_module_opt(ServerHost, ?MODULE, max_room_id, infinity),
+ Regexp = gen_mod:get_module_opt(ServerHost, ?MODULE, regexp_room_id, ""),
(byte_size(RoomID) =< Max) and
(re:run(RoomID, Regexp, [unicode, {capture, none}]) == match).
@@ -956,7 +927,7 @@ mod_opt_type(max_users_admin_threshold) ->
mod_opt_type(max_users_presence) ->
fun (MUP) when is_integer(MUP) -> MUP end;
mod_opt_type(min_message_interval) ->
- fun (MMI) when is_number(MMI) -> MMI end;
+ fun (MMI) when is_number(MMI), MMI >= 0 -> MMI end;
mod_opt_type(min_presence_interval) ->
fun (I) when is_number(I), I >= 0 -> I end;
mod_opt_type(room_shaper) ->