24
1
mirror of https://github.com/processone/ejabberd.git synced 2024-06-02 21:17:12 +02:00

If the port number isn't listener, then specify the protocol (EJAB-1418)

This commit is contained in:
Badlop 2011-03-03 11:35:47 +01:00
parent e0d14c3b8d
commit a1f20a5bc0
2 changed files with 15 additions and 12 deletions

View File

@ -1633,11 +1633,14 @@ The configurable options are:
\titem{\{captcha\_cmd, Path\}} \titem{\{captcha\_cmd, Path\}}
Full path to a script that generates the image. Full path to a script that generates the image.
The default value is an empty string: \term{""} The default value is an empty string: \term{""}
\titem{\{captcha\_host, HostPort\}} \titem{\{captcha\_host, ProtocolHostPort\}}
Host part of the URL sent to the user, Host part of the URL sent to the user,
and the port number where ejabberd listens for CAPTCHA requests. 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 URL sent to the user is formed by: \term{http://Host:Port/captcha/}
The default value is: the first hostname configured, and port 5280. The default value is: the first hostname configured, and port 5280.
If the port number you specify 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.
\end{description} \end{description}
Additionally, an \term{ejabberd\_http} listener must be enabled with the \term{captcha} option. Additionally, an \term{ejabberd\_http} listener must be enabled with the \term{captcha} option.
@ -1649,6 +1652,7 @@ Example configuration:
{captcha_cmd, "/lib/ejabberd/priv/bin/captcha.sh"}. {captcha_cmd, "/lib/ejabberd/priv/bin/captcha.sh"}.
{captcha_host, "example.org:5280"}. {captcha_host, "example.org:5280"}.
%% {captcha_host, "https://example.org:443"}.
{listen, {listen,
[ [

View File

@ -406,23 +406,21 @@ get_prog_name() ->
get_url(Str) -> get_url(Str) ->
CaptchaHost = ejabberd_config:get_local_option(captcha_host), CaptchaHost = ejabberd_config:get_local_option(captcha_host),
case CaptchaHost of case string:tokens(CaptchaHost, ":") of
Host when is_list(Host) -> [TransferProt, Host, PortString] ->
TransferProt = atom_to_list(get_transfer_protocol(CaptchaHost)), TransferProt ++ ":" ++ Host ++ ":" ++ PortString ++ "/captcha/" ++ Str;
TransferProt ++ "://" ++ Host ++ "/captcha/" ++ Str; [Host, PortString] ->
TransferProt = atom_to_list(get_transfer_protocol(PortString)),
TransferProt ++ "://" ++ Host ++ ":" ++ PortString ++ "/captcha/" ++ Str;
_ -> _ ->
"http://" ++ ?MYNAME ++ ":5280/captcha/" ++ Str "http://" ++ ?MYNAME ++ ":5280/captcha/" ++ Str
end. end.
get_transfer_protocol(CaptchaHost) -> get_transfer_protocol(PortString) ->
PortNumber = get_port_number_from_captcha_host_option(CaptchaHost), PortNumber = list_to_integer(PortString),
PortListeners = get_port_listeners(PortNumber), PortListeners = get_port_listeners(PortNumber),
get_captcha_transfer_protocol(PortListeners). get_captcha_transfer_protocol(PortListeners).
get_port_number_from_captcha_host_option(CaptchaHost) ->
[_Host, PortString] = string:tokens(CaptchaHost, ":"),
list_to_integer(PortString).
get_port_listeners(PortNumber) -> get_port_listeners(PortNumber) ->
AllListeners = ejabberd_config:get_local_option(listen), AllListeners = ejabberd_config:get_local_option(listen),
lists:filter( lists:filter(
@ -435,7 +433,8 @@ get_port_listeners(PortNumber) ->
get_captcha_transfer_protocol([]) -> get_captcha_transfer_protocol([]) ->
throw("The port number mentioned in captcha_host is not " throw("The port number mentioned in captcha_host is not "
"a ejabberd_http listener with 'captcha' option."); "a ejabberd_http listener with 'captcha' option. "
"Change the port number or specify http:// in that option.");
get_captcha_transfer_protocol([{{_Port, _Ip, tcp}, ejabberd_http, Opts} get_captcha_transfer_protocol([{{_Port, _Ip, tcp}, ejabberd_http, Opts}
| Listeners]) -> | Listeners]) ->
case lists:member(captcha, Opts) of case lists:member(captcha, Opts) of