From 191fc1b4e87665df769ddac22335ac246b8d6f63 Mon Sep 17 00:00:00 2001 From: Holger Weiss Date: Mon, 27 Mar 2017 23:52:49 +0200 Subject: [PATCH] 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. --- src/ejabberd_http.erl | 7 ++++++- src/jlib.erl | 8 +++++++- src/mod_http_upload.erl | 10 ++++------ 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/ejabberd_http.erl b/src/ejabberd_http.erl index 4c5dd8ebe..c3f962fbc 100644 --- a/src/ejabberd_http.erl +++ b/src/ejabberd_http.erl @@ -169,7 +169,7 @@ init({SockMod, Socket}, Opts) -> {ok, RE} = re:compile(<<"^(?:\\[(.*?)\\]|(.*?))(?::(\\d+))?$">>), 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}]), @@ -733,6 +733,11 @@ rest_dir(0, Path, <>) -> rest_dir(0, <>, 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) -> diff --git a/src/jlib.erl b/src/jlib.erl index 12bedbc7e..3b6a6556a 100644 --- a/src/jlib.erl +++ b/src/jlib.erl @@ -37,7 +37,7 @@ -export([tolower/1, term_to_base64/1, base64_to_term/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, 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)). +-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) -> erlang:binary_to_atom(Bin, utf8). diff --git a/src/mod_http_upload.erl b/src/mod_http_upload.erl index 59570b0b5..31494c2e1 100644 --- a/src/mod_http_upload.erl +++ b/src/mod_http_upload.erl @@ -500,16 +500,14 @@ get_proc_name(ServerHost, ModuleName) -> -spec expand_home(binary()) -> binary(). -expand_home(Subject) -> +expand_home(Input) -> {ok, [[Home]]} = init:get_argument(home), - Parts = binary:split(Subject, <<"@HOME@">>, [global]), - str:join(Parts, list_to_binary(Home)). + jlib:expand_keyword(<<"@HOME@">>, Input, Home). -spec expand_host(binary(), binary()) -> binary(). -expand_host(Subject, Host) -> - Parts = binary:split(Subject, <<"@HOST@">>, [global]), - str:join(Parts, Host). +expand_host(Input, Host) -> + jlib:expand_keyword(<<"@HOST@">>, Input, Host). %%-------------------------------------------------------------------- %% Internal functions.