Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/processone/ejabberd.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvgeny Khramtsov <ekhramtsov@process-one.net>2019-06-14 12:33:26 +0300
committerEvgeny Khramtsov <ekhramtsov@process-one.net>2019-06-14 12:33:26 +0300
commita02cff0e780bb735531594c4ece81e8628f79782 (patch)
tree6fe7d8219d14f58183be1741fcea262c216db447 /src/mod_mam.erl
parentd48c067681d4ab25f7b97559757d8e7865ac0251 (diff)
Use new configuration validator
Diffstat (limited to 'src/mod_mam.erl')
-rw-r--r--src/mod_mam.erl109
1 files changed, 54 insertions, 55 deletions
diff --git a/src/mod_mam.erl b/src/mod_mam.erl
index f050128cd..ba8a9bcfc 100644
--- a/src/mod_mam.erl
+++ b/src/mod_mam.erl
@@ -92,7 +92,7 @@
%%% API
%%%===================================================================
start(Host, Opts) ->
- case gen_mod:get_opt(db_type, Opts) of
+ case mod_mam_opt:db_type(Opts) of
mnesia ->
?WARNING_MSG("Mnesia backend for ~s is not recommended: "
"it's limited to 2GB and often gets corrupted "
@@ -103,7 +103,7 @@ start(Host, Opts) ->
_ ->
ok
end,
- Mod = gen_mod:db_mod(Host, Opts, ?MODULE),
+ Mod = gen_mod:db_mod(Opts, ?MODULE),
case Mod:init(Host, Opts) of
ok ->
init_cache(Mod, Host, Opts),
@@ -132,14 +132,14 @@ start(Host, Opts) ->
set_room_option, 50),
ejabberd_hooks:add(store_mam_message, Host, ?MODULE,
store_mam_message, 100),
- case gen_mod:get_opt(assume_mam_usage, Opts) of
+ case mod_mam_opt:assume_mam_usage(Opts) of
true ->
ejabberd_hooks:add(message_is_archived, Host, ?MODULE,
message_is_archived, 50);
false ->
ok
end,
- case gen_mod:get_opt(clear_archive_on_room_destroy, Opts) of
+ case mod_mam_opt:clear_archive_on_room_destroy(Opts) of
true ->
ejabberd_hooks:add(remove_room, Host, ?MODULE,
remove_room, 50);
@@ -156,7 +156,7 @@ start(Host, Opts) ->
use_cache(Mod, Host) ->
case erlang:function_exported(Mod, use_cache, 2) of
true -> Mod:use_cache(Host);
- false -> gen_mod:get_module_opt(Host, ?MODULE, use_cache)
+ false -> mod_mam_opt:use_cache(Host)
end.
cache_nodes(Mod, Host) ->
@@ -174,9 +174,9 @@ init_cache(Mod, Host, Opts) ->
end.
cache_opts(Opts) ->
- MaxSize = gen_mod:get_opt(cache_size, Opts),
- CacheMissed = gen_mod:get_opt(cache_missed, Opts),
- LifeTime = case gen_mod:get_opt(cache_life_time, Opts) of
+ MaxSize = mod_mam_opt:cache_size(Opts),
+ CacheMissed = mod_mam_opt:cache_missed(Opts),
+ LifeTime = case mod_mam_opt:cache_life_time(Opts) of
infinity -> infinity;
I -> timer:seconds(I)
end,
@@ -208,14 +208,14 @@ stop(Host) ->
set_room_option, 50),
ejabberd_hooks:delete(store_mam_message, Host, ?MODULE,
store_mam_message, 100),
- case gen_mod:get_module_opt(Host, ?MODULE, assume_mam_usage) of
+ case mod_mam_opt:assume_mam_usage(Host) of
true ->
ejabberd_hooks:delete(message_is_archived, Host, ?MODULE,
message_is_archived, 50);
false ->
ok
end,
- case gen_mod:get_module_opt(Host, ?MODULE, clear_archive_on_room_destroy) of
+ case mod_mam_opt:clear_archive_on_room_destroy(Host) of
true ->
ejabberd_hooks:delete(remove_room, Host, ?MODULE,
remove_room, 50);
@@ -231,22 +231,23 @@ stop(Host) ->
end.
reload(Host, NewOpts, OldOpts) ->
- NewMod = gen_mod:db_mod(Host, NewOpts, ?MODULE),
- OldMod = gen_mod:db_mod(Host, OldOpts, ?MODULE),
+ NewMod = gen_mod:db_mod(NewOpts, ?MODULE),
+ OldMod = gen_mod:db_mod(OldOpts, ?MODULE),
if NewMod /= OldMod ->
NewMod:init(Host, NewOpts);
true ->
ok
end,
init_cache(NewMod, Host, NewOpts),
- case gen_mod:is_equal_opt(assume_mam_usage, NewOpts, OldOpts) of
- {false, true, _} ->
+ case {mod_mam_opt:assume_mam_usage(NewOpts),
+ mod_mam_opt:assume_mam_usage(OldOpts)} of
+ {true, false} ->
ejabberd_hooks:add(message_is_archived, Host, ?MODULE,
message_is_archived, 50);
- {false, false, _} ->
+ {false, true} ->
ejabberd_hooks:delete(message_is_archived, Host, ?MODULE,
message_is_archived, 50);
- true ->
+ _ ->
ok
end.
@@ -447,7 +448,7 @@ muc_filter_message(#message{from = From} = Pkt,
muc_filter_message(Acc, _MUCState, _FromNick) ->
Acc.
--spec make_id() -> binary().
+-spec make_id() -> integer().
make_id() ->
erlang:system_time(microsecond).
@@ -465,7 +466,7 @@ init_stanza_id(Pkt, LServer) ->
Pkt1 = strip_my_stanza_id(Pkt, LServer),
xmpp:put_meta(Pkt1, stanza_id, ID).
--spec set_stanza_id(stanza(), jid(), integer()) -> stanza().
+-spec set_stanza_id(stanza(), jid(), binary()) -> stanza().
set_stanza_id(Pkt, JID, ID) ->
BareJID = jid:remove_resource(JID),
Archived = #mam_archived{by = BareJID, id = ID},
@@ -555,7 +556,7 @@ disco_sm_features(Acc, _From, _To, _Node, _Lang) ->
message_is_archived(true, _C2SState, _Pkt) ->
true;
message_is_archived(false, #{lserver := LServer}, Pkt) ->
- case gen_mod:get_module_opt(LServer, ?MODULE, assume_mam_usage) of
+ case mod_mam_opt:assume_mam_usage(LServer) of
true ->
is_archived(Pkt, LServer);
false ->
@@ -572,11 +573,11 @@ delete_old_messages(TypeBin, Days) when TypeBin == <<"chat">>;
DBTypes = lists:usort(
lists:map(
fun(Host) ->
- case gen_mod:get_module_opt(Host, ?MODULE, db_type) of
+ case mod_mam_opt:db_type(Host) of
sql -> {sql, Host};
Other -> {Other, global}
end
- end, ejabberd_config:get_myhosts())),
+ end, ejabberd_option:hosts())),
Results = lists:map(
fun({DBType, ServerHost}) ->
Mod = gen_mod:db_mod(DBType, ?MODULE),
@@ -640,7 +641,7 @@ process_iq(#iq{from = #jid{luser = LUser, lserver = LServer},
default = Default,
always = Always0,
never = Never0}]} = IQ) ->
- Access = gen_mod:get_module_opt(LServer, ?MODULE, access_preferences),
+ Access = mod_mam_opt:access_preferences(LServer),
case acl:match_rule(LServer, Access, jid:make(LUser, LServer)) of
allow ->
Always = lists:usort(get_jids(Always0)),
@@ -895,7 +896,7 @@ may_enter_room(From, MUCState) ->
store_msg(Pkt, LUser, LServer, Peer, Dir) ->
case get_prefs(LUser, LServer) of
{ok, Prefs} ->
- UseMucArchive = gen_mod:get_module_opt(LServer, ?MODULE, user_mucsub_from_muc_archive),
+ UseMucArchive = mod_mam_opt:user_mucsub_from_muc_archive(LServer),
StoredInMucMam = UseMucArchive andalso xmpp:get_meta(Pkt, in_muc_mam, false),
case {should_archive_peer(LUser, LServer, Prefs, Peer), Pkt, StoredInMucMam} of
{true, #message{meta = #{sm_copy := true}}, _} ->
@@ -974,15 +975,12 @@ get_prefs(LUser, LServer) ->
{error, _} ->
{error, db_failure};
error ->
- ActivateOpt = gen_mod:get_module_opt(
- LServer, ?MODULE,
- request_activates_archiving),
+ ActivateOpt = mod_mam_opt:request_activates_archiving(LServer),
case ActivateOpt of
true ->
{ok, #archive_prefs{us = {LUser, LServer}, default = never}};
false ->
- Default = gen_mod:get_module_opt(
- LServer, ?MODULE, default),
+ Default = mod_mam_opt:default(LServer),
{ok, #archive_prefs{us = {LUser, LServer}, default = Default}}
end
end.
@@ -994,8 +992,7 @@ prefs_el(Default, Always, Never, NS) ->
xmlns = NS}.
maybe_activate_mam(LUser, LServer) ->
- ActivateOpt = gen_mod:get_module_opt(
- LServer, ?MODULE, request_activates_archiving),
+ ActivateOpt = mod_mam_opt:request_activates_archiving(LServer),
case ActivateOpt of
true ->
Mod = gen_mod:db_mod(LServer, ?MODULE),
@@ -1015,8 +1012,7 @@ maybe_activate_mam(LUser, LServer) ->
{error, _} ->
{error, db_failure};
error ->
- Default = gen_mod:get_module_opt(
- LServer, ?MODULE, default),
+ Default = mod_mam_opt:default(LServer),
write_prefs(LUser, LServer, LServer, Default, [], [])
end;
false ->
@@ -1089,7 +1085,7 @@ select(LServer, JidRequestor, JidArchive, Query, RSM, MsgType, Flags) ->
true ->
{[], true, 0};
false ->
- case {MsgType, gen_mod:get_module_opt(LServer, ?MODULE, user_mucsub_from_muc_archive)} of
+ case {MsgType, mod_mam_opt:user_mucsub_from_muc_archive(LServer)} of
{chat, true} ->
select_with_mucsub(LServer, JidRequestor, JidArchive, Query, RSM, Flags);
_ ->
@@ -1187,7 +1183,7 @@ wrap_as_mucsub(Message, Requester, ReqServer) ->
case Message of
#forwarded{delay = #delay{stamp = Stamp, desc = Desc},
sub_els = [#message{from = From, sub_els = SubEls, subject = Subject} = Msg]} ->
- {L1, SubEls2} = case lists:keytake(mam_archived, 1, xmpp:decode(SubEls)) of
+ {L1, SubEls2} = case lists:keytake(mam_archived, 1, SubEls) of
{value, Arch, Rest} ->
{[Arch#mam_archived{by = Requester}], Rest};
_ ->
@@ -1225,7 +1221,8 @@ wrap_as_mucsub(Message, Requester, ReqServer) ->
msg_to_el(#archive_msg{timestamp = TS, packet = El, nick = Nick,
peer = Peer, id = ID},
MsgType, JidRequestor, #jid{lserver = LServer} = JidArchive) ->
- CodecOpts = ejabberd_config:codec_options(LServer),
+ CodecOpts = ejabberd_config:codec_options(
+ ejabberd_router:host_of_route(LServer)),
try xmpp:decode(El, ?NS_CLIENT, CodecOpts) of
Pkt1 ->
Pkt2 = case MsgType of
@@ -1392,28 +1389,30 @@ get_commands_spec() ->
result_example = {ok, <<"MAM archive removed">>}}
].
+mod_opt_type(compress_xml) ->
+ econf:bool();
mod_opt_type(assume_mam_usage) ->
- fun (B) when is_boolean(B) -> B end;
-mod_opt_type(O) when O == cache_life_time; O == cache_size ->
- fun (I) when is_integer(I), I > 0 -> I;
- (infinity) -> infinity
- end;
-mod_opt_type(O) when O == use_cache; O == cache_missed; O == compress_xml ->
- fun (B) when is_boolean(B) -> B end;
-mod_opt_type(db_type) -> fun(T) -> ejabberd_config:v_db(?MODULE, T) end;
+ econf:bool();
mod_opt_type(default) ->
- fun (always) -> always;
- (never) -> never;
- (roster) -> roster
- end;
+ econf:enum([always, never, roster]);
mod_opt_type(request_activates_archiving) ->
- fun (B) when is_boolean(B) -> B end;
+ econf:bool();
mod_opt_type(clear_archive_on_room_destroy) ->
- fun (B) when is_boolean(B) -> B end;
+ econf:bool();
mod_opt_type(user_mucsub_from_muc_archive) ->
- fun (B) when is_boolean(B) -> B end;
+ econf:bool();
mod_opt_type(access_preferences) ->
- fun acl:access_rules_validator/1.
+ econf:acl();
+mod_opt_type(db_type) ->
+ econf:well_known(db_type, ?MODULE);
+mod_opt_type(use_cache) ->
+ econf:well_known(use_cache, ?MODULE);
+mod_opt_type(cache_size) ->
+ econf:well_known(cache_size, ?MODULE);
+mod_opt_type(cache_missed) ->
+ econf:well_known(cache_missed, ?MODULE);
+mod_opt_type(cache_life_time) ->
+ econf:well_known(cache_life_time, ?MODULE).
mod_options(Host) ->
[{assume_mam_usage, false},
@@ -1424,7 +1423,7 @@ mod_options(Host) ->
{access_preferences, all},
{user_mucsub_from_muc_archive, false},
{db_type, ejabberd_config:default_db(Host, ?MODULE)},
- {use_cache, ejabberd_config:use_cache(Host)},
- {cache_size, ejabberd_config:cache_size(Host)},
- {cache_missed, ejabberd_config:cache_missed(Host)},
- {cache_life_time, ejabberd_config:cache_life_time(Host)}].
+ {use_cache, ejabberd_option:use_cache(Host)},
+ {cache_size, ejabberd_option:cache_size(Host)},
+ {cache_missed, ejabberd_option:cache_missed(Host)},
+ {cache_life_time, ejabberd_option:cache_life_time(Host)}].