diff options
author | Evgeny Khramtsov <ekhramtsov@process-one.net> | 2019-06-14 12:33:26 +0300 |
---|---|---|
committer | Evgeny Khramtsov <ekhramtsov@process-one.net> | 2019-06-14 12:33:26 +0300 |
commit | a02cff0e780bb735531594c4ece81e8628f79782 (patch) | |
tree | 6fe7d8219d14f58183be1741fcea262c216db447 /src/mod_mam.erl | |
parent | d48c067681d4ab25f7b97559757d8e7865ac0251 (diff) |
Use new configuration validator
Diffstat (limited to 'src/mod_mam.erl')
-rw-r--r-- | src/mod_mam.erl | 109 |
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)}]. |