Packages
nerves
1.6.1
1.15.0
1.14.3
1.14.2
1.14.1
1.14.0
1.13.2
1.13.1
1.13.0
1.12.0
1.11.3
1.11.2
1.11.1
1.11.0
1.10.5
1.10.4
1.10.3
1.10.2
1.10.1
1.10.0
1.9.3
1.9.2
retired
1.9.1
1.9.0
1.8.0
1.7.17
1.7.16
1.7.15
1.7.14
retired
1.7.13
1.7.12
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
retired
1.7.1
retired
1.7.0
retired
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.1
1.2.0
1.1.1
1.1.0
1.0.1
1.0.0
1.0.0-rc.2
1.0.0-rc.1
1.0.0-rc.0
0.11.0
0.10.1
0.10.0
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.3
0.8.2
0.8.1
0.8.0
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.4.0-rc.0
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.0
Craft and deploy bulletproof embedded software
Current section
Files
Jump to
Current section
Files
lib/nerves/utils/proxy.ex
defmodule Nerves.Utils.Proxy do
# Special thanks to Hex.
def config(url) do
{http_proxy, https_proxy} = setup()
auth(URI.parse(url), http_proxy, https_proxy)
end
defp setup do
http_proxy = (proxy = System.get_env("HTTP_PROXY")) && set(:http, proxy)
https_proxy = (proxy = System.get_env("HTTPS_PROXY")) && set(:https, proxy)
{http_proxy, https_proxy}
end
defp set(scheme, proxy) do
uri = URI.parse(proxy)
if uri.host && uri.port do
host = String.to_charlist(uri.host)
:httpc.set_options([{scheme(scheme), {{host, uri.port}, []}}], :nerves)
end
uri
end
defp scheme(scheme) do
case scheme do
:http -> :proxy
:https -> :https_proxy
end
end
defp auth(%URI{scheme: "http"}, http_proxy, _https_proxy), do: auth(http_proxy)
defp auth(%URI{scheme: "https"}, _http_proxy, https_proxy), do: auth(https_proxy)
defp auth(nil), do: []
defp auth(%URI{userinfo: nil}), do: []
defp auth(%URI{userinfo: auth}) do
destructure [user, pass], String.split(auth, ":", parts: 2)
user = String.to_charlist(user)
pass = String.to_charlist(pass || "")
[proxy_auth: {user, pass}]
end
end