lib/ueberauth/strategy/mastodon/api.ex

defmodule Ueberauth.Strategy.Mastodon.API do
  def app_create(base_url, params) do
    conn = %MastodonClient.Conn{instance: base_url}
    MastodonClient.post(conn, "/api/v1/apps", params)
  end

  def token_create(base_url, params) do
    conn = %MastodonClient.Conn{instance: base_url}
    MastodonClient.post(conn, "/oauth/token", params)
  end

  def account_verify_credentials(base_url, token) when is_binary(token) do
    conn = %MastodonClient.Conn{instance: base_url, access_token: token}
    MastodonClient.get(conn, "/api/v1/accounts/verify_credentials")
  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
end