1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
# Pleroma: A lightweight social networking server
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.HTTP.Connection do
@moduledoc """
Configure Tesla.Client with default and customized adapter options.
"""
require Logger
@type ipv4_address :: {0..255, 0..255, 0..255, 0..255}
@type ipv6_address ::
{0..65_535, 0..65_535, 0..65_535, 0..65_535, 0..65_535, 0..65_535, 0..65_535, 0..65_535}
@type host() :: charlist() | ipv4_address() | ipv6_address()
@doc """
Merge default connection & adapter options with received options.
"""
@spec options(URI.t(), keyword()) :: keyword()
def options(%URI{} = uri, opts \\ []) do
adapter = Application.get_env(:tesla, :adapter)
[pool: :federation]
|> Keyword.merge(opts)
|> adapter_options(uri, adapter)
end
@spec format_host(String.t() | atom() | charlist()) :: host()
def format_host(host) when is_list(host), do: host
def format_host(host) when is_atom(host), do: to_charlist(host)
def format_host(host) when is_binary(host) do
host = to_charlist(host)
case :inet.parse_address(host) do
{:error, :einval} -> host
{:ok, ip} -> ip
end
end
defp adapter_options(opts, uri, Tesla.Adapter.Gun), do: Pleroma.HTTP.Gun.options(opts, uri)
defp adapter_options(opts, uri, Tesla.Adapter.Hackney),
do: Pleroma.HTTP.Hackney.options(opts, uri)
defp adapter_options(opts, _, _), do: Keyword.put(opts, :env, Pleroma.Config.get(:env))
end
|