Current section
Files
Jump to
Current section
Files
lib/tus_client/utils.ex
defmodule TusClient.Utils do
@moduledoc false
@doc false
def get_header(headers, header_name) do
headers
|> Enum.map(fn {header, value} ->
{String.downcase(header), value}
end)
|> get_header_impl(String.downcase(header_name))
end
@doc false
def add_version_hdr(headers) do
headers ++ [{"tus-resumable", "1.0.0"}]
end
@doc false
def add_tus_content_type(headers) do
headers ++ [{"content-type", "application/offset+octet-stream"}]
end
@doc false
def httpoison_opts(http_opts, tus_opts) do
ssl_opts = tus_opts |> Keyword.get(:ssl, [])
follow_redirect = tus_opts |> Keyword.get(:follow_redirect, false)
http_opts ++ [ssl: ssl_opts] ++ [follow_redirect: follow_redirect]
end
@doc false
def maybe_follow_redirect(
{:ok, %HTTPoison.MaybeRedirect{redirect_url: new_loc}},
_parse_fn,
rereq_fn
)
when is_binary(new_loc) do
rereq_fn.(new_loc)
end
# TODO remove this when https://github.com/edgurgel/httpoison/issues/453 is fixed
def maybe_follow_redirect(
{:ok, %HTTPoison.MaybeRedirect{headers: headers}} = resp,
parse_fn,
rereq_fn
) do
case get_header(headers, "location") do
new_loc when is_binary(new_loc) -> rereq_fn.(new_loc)
nil -> parse_fn.(resp)
end
end
def maybe_follow_redirect(response, parse_fn, _rereq_fn) do
parse_fn.(response)
end
defp get_header_impl(headers, header_name) do
headers
|> Enum.filter(fn
{^header_name, _value} ->
true
_ ->
false
end)
|> Enum.at(0)
|> case do
{_hdr, value} -> value
_ -> nil
end
end
end