Skip to main content

lib/provider.ex

defmodule Amur.Provider do
  @moduledoc """
  Behaviour for defining custom OAuth providers.

  ## Example

      defmodule MyApp.Auth.Discord do
        use Amur.Provider

        def strategy, do: Assent.Strategy.OAuth2

        def base_config do
          [
            base_url: "https://discord.com/api",
            authorization_endpoint: "/oauth2/authorize",
            token_endpoint: "/oauth2/token",
            user_endpoint: "/users/@me"
          ]
        end

        def normalize_user(user) do
          %{uid: user["id"], email: user["email"], name: user["username"]}
        end
      end
  """

  @callback strategy() :: module()
  @callback base_config() :: keyword()
  @callback normalize_user(map()) :: map()

  defmacro __using__(_) do
    quote do
      @behaviour Amur.Provider
    end
  end
end