diff --git a/doc/guide.tex b/doc/guide.tex index dee622da2..5c157aa37 100644 --- a/doc/guide.tex +++ b/doc/guide.tex @@ -1634,13 +1634,13 @@ The configurable options are: Full path to a script that generates the image. The default value is an empty string: \term{""} \titem{\{captcha\_host, ProtocolHostPort\}} - Host part of the URL sent to the user, - and the port number where ejabberd listens for CAPTCHA requests. - The URL sent to the user is formed by: \term{http://Host:Port/captcha/} - The default value is: the first hostname configured, and port 5280. - If the port number you specify does not match exactly an ejabberd listener + ProtocolHostPort is a string with the host, and optionally the Protocol and Port number. + It must identify where ejabberd listens for CAPTCHA requests. + The URL sent to the user is formed by: \term{Protocol://Host:Port/captcha/} + The default value is: protocol \term{http}, the first hostname configured, and port \term{80}. + If you specify a port number that does not match exactly an ejabberd listener (because you are using a reverse proxy or other port-forwarding tool), - then specify also the transfer protocol, as seen in the example below. + then you must specify the transfer protocol, as seen in the example below. \end{description} Additionally, an \term{ejabberd\_http} listener must be enabled with the \term{captcha} option. @@ -1653,6 +1653,7 @@ Example configuration: {captcha_cmd, "/lib/ejabberd/priv/bin/captcha.sh"}. {captcha_host, "example.org:5280"}. %% {captcha_host, "https://example.org:443"}. +%% {captcha_host, "http://example.com"}. {listen, [ diff --git a/src/ejabberd_captcha.erl b/src/ejabberd_captcha.erl index 797a6152d..91e14c735 100644 --- a/src/ejabberd_captcha.erl +++ b/src/ejabberd_captcha.erl @@ -407,13 +407,17 @@ get_prog_name() -> get_url(Str) -> CaptchaHost = ejabberd_config:get_local_option(captcha_host), case string:tokens(CaptchaHost, ":") of - [TransferProt, Host, PortString] -> - TransferProt ++ ":" ++ Host ++ ":" ++ PortString ++ "/captcha/" ++ Str; + [Host] -> + "http://" ++ Host ++ "/captcha/" ++ Str; + ["http"++_ = TransferProt, Host] -> + TransferProt ++ ":" ++ Host ++ "/captcha/" ++ Str; [Host, PortString] -> TransferProt = atom_to_list(get_transfer_protocol(PortString)), TransferProt ++ "://" ++ Host ++ ":" ++ PortString ++ "/captcha/" ++ Str; + [TransferProt, Host, PortString] -> + TransferProt ++ ":" ++ Host ++ ":" ++ PortString ++ "/captcha/" ++ Str; _ -> - "http://" ++ ?MYNAME ++ ":5280/captcha/" ++ Str + "http://" ++ ?MYNAME ++ "/captcha/" ++ Str end. get_transfer_protocol(PortString) ->