diff options
author | Badlop <badlop@process-one.net> | 2011-02-14 12:58:33 +0100 |
---|---|---|
committer | Badlop <badlop@process-one.net> | 2011-02-14 13:11:21 +0100 |
commit | f91eb52890bec51c53e529dd972d57c61259e437 (patch) | |
tree | a76265485a5d649dbaff32fb5411ee0b0b35c2eb /src/ejabberd_captcha.erl | |
parent | Fix typo in French translation (diff) |
Provide HTTPS URL in CAPTCHA form when listener has 'tls' option (EJAB-1406)
Diffstat (limited to 'src/ejabberd_captcha.erl')
-rw-r--r-- | src/ejabberd_captcha.erl | 46 |
1 files changed, 43 insertions, 3 deletions
diff --git a/src/ejabberd_captcha.erl b/src/ejabberd_captcha.erl index cd6a1b89..a589ef38 100644 --- a/src/ejabberd_captcha.erl +++ b/src/ejabberd_captcha.erl @@ -405,13 +405,53 @@ get_prog_name() -> end. get_url(Str) -> - case ejabberd_config:get_local_option(captcha_host) of + CaptchaHost = ejabberd_config:get_local_option(captcha_host), + TransferProt = atom_to_list(get_transfer_protocol(CaptchaHost)), + case CaptchaHost of Host when is_list(Host) -> - "http://" ++ Host ++ "/captcha/" ++ Str; + TransferProt ++ "://" ++ Host ++ "/captcha/" ++ Str; _ -> - "http://" ++ ?MYNAME ++ "/captcha/" ++ Str + TransferProt ++ "://" ++ ?MYNAME ++ "/captcha/" ++ Str end. +get_transfer_protocol(CaptchaHost) -> + PortNumber = get_port_number_from_captcha_host_option(CaptchaHost), + PortListeners = get_port_listeners(PortNumber), + 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) -> + AllListeners = ejabberd_config:get_local_option(listen), + lists:filter( + fun({{Port, _Ip, _Netp}, _Module1, _Opts1}) when Port == PortNumber -> + true; + (_) -> + false + end, + AllListeners). + +get_captcha_transfer_protocol([]) -> + throw("The port number mentioned in captcha_host is not " + "a ejabberd_http listener with 'captcha' option."); +get_captcha_transfer_protocol([{{_Port, _Ip, tcp}, ejabberd_http, Opts} + | Listeners]) -> + case lists:member(captcha, Opts) of + true -> + case lists:member(tls, Opts) of + true -> + https; + false -> + http + end; + false -> + get_captcha_transfer_protocol(Listeners) + end; +get_captcha_transfer_protocol([_ | Listeners]) -> + get_captcha_transfer_protocol(Listeners). + %%-------------------------------------------------------------------- %% Function: cmd(Cmd) -> Data | {error, Reason} %% Cmd = string() |