Current section
Files
Jump to
Current section
Files
lib/key_cdn/client.ex
defmodule KeyCDN.Client do
@moduledoc false
@api_endpoint "https://api.keycdn.com"
def new(api_key) do
middleware = [
{Tesla.Middleware.BaseUrl, @api_endpoint},
Tesla.Middleware.JSON,
{Tesla.Middleware.BasicAuth, username: api_key, password: ""}
]
Tesla.client(middleware)
end
def get(client, uri_path, query_params \\ %{}) do
client
|> perform_request(method: :get, url: uri_path, query: query_params)
|> process_response()
end
def post(client, uri_path, params) do
client
|> perform_request(method: :post, url: uri_path, body: params)
|> process_response()
end
def put(client, uri_path, params) do
client
|> perform_request(method: :put, url: uri_path, body: params)
|> process_response()
end
def delete(client, uri_path, params \\ %{}) do
client
|> perform_request(method: :delete, url: uri_path, body: params)
|> process_response()
end
defp perform_request(client, opts), do: Tesla.request(client, opts)
defp process_response({:ok, %Tesla.Env{status: status} = response})
when status >= 200 and status <= 299 do
{:ok, response.body}
end
defp process_response({:ok, %Tesla.Env{} = response}), do: {:error, response.body}
defp process_response({:error, _} = error), do: error
end