lib/ueberauth/strategy/mastodon/api.ex

defmodule Ueberauth.Strategy.Mastodon.API do
  use Tesla
  plug(Tesla.Middleware.JSON)

  def app_create(base_url, params) do
    base_url
    |> build_url("/api/v1/apps")
    |> post(params)
  end

  def token_create(base_url, params) do
    base_url
    |> build_url("/oauth/token")
    |> post(params)
  end

  def account_verify_credentials(base_url, token) when is_binary(token) do
    headers = [{"Authorization", "Bearer #{token}"}]

    base_url
    |> build_url("/api/v1/accounts/verify_credentials")
    |> get(headers: headers)
  end

  def account_verify_credentials(base_url, %{"access_token" => token}) when is_binary(token) do
    account_verify_credentials(base_url, token)
  end

  def build_authorize_url(base_url, params) do
    base_url
    |> URI.parse()
    |> Map.merge(%{
      path: "/oauth/authorize",
      query: URI.encode_query(params)
    })
    |> URI.to_string()
  end

  defp build_url(base_url, endpoint) do
    URI.parse(base_url)
    |> URI.merge(endpoint)
    |> to_string()
  end
end