diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2017-04-30 19:01:47 +0300 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2017-04-30 19:01:47 +0300 |
commit | fddd6110e00df12c99a20a2cc9d074f5f4f1f965 (patch) | |
tree | 366575b855f1b2013db7eeb02ecb213f81c98c1f /src/ejabberd_xmlrpc.erl | |
parent | Merge branch 'new-option-validation' (diff) |
Don't validate an option in gen_mod:get*opt() functions
The changes are very similar to those from previous commit:
* Now there is no need to pass validating function in
gen_mod:get_opt() and gen_mod:get_module_opt() functions,
because the modules' configuration keeps already validated values.
* New functions gen_mod:get_opt/2 and gen_mod:get_module_opt/3 are
introduced.
* Functions gen_mod:get_opt/4 and get_module_opt/5 are deprecated.
If the functions are still called, the "function" argument is
simply ignored.
* Validating callback Mod:listen_opt_type/1 is introduced to validate
listening options at startup.
Diffstat (limited to 'src/ejabberd_xmlrpc.erl')
-rw-r--r-- | src/ejabberd_xmlrpc.erl | 55 |
1 files changed, 24 insertions, 31 deletions
diff --git a/src/ejabberd_xmlrpc.erl b/src/ejabberd_xmlrpc.erl index 17fe75621..41695cb10 100644 --- a/src/ejabberd_xmlrpc.erl +++ b/src/ejabberd_xmlrpc.erl @@ -35,7 +35,7 @@ -author('badlop@process-one.net'). -export([start/2, handler/2, process/2, socket_type/0, - transform_listen_option/2]). + transform_listen_option/2, listen_opt_type/1]). -include("ejabberd.hrl"). -include("logger.hrl"). @@ -197,36 +197,7 @@ socket_type() -> raw. %% HTTP interface %% ----------------------------- process(_, #request{method = 'POST', data = Data, opts = Opts, ip = {IP, _}}) -> - AccessCommandsOpts = gen_mod:get_opt(access_commands, Opts, - fun(L) when is_list(L) -> L end, - undefined), - AccessCommands = - case AccessCommandsOpts of - undefined -> undefined; - _ -> - lists:flatmap( - fun({Ac, AcOpts}) -> - Commands = gen_mod:get_opt( - commands, lists:flatten(AcOpts), - fun(A) when is_atom(A) -> - A; - (L) when is_list(L) -> - true = lists:all( - fun is_atom/1, - L), - L - end, all), - %% CommOpts = gen_mod:get_opt( - %% options, AcOpts, - %% fun(L) when is_list(L) -> L end, - %% []), - [{<<"ejabberd_xmlrpc compatibility shim">>, {[?MODULE], [{access, Ac}], Commands}}]; - (Wrong) -> - ?WARNING_MSG("wrong options format for ~p: ~p", - [?MODULE, Wrong]), - [] - end, lists:flatten(AccessCommandsOpts)) - end, + AccessCommands = gen_mod:get_opt(access_commands, Opts), GetAuth = true, State = #state{access_commands = AccessCommands, get_auth = GetAuth, ip = IP}, case fxml_stream:parse_element(Data) of @@ -590,3 +561,25 @@ transform_listen_option({access_commands, ACOpts}, Opts) -> [{access_commands, NewACOpts}|Opts]; transform_listen_option(Opt, Opts) -> [Opt|Opts]. + +listen_opt_type(access_commands) -> + fun(Opts) -> + lists:map( + fun({Ac, AcOpts}) -> + Commands = case proplists:get_value( + commands, lists:flatten(AcOpts), all) of + Cmd when is_atom(Cmd) -> Cmd; + Cmds when is_list(Cmds) -> + true = lists:all(fun is_atom/1, Cmds), + Cmds + end, + {<<"ejabberd_xmlrpc compatibility shim">>, + {[?MODULE], [{access, Ac}], Commands}} + end, lists:flatten(Opts)) + end; +listen_opt_type(maxsessions) -> + fun(I) when is_integer(I), I>0 -> I end; +listen_opt_type(timeout) -> + fun(I) when is_integer(I), I>0 -> I end; +listen_opt_type(_) -> + [access_commands, maxsessions, timeout]. |