mod_spam_filter: Update code for ejabberd >= 19.08

Update mod_spam_filter to use ejabberd's new configuration parsing
infrastructure.

Closes #280.
This commit is contained in:
Holger Weiss 2019-11-07 01:08:10 +01:00
parent 20ba631f3e
commit 20fb74c363
1 changed files with 22 additions and 30 deletions

View File

@ -104,31 +104,23 @@ reload(Host, NewOpts, OldOpts) ->
depends(_Host, _Opts) ->
[].
-spec mod_opt_type(atom()) -> fun((term()) -> term()) | [atom()].
-spec mod_opt_type(atom()) -> econf:validator().
mod_opt_type(spam_dump_file) ->
fun(none) -> none;
(File) -> iolist_to_binary(File)
end;
econf:either(
econf:enum([none]),
econf:binary());
mod_opt_type(spam_jids_file) ->
fun(none) -> none;
(File) ->
{ok, Fd} = file:open(File, [read, raw]),
ok = file:close(Fd),
iolist_to_binary(File)
end;
econf:either(
econf:enum([none]),
econf:file());
mod_opt_type(spam_urls_file) ->
fun(none) -> none;
(File) ->
{ok, Fd} = file:open(File, [read, raw]),
ok = file:close(Fd),
iolist_to_binary(File)
end;
econf:either(
econf:enum([none]),
econf:file());
mod_opt_type(access_spam) ->
fun acl:access_rules_validator/1;
econf:acl();
mod_opt_type(cache_size) ->
fun(I) when is_integer(I), I > 0 -> I;
(infinity) -> unlimited
end.
econf:pos_int(unlimited).
-spec mod_options(binary()) -> [{atom(), any()}].
mod_options(_Host) ->
@ -144,9 +136,9 @@ mod_options(_Host) ->
-spec init(list()) -> {ok, state()} | {stop, term()}.
init([Host, Opts]) ->
process_flag(trap_exit, true),
DumpFile = expand_host(proplists:get_value(spam_dump_file, Opts), Host),
JIDsFile = proplists:get_value(spam_jids_file, Opts),
URLsFile = proplists:get_value(spam_urls_file, Opts),
DumpFile = expand_host(gen_mod:get_opt(spam_dump_file, Opts), Host),
JIDsFile = gen_mod:get_opt(spam_jids_file, Opts),
URLsFile = gen_mod:get_opt(spam_urls_file, Opts),
try read_files(JIDsFile, URLsFile) of
{JIDsSet, URLsSet} ->
ejabberd_hooks:add(s2s_in_handle_info, Host, ?MODULE,
@ -177,7 +169,7 @@ init([Host, Opts]) ->
jid_set = JIDsSet,
url_set = URLsSet,
dump_fd = DumpFd,
max_cache_size = proplists:get_value(cache_size, Opts)}}
max_cache_size = gen_mod:get_opt(cache_size, Opts)}}
catch {Op, File, Reason} when Op == open;
Op == read ->
?CRITICAL_MSG("Cannot ~s ~s: ~s", [Op, File, format_error(Reason)]),
@ -227,16 +219,16 @@ handle_cast({dump, XML}, #state{dump_fd = Fd} = State) ->
end,
{noreply, State};
handle_cast({reload, NewOpts, OldOpts}, #state{host = Host} = State) ->
State1 = case {proplists:get_value(spam_dump_file, OldOpts),
proplists:get_value(spam_dump_file, NewOpts)} of
State1 = case {gen_mod:get_opt(spam_dump_file, OldOpts),
gen_mod:get_opt(spam_dump_file, NewOpts)} of
{OldDumpFile, NewDumpFile} when NewDumpFile /= OldDumpFile ->
close_dump_file(expand_host(OldDumpFile, Host), State),
open_dump_file(expand_host(NewDumpFile, Host), State);
{_OldDumpFile, _NewDumpFile} ->
State
end,
State2 = case {proplists:get_value(cache_size, OldOpts),
proplists:get_value(cache_size, NewOpts)} of
State2 = case {gen_mod:get_opt(cache_size, OldOpts),
gen_mod:get_opt(cache_size, NewOpts)} of
{OldMax, NewMax} when NewMax < OldMax ->
shrink_cache(State1#state{max_cache_size = NewMax});
{OldMax, NewMax} when NewMax > OldMax ->
@ -244,8 +236,8 @@ handle_cast({reload, NewOpts, OldOpts}, #state{host = Host} = State) ->
{_OldMax, _NewMax} ->
State1
end,
JIDsFile = proplists:get_value(spam_jids_file, NewOpts),
URLsFile = proplists:get_value(spam_urls_file, NewOpts),
JIDsFile = gen_mod:get_opt(spam_jids_file, NewOpts),
URLsFile = gen_mod:get_opt(spam_urls_file, NewOpts),
{_Result, State3} = reload_files(JIDsFile, URLsFile, State2),
{noreply, State3};
handle_cast(reopen_log, State) ->