mirror of
https://github.com/processone/ejabberd.git
synced 2024-06-16 22:05:29 +02:00
Merge mod_opt_type from db sub-modules to main module mod_opt_type
This commit is contained in:
parent
149cc9654f
commit
62db030942
|
@ -29,16 +29,16 @@
|
||||||
-export([start/0, load_file/1, reload_file/0, read_file/1,
|
-export([start/0, load_file/1, reload_file/0, read_file/1,
|
||||||
add_global_option/2, add_local_option/2,
|
add_global_option/2, add_local_option/2,
|
||||||
get_global_option/2, get_local_option/2,
|
get_global_option/2, get_local_option/2,
|
||||||
get_global_option/3, get_local_option/3,
|
get_global_option/3, get_local_option/3,
|
||||||
get_option/2, get_option/3, add_option/2, has_option/1,
|
get_option/2, get_option/3, add_option/2, has_option/1,
|
||||||
get_vh_by_auth_method/1, is_file_readable/1,
|
get_vh_by_auth_method/1, is_file_readable/1,
|
||||||
get_version/0, get_myhosts/0, get_mylang/0,
|
get_version/0, get_myhosts/0, get_mylang/0,
|
||||||
get_ejabberd_config_path/0, is_using_elixir_config/0,
|
get_ejabberd_config_path/0, is_using_elixir_config/0,
|
||||||
prepare_opt_val/4, convert_table_to_binary/5,
|
prepare_opt_val/4, convert_table_to_binary/5,
|
||||||
transform_options/1, collect_options/1, default_db/2,
|
transform_options/1, collect_options/1, default_db/2,
|
||||||
convert_to_yaml/1, convert_to_yaml/2, v_db/2,
|
convert_to_yaml/1, convert_to_yaml/2, v_db/2,
|
||||||
env_binary_to_list/2, opt_type/1, may_hide_data/1,
|
env_binary_to_list/2, opt_type/1, may_hide_data/1,
|
||||||
is_elixir_enabled/0]).
|
is_elixir_enabled/0, v_dbs/1, v_dbs_mods/1]).
|
||||||
|
|
||||||
-export([start/2]).
|
-export([start/2]).
|
||||||
|
|
||||||
|
@ -893,6 +893,19 @@ v_db(Mod, Type) ->
|
||||||
[] -> erlang:error(badarg)
|
[] -> erlang:error(badarg)
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
-spec v_dbs(module()) -> [atom()].
|
||||||
|
|
||||||
|
v_dbs(Mod) ->
|
||||||
|
lists:flatten(ets:match(module_db, {Mod, '$1'})).
|
||||||
|
|
||||||
|
-spec v_dbs_mods(module()) -> [module()].
|
||||||
|
|
||||||
|
v_dbs_mods(Mod) ->
|
||||||
|
lists:map(fun([M]) ->
|
||||||
|
binary_to_atom(<<(atom_to_binary(Mod, utf8))/binary, "_",
|
||||||
|
(atom_to_binary(M, utf8))/binary>>, utf8)
|
||||||
|
end, ets:match(module_db, {Mod, '$1'})).
|
||||||
|
|
||||||
-spec default_db(binary(), module()) -> atom().
|
-spec default_db(binary(), module()) -> atom().
|
||||||
|
|
||||||
default_db(Host, Module) ->
|
default_db(Host, Module) ->
|
||||||
|
|
|
@ -308,10 +308,47 @@ get_opt_host(Host, Opts, Default) ->
|
||||||
Val = get_opt(host, Opts, fun iolist_to_binary/1, Default),
|
Val = get_opt(host, Opts, fun iolist_to_binary/1, Default),
|
||||||
ejabberd_regexp:greplace(Val, <<"@HOST@">>, Host).
|
ejabberd_regexp:greplace(Val, <<"@HOST@">>, Host).
|
||||||
|
|
||||||
|
|
||||||
|
get_module_mod_opt_type_fun(Module) ->
|
||||||
|
DBSubMods = ejabberd_config:v_dbs_mods(Module),
|
||||||
|
fun(Opt) ->
|
||||||
|
Res = lists:foldl(fun(Mod, {Funs, ArgsList, _} = Acc) ->
|
||||||
|
case catch Mod:mod_opt_type(Opt) of
|
||||||
|
Fun when is_function(Fun) ->
|
||||||
|
{[Fun | Funs], ArgsList, true};
|
||||||
|
L when is_list(L) ->
|
||||||
|
{Funs, L ++ ArgsList, true};
|
||||||
|
_ ->
|
||||||
|
Acc
|
||||||
|
end
|
||||||
|
end, {[], [], false}, [Module | DBSubMods]),
|
||||||
|
case Res of
|
||||||
|
{[], [], false} ->
|
||||||
|
throw({'EXIT', {undef, mod_opt_type}});
|
||||||
|
{[], Args, _} -> Args;
|
||||||
|
{Funs, _, _} ->
|
||||||
|
fun(Val) ->
|
||||||
|
lists:any(fun(F) ->
|
||||||
|
try F(Val) of
|
||||||
|
_ ->
|
||||||
|
true
|
||||||
|
catch {replace_with, _NewVal} = E ->
|
||||||
|
throw(E);
|
||||||
|
{invalid_syntax, _Error} = E2 ->
|
||||||
|
throw(E2);
|
||||||
|
_:_ ->
|
||||||
|
false
|
||||||
|
end
|
||||||
|
end, Funs)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end.
|
||||||
|
|
||||||
validate_opts(Module, Opts) ->
|
validate_opts(Module, Opts) ->
|
||||||
|
ModOptFun = get_module_mod_opt_type_fun(Module),
|
||||||
lists:filtermap(
|
lists:filtermap(
|
||||||
fun({Opt, Val}) ->
|
fun({Opt, Val}) ->
|
||||||
case catch Module:mod_opt_type(Opt) of
|
case catch ModOptFun(Opt) of
|
||||||
VFun when is_function(VFun) ->
|
VFun when is_function(VFun) ->
|
||||||
try VFun(Val) of
|
try VFun(Val) of
|
||||||
_ ->
|
_ ->
|
||||||
|
|
Loading…
Reference in New Issue
Block a user