Support @VERSION@ and @SEMVER@ in captcha_cmd option

This commit is contained in:
Badlop 2022-05-30 11:46:19 +02:00 committed by badlop
parent a80717ed0e
commit 8ea7690fc5
3 changed files with 26 additions and 3 deletions

View File

@ -110,7 +110,14 @@ opt_type(cache_missed) ->
opt_type(cache_size) ->
econf:pos_int(infinity);
opt_type(captcha_cmd) ->
econf:file();
econf:and_then(
econf:binary(),
fun(V) ->
V2 = misc:expand_keyword(<<"@SEMVER@">>, V,
ejabberd_option:version()),
misc:expand_keyword(<<"@VERSION">>, V2,
misc:semver_to_xxyy(ejabberd_option:version()))
end);
opt_type(captcha_host) ->
econf:binary();
opt_type(captcha_limit) ->

View File

@ -457,8 +457,14 @@ doc() ->
#{value => ?T("Path"),
desc =>
?T("Full path to a script that generates http://../basic/#captcha[CAPTCHA] images. "
"@VERSION@ is replaced with ejabberd version number in XX.YY format. "
"@SEMVER@ is replaced with ejabberd version number in semver format "
"when compiled with Elixir's mix, or XX.YY format otherwise. "
"There is no default value: when this option is not "
"set, CAPTCHA functionality is completely disabled.")}},
"set, CAPTCHA functionality is completely disabled."),
example =>
[{?T("When using the ejabberd installers or container image, the example captcha scripts can be used like this:"),
["captcha_cmd: /opt/ejabberd-@VERSION@/lib/ejabberd-@SEMVER@/priv/bin/captcha.sh"]}]}},
{captcha_limit,
#{value => "pos_integer() | infinity",
desc =>

View File

@ -43,7 +43,7 @@
get_my_ipv4_address/0, get_my_ipv6_address/0, parse_ip_mask/1,
crypto_hmac/3, crypto_hmac/4, uri_parse/1,
match_ip_mask/3, format_hosts_list/1, format_cycle/1, delete_dir/1,
logical_processors/0]).
semver_to_xxyy/1, logical_processors/0]).
%% Deprecated functions
-export([decode_base64/1, encode_base64/1]).
@ -621,6 +621,16 @@ delete_dir(Dir) ->
{error, Error}
end.
-spec semver_to_xxyy(binary()) -> binary().
semver_to_xxyy(<<Y1, Y2, $., M2, $., $0>>) ->
<<Y1, Y2, $., $0, M2>>;
semver_to_xxyy(<<Y1, Y2, $., M2, $., Patch/binary>>) ->
<<Y1, Y2, $., $0, M2, $., Patch/binary>>;
semver_to_xxyy(<<Y1, Y2, $., M1, M2, $., $0>>) ->
<<Y1, Y2, $., M1, M2>>;
semver_to_xxyy(Version) when is_binary(Version) ->
Version.
%%%===================================================================
%%% Internal functions
%%%===================================================================