diff options
Diffstat (limited to 'src')
| -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 688996adf..a82596c4f 100644 --- a/src/ejabberd_captcha.erl +++ b/src/ejabberd_captcha.erl @@ -625,13 +625,53 @@ get_prog_name() ->  %% @doc (Str::string()) -> string()  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() | 
