Packages
indieweb
0.0.39
0.0.66
0.0.65
0.0.64
0.0.63
0.0.62
0.0.61
0.0.60
0.0.59
0.0.58
0.0.56
0.0.55
0.0.54
0.0.53
0.0.51
0.0.50
0.0.49
0.0.48
0.0.47
0.0.46
0.0.42
0.0.41
0.0.40
0.0.39
0.0.38
0.0.37
0.0.36
0.0.35
0.0.34
0.0.33
0.0.32
0.0.31
0.0.30
0.0.29
0.0.28
0.0.27
0.0.26
0.0.25
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.3
0.0.2
0.0.1
Collection of common IndieWeb utilites like authorship resolution, Webmention, post type discovery and IndieAuth.
Current section
Files
Jump to
Current section
Files
lib/indieweb/http.ex
defmodule IndieWeb.Http do
@moduledoc """
Provides a facade for handling HTTP actions.
"""
def timeout, do: 10_000
@doc "Obtains an implementation of a `IndieWeb.Http.Adapter` module."
@spec adapter() :: IndieWeb.HTTP.Adapter.t()
def adapter,
do:
Application.get_env(
:indieweb,
:http_adapter,
IndieWeb.Http.Adapters.HTTPotion
)
@doc "Sends a HTTP request to the URI `uri` with the provided options."
@spec request(binary(), atom(), keyword()) ::
{:ok, IndieWeb.Http.Response.t()} | {:error, IndieWeb.Http.Error.t()}
def request(uri, method \\ :get, opts \\ []) do
adapter().request(uri, method, opts)
end
for method <- ~w(get post options head put patch delete)a do
@doc """
Sends a #{String.upcase(Atom.to_string(method))} request to the specified URI.
See `request/3` for more information about making requests.
"""
def unquote(method)(uri, opts \\ []),
do: IndieWeb.Http.request(uri, unquote(method), opts)
end
def extract_link_header_values(headers) do
Map.take(headers, ["link", "Link"])
|> Map.values()
|> List.flatten()
|> Enum.map(fn header -> String.split(header, ",", trim: true) end)
|> List.flatten()
|> Enum.map(fn header ->
[rel, value] =
header
|> String.trim()
|> String.split(";")
|> Enum.reverse()
|> Enum.map(fn part -> String.trim(part) end)
rel_values =
rel
|> String.split("=")
|> List.last()
|> String.trim("\"")
|> String.split()
link_value =
value |> String.trim_leading("<") |> String.trim_trailing(">")
Enum.map(rel_values, fn rel_value -> {rel_value, link_value} end)
end)
|> List.flatten()
|> Enum.reduce(%{}, fn {key, val}, acc ->
Map.put(acc, key, Enum.sort(Map.get(acc, key, []) ++ [val]))
end)
end
def make_absolute_uri(path, _) when path in ["", nil], do: path
def make_absolute_uri(path, base_uri)
when path == base_uri and is_binary(path),
do: path
def make_absolute_uri(path, base_uri) when is_binary(path),
do: URI.merge(base_uri, path) |> URI.to_string()
end