Current section
Files
Jump to
Current section
Files
lib/http/client_base.ex
defmodule PINXS.HTTP.ClientBase do
@moduledoc false
use HTTPoison.Base
def pin_url(path, %PINXS{url: base_url}) do
base_url <> path
end
def authenticated_delete(url, config) do
delete(pin_url(url, config), transform_config(config), []) |> normalize()
end
def authenticated_get(url, config) do
get(pin_url(url, config), transform_config(config), []) |> normalize()
end
def authenticated_post(url, params, config) do
post(pin_url(url, config), params, transform_config(config)) |> normalize()
end
def authenticated_put(url, params, config) do
put(pin_url(url, config), params, transform_config(config)) |> normalize()
end
def authenticated_search(url, body, config) do
request(:get, pin_url(url, config), body, transform_config(config)) |> normalize()
end
def process_request_headers(headers) when is_list(headers), do: headers
def process_request_headers(_), do: raise("Api Key not provided")
def process_response_body(""), do: ""
def process_response_body(body), do: Poison.decode!(body, keys: :atoms)
def process_request_body(body), do: Poison.encode!(body)
defp transform_config(%PINXS{api_key: api_key}) do
encoded = Base.encode64(api_key)
[{"Authorization", "Basic #{encoded}"}, {"Content-Type", "application/json"}]
|> process_request_headers
end
def normalize({:ok, %{status_code: status_code} = response}) when status_code in 200..299,
do: {:ok, response}
def normalize({:ok, response}), do: {:error, response}
def normalize(any), do: any
end