mirror of
https://github.com/processone/ejabberd
synced 2025-10-06 03:50:15 +02:00
mod_muc_room: Use ejabberd hooks instead of function calls to mod_muc_log (#4191)
This commit is contained in:
parent
80dc95fc03
commit
d04f92d44e
2 changed files with 43 additions and 16 deletions
|
@ -34,8 +34,8 @@
|
||||||
-behaviour(gen_mod).
|
-behaviour(gen_mod).
|
||||||
|
|
||||||
%% API
|
%% API
|
||||||
-export([start/2, stop/1, reload/3, get_url/1,
|
-export([start/2, stop/1, reload/3, get_url/2,
|
||||||
check_access_log/2, add_to_log/5]).
|
check_access_log/3, add_to_log/5]).
|
||||||
|
|
||||||
-export([init/1, handle_call/3, handle_cast/2,
|
-export([init/1, handle_call/3, handle_cast/2,
|
||||||
handle_info/2, terminate/2, code_change/3,
|
handle_info/2, terminate/2, code_change/3,
|
||||||
|
@ -82,7 +82,9 @@ add_to_log(Host, Type, Data, Room, Opts) ->
|
||||||
gen_server:cast(get_proc_name(Host),
|
gen_server:cast(get_proc_name(Host),
|
||||||
{add_to_log, Type, Data, Room, Opts}).
|
{add_to_log, Type, Data, Room, Opts}).
|
||||||
|
|
||||||
check_access_log(Host, From) ->
|
check_access_log(allow, _Host, _From) ->
|
||||||
|
allow;
|
||||||
|
check_access_log(_Acc, Host, From) ->
|
||||||
case catch gen_server:call(get_proc_name(Host),
|
case catch gen_server:call(get_proc_name(Host),
|
||||||
{check_access_log, Host, From})
|
{check_access_log, Host, From})
|
||||||
of
|
of
|
||||||
|
@ -90,8 +92,10 @@ check_access_log(Host, From) ->
|
||||||
Res -> Res
|
Res -> Res
|
||||||
end.
|
end.
|
||||||
|
|
||||||
-spec get_url(#state{}) -> {ok, binary()} | error.
|
-spec get_url(any(), #state{}) -> {ok, binary()} | error.
|
||||||
get_url(#state{room = Room, host = Host, server_host = ServerHost}) ->
|
get_url({ok, _} = Acc, _State) ->
|
||||||
|
Acc;
|
||||||
|
get_url(_Acc, #state{room = Room, host = Host, server_host = ServerHost}) ->
|
||||||
try mod_muc_log_opt:url(ServerHost) of
|
try mod_muc_log_opt:url(ServerHost) of
|
||||||
undefined -> error;
|
undefined -> error;
|
||||||
URL ->
|
URL ->
|
||||||
|
@ -115,6 +119,9 @@ depends(_Host, _Opts) ->
|
||||||
init([Host|_]) ->
|
init([Host|_]) ->
|
||||||
process_flag(trap_exit, true),
|
process_flag(trap_exit, true),
|
||||||
Opts = gen_mod:get_module_opts(Host, ?MODULE),
|
Opts = gen_mod:get_module_opts(Host, ?MODULE),
|
||||||
|
ejabberd_hooks:add(muc_log_add, Host, ?MODULE, add_to_log, 100),
|
||||||
|
ejabberd_hooks:add(muc_log_check_access_log, Host, ?MODULE, check_access_log, 100),
|
||||||
|
ejabberd_hooks:add(muc_log_get_url, Host, ?MODULE, get_url, 100),
|
||||||
{ok, init_state(Host, Opts)}.
|
{ok, init_state(Host, Opts)}.
|
||||||
|
|
||||||
handle_call({check_access_log, ServerHost, FromJID}, _From, State) ->
|
handle_call({check_access_log, ServerHost, FromJID}, _From, State) ->
|
||||||
|
@ -137,7 +144,11 @@ handle_cast(Msg, State) ->
|
||||||
|
|
||||||
handle_info(_Info, State) -> {noreply, State}.
|
handle_info(_Info, State) -> {noreply, State}.
|
||||||
|
|
||||||
terminate(_Reason, _State) -> ok.
|
terminate(_Reason, #state{host = Host}) ->
|
||||||
|
ejabberd_hooks:delete(muc_log_add, Host, ?MODULE, add_to_log, 100),
|
||||||
|
ejabberd_hooks:delete(muc_log_check_access_log, Host, ?MODULE, check_access_log, 100),
|
||||||
|
ejabberd_hooks:delete(muc_log_get_url, Host, ?MODULE, get_url, 100),
|
||||||
|
ok.
|
||||||
|
|
||||||
code_change(_OldVsn, State, _Extra) -> {ok, State}.
|
code_change(_OldVsn, State, _Extra) -> {ok, State}.
|
||||||
|
|
||||||
|
|
|
@ -3716,8 +3716,10 @@ is_allowed_log_change(Options, StateData, From) ->
|
||||||
false -> true;
|
false -> true;
|
||||||
true ->
|
true ->
|
||||||
allow ==
|
allow ==
|
||||||
mod_muc_log:check_access_log(StateData#state.server_host,
|
ejabberd_hooks:run_fold(muc_log_check_access_log,
|
||||||
From)
|
StateData#state.server_host,
|
||||||
|
deny,
|
||||||
|
[StateData#state.server_host, From])
|
||||||
end.
|
end.
|
||||||
|
|
||||||
-spec is_allowed_persistent_change(muc_roomconfig:result(), state(), jid()) -> boolean().
|
-spec is_allowed_persistent_change(muc_roomconfig:result(), state(), jid()) -> boolean().
|
||||||
|
@ -3856,7 +3858,10 @@ get_config(Lang, StateData, From) ->
|
||||||
[]
|
[]
|
||||||
end
|
end
|
||||||
++
|
++
|
||||||
case mod_muc_log:check_access_log(StateData#state.server_host, From) of
|
case ejabberd_hooks:run_fold(muc_log_check_access_log,
|
||||||
|
StateData#state.server_host,
|
||||||
|
deny,
|
||||||
|
[StateData#state.server_host, From]) of
|
||||||
allow -> [{enablelogging, Config#config.logging}];
|
allow -> [{enablelogging, Config#config.logging}];
|
||||||
deny -> []
|
deny -> []
|
||||||
end,
|
end,
|
||||||
|
@ -4555,7 +4560,10 @@ iq_disco_info_extras(Lang, StateData, Static) ->
|
||||||
end,
|
end,
|
||||||
Fs4 = case Config#config.logging of
|
Fs4 = case Config#config.logging of
|
||||||
true ->
|
true ->
|
||||||
case mod_muc_log:get_url(StateData) of
|
case ejabberd_hooks:run_fold(muc_log_get_url,
|
||||||
|
StateData#state.server_host,
|
||||||
|
error,
|
||||||
|
[StateData]) of
|
||||||
{ok, URL} ->
|
{ok, URL} ->
|
||||||
[{logs, URL}|Fs3];
|
[{logs, URL}|Fs3];
|
||||||
error ->
|
error ->
|
||||||
|
@ -5334,15 +5342,23 @@ handle_roommessage_from_nonparticipant(Packet, StateData, From) ->
|
||||||
|
|
||||||
add_to_log(Type, Data, StateData)
|
add_to_log(Type, Data, StateData)
|
||||||
when Type == roomconfig_change_disabledlogging ->
|
when Type == roomconfig_change_disabledlogging ->
|
||||||
mod_muc_log:add_to_log(StateData#state.server_host,
|
ejabberd_hooks:run(muc_log_add,
|
||||||
roomconfig_change, Data, StateData#state.jid,
|
StateData#state.server_host,
|
||||||
make_opts(StateData, false));
|
[StateData#state.server_host,
|
||||||
|
roomconfig_change,
|
||||||
|
Data,
|
||||||
|
StateData#state.jid,
|
||||||
|
make_opts(StateData, false)]);
|
||||||
add_to_log(Type, Data, StateData) ->
|
add_to_log(Type, Data, StateData) ->
|
||||||
case (StateData#state.config)#config.logging of
|
case (StateData#state.config)#config.logging of
|
||||||
true ->
|
true ->
|
||||||
mod_muc_log:add_to_log(StateData#state.server_host,
|
ejabberd_hooks:run(muc_log_add,
|
||||||
Type, Data, StateData#state.jid,
|
StateData#state.server_host,
|
||||||
make_opts(StateData, false));
|
[StateData#state.server_host,
|
||||||
|
Type,
|
||||||
|
Data,
|
||||||
|
StateData#state.jid,
|
||||||
|
make_opts(StateData, false)]);
|
||||||
false -> ok
|
false -> ok
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue