From a2d60a1977a0e714a3fb8a76fd4ec608b5bd5c13 Mon Sep 17 00:00:00 2001 From: Badlop Date: Mon, 11 Apr 2011 19:58:25 +0200 Subject: [PATCH] Support more captcha_host value formats (EJAB-1418) --- doc/guide.tex | 13 +++++++------ src/ejabberd_captcha.erl | 10 +++++++--- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/doc/guide.tex b/doc/guide.tex index c4967aac8..97796eef0 100644 --- a/doc/guide.tex +++ b/doc/guide.tex @@ -1710,13 +1710,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. @@ -1729,6 +1729,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 0c939b58f..1f0e55ff5 100644 --- a/src/ejabberd_captcha.erl +++ b/src/ejabberd_captcha.erl @@ -627,13 +627,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) ->