summaryrefslogtreecommitdiff
path: root/src/rebar_utils.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/rebar_utils.erl')
-rw-r--r--src/rebar_utils.erl24
1 files changed, 21 insertions, 3 deletions
diff --git a/src/rebar_utils.erl b/src/rebar_utils.erl
index d92f119..c357e94 100644
--- a/src/rebar_utils.erl
+++ b/src/rebar_utils.erl
@@ -70,7 +70,9 @@
info_useless/2,
list_dir/1,
user_agent/0,
- reread_config/1]).
+ reread_config/1,
+ get_proxy_auth/0]).
+
%% for internal use only
-export([otp_release/0]).
@@ -838,8 +840,9 @@ set_httpc_options(_, []) ->
ok;
set_httpc_options(Scheme, Proxy) ->
- {ok, {_, _, Host, Port, _, _}} = http_uri:parse(Proxy),
- httpc:set_options([{Scheme, {{Host, Port}, []}}], rebar).
+ {ok, {_, UserInfo, Host, Port, _, _}} = http_uri:parse(Proxy),
+ httpc:set_options([{Scheme, {{Host, Port}, []}}], rebar),
+ set_proxy_auth(UserInfo).
url_append_path(Url, ExtraPath) ->
case http_uri:parse(Url) of
@@ -878,3 +881,18 @@ list_dir(Dir) ->
true -> file:list_dir_all(Dir);
false -> file:list_dir(Dir)
end.
+
+set_proxy_auth([]) ->
+ ok;
+set_proxy_auth(UserInfo) ->
+ Idx = string:chr(UserInfo, $:),
+ Username = string:sub_string(UserInfo, 1, Idx-1),
+ Password = string:sub_string(UserInfo, Idx+1),
+ %% password may contain url encoded characters, need to decode them first
+ application:set_env(rebar, proxy_auth, [{proxy_auth, {Username, http_uri:decode(Password)}}]).
+
+get_proxy_auth() ->
+ case application:get_env(rebar, proxy_auth) of
+ undefined -> [];
+ {ok, ProxyAuth} -> ProxyAuth
+ end.