ejabberd_http: Expand @VERSION@ in custom headers

Let ejabberd_http expand the @VERSION@ keyword to the ejabberd version
if specified in the "custom_headers" listener option.

Closes #1414.
This commit is contained in:
Holger Weiss 2017-03-27 23:52:49 +02:00
parent 41de5e78d0
commit 191fc1b4e8
3 changed files with 17 additions and 8 deletions

View File

@ -169,7 +169,7 @@ init({SockMod, Socket}, Opts) ->
{ok, RE} = re:compile(<<"^(?:\\[(.*?)\\]|(.*?))(?::(\\d+))?$">>), {ok, RE} = re:compile(<<"^(?:\\[(.*?)\\]|(.*?))(?::(\\d+))?$">>),
CustomHeaders = gen_mod:get_opt(custom_headers, Opts, CustomHeaders = gen_mod:get_opt(custom_headers, Opts,
fun(L) when is_list(L) -> L end, fun expand_custom_headers/1,
[]), []),
?INFO_MSG("started: ~p", [{SockMod1, Socket1}]), ?INFO_MSG("started: ~p", [{SockMod1, Socket1}]),
@ -733,6 +733,11 @@ rest_dir(0, Path, <<H, T/binary>>) ->
rest_dir(0, <<H, Path/binary>>, T); rest_dir(0, <<H, Path/binary>>, T);
rest_dir(N, Path, <<_H, T/binary>>) -> rest_dir(N, Path, T). rest_dir(N, Path, <<_H, T/binary>>) -> rest_dir(N, Path, T).
expand_custom_headers(Headers) ->
lists:map(fun({K, V}) ->
{K, jlib:expand_keyword(<<"@VERSION@">>, V, ?VERSION)}
end, Headers).
%% hex_to_integer %% hex_to_integer
hex_to_integer(Hex) -> hex_to_integer(Hex) ->

View File

@ -37,7 +37,7 @@
-export([tolower/1, term_to_base64/1, base64_to_term/1, -export([tolower/1, term_to_base64/1, base64_to_term/1,
decode_base64/1, encode_base64/1, ip_to_list/1, decode_base64/1, encode_base64/1, ip_to_list/1,
hex_to_bin/1, hex_to_base64/1, hex_to_bin/1, hex_to_base64/1, expand_keyword/3,
atom_to_binary/1, binary_to_atom/1, tuple_to_binary/1, atom_to_binary/1, binary_to_atom/1, tuple_to_binary/1,
l2i/1, i2l/1, i2l/2, expr_to_term/1, term_to_expr/1]). l2i/1, i2l/1, i2l/2, expr_to_term/1, term_to_expr/1]).
@ -934,6 +934,12 @@ hex_to_bin([H1, H2 | T], Acc) ->
hex_to_base64(Hex) -> encode_base64(hex_to_bin(Hex)). hex_to_base64(Hex) -> encode_base64(hex_to_bin(Hex)).
-spec expand_keyword(binary(), binary(), binary()) -> binary().
expand_keyword(Keyword, Input, Replacement) ->
Parts = binary:split(Input, Keyword, [global]),
str:join(Parts, Replacement).
binary_to_atom(Bin) -> binary_to_atom(Bin) ->
erlang:binary_to_atom(Bin, utf8). erlang:binary_to_atom(Bin, utf8).

View File

@ -500,16 +500,14 @@ get_proc_name(ServerHost, ModuleName) ->
-spec expand_home(binary()) -> binary(). -spec expand_home(binary()) -> binary().
expand_home(Subject) -> expand_home(Input) ->
{ok, [[Home]]} = init:get_argument(home), {ok, [[Home]]} = init:get_argument(home),
Parts = binary:split(Subject, <<"@HOME@">>, [global]), jlib:expand_keyword(<<"@HOME@">>, Input, Home).
str:join(Parts, list_to_binary(Home)).
-spec expand_host(binary(), binary()) -> binary(). -spec expand_host(binary(), binary()) -> binary().
expand_host(Subject, Host) -> expand_host(Input, Host) ->
Parts = binary:split(Subject, <<"@HOST@">>, [global]), jlib:expand_keyword(<<"@HOST@">>, Input, Host).
str:join(Parts, Host).
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
%% Internal functions. %% Internal functions.