Packages
nerves
1.11.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
@moduledoc false
# Special thanks to Hex.
@spec config(String.t()) :: [proxy_auth: {charlist(), charlist()}]
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