# `PhoenixKit.Config.UeberAuth`
[🔗](https://github.com/BeamLabEU/phoenix_kit/blob/v1.7.87/lib/phoenix_kit/config/ueber_auth.ex#L1)

Ueberauth configuration management for PhoenixKit.

This module provides a centralized way to manage Ueberauth OAuth configuration
with type-safe getter and setter functions for different data types.

## Usage

    # Get all Ueberauth configuration
    config = PhoenixKit.Config.UeberAuth.get_all()

    # Get specific values
    providers = PhoenixKit.Config.UeberAuth.get_providers()
    base_path = PhoenixKit.Config.UeberAuth.get_base_path()

    # Set configuration
    PhoenixKit.Config.UeberAuth.set_providers(%{google: {Ueberauth.Strategy.Google, []}})
    PhoenixKit.Config.UeberAuth.set_base_path("/custom/auth")

## Configuration Keys

- `:base_path` - Base path for OAuth routes (default: calculated from URL prefix)
- `:providers` - Map of OAuth providers and their strategies

## Provider Management

Functions are provided for adding, removing, and checking individual providers:
- `update_provider/2` - Add or update a provider
- `remove_provider/1` - Remove a provider
- `has_provider?/1` - Check if a provider is configured
- `get_provider_names/0` - Get list of all provider names
- `get_provider/1` - Get specific provider configuration

# `get_all`

```elixir
@spec get_all() :: Keyword.t()
```

Gets the full Ueberauth configuration from the application environment.

This function retrieves the complete Ueberauth configuration including
providers, base path, and other Ueberauth-specific settings.

## Examples

    iex> PhoenixKit.Config.UeberAuth.get_all()
    [base_path: "/users/auth", providers: %{google: {Ueberauth.Strategy.Google, []}}]

    iex> PhoenixKit.Config.UeberAuth.get_all()
    []

# `get_base_path`

```elixir
@spec get_base_path() :: String.t()
```

Gets Ueberauth base path configuration.

Returns the configured base path for OAuth routes or a default based on URL prefix.

## Examples

    iex> PhoenixKit.Config.UeberAuth.get_base_path()
    "/users/auth"

    iex> PhoenixKit.Config.UeberAuth.get_base_path()
    "/phoenix_kit/users/auth"

# `get_option`

```elixir
@spec get_option(atom()) :: any() | nil
```

Gets specific Ueberauth configuration options by key.

## Examples

    iex> PhoenixKit.Config.UeberAuth.get_option(:providers)
    %{google: {Ueberauth.Strategy.Google, []}}

    iex> PhoenixKit.Config.UeberAuth.get_option(:base_path)
    "/users/auth"

    iex> PhoenixKit.Config.UeberAuth.get_option(:nonexistent)
    nil

# `get_option`

```elixir
@spec get_option(atom(), any()) :: any()
```

Gets specific Ueberauth configuration options by key with a default value.

## Examples

    iex> PhoenixKit.Config.UeberAuth.get_option(:base_path, "/auth")
    "/users/auth"

    iex> PhoenixKit.Config.UeberAuth.get_option(:nonexistent, "default")
    "default"

# `get_provider`

```elixir
@spec get_provider(atom()) :: tuple() | nil
```

Gets the Ueberauth provider configuration for a specific provider.

## Examples

    iex> PhoenixKit.Config.UeberAuth.get_provider(:google)
    {Ueberauth.Strategy.Google, []}

    iex> PhoenixKit.Config.UeberAuth.get_provider(:nonexistent)
    nil

# `get_provider_names`

```elixir
@spec get_provider_names() :: [atom()]
```

Gets a list of all configured Ueberauth provider names.

## Examples

    iex> PhoenixKit.Config.UeberAuth.get_provider_names()
    [:google, :apple, :github]

    iex> PhoenixKit.Config.UeberAuth.get_provider_names()
    []

# `get_providers`

```elixir
@spec get_providers() :: map() | list()
```

Gets Ueberauth providers configuration.

Returns the configured providers map or list, or an empty map if none configured.

## Examples

    iex> PhoenixKit.Config.UeberAuth.get_providers()
    %{google: {Ueberauth.Strategy.Google, []}, apple: {Ueberauth.Strategy.Apple, []}}

    iex> PhoenixKit.Config.UeberAuth.get_providers()
    %{}

# `has_provider?`

```elixir
@spec has_provider?(atom()) :: boolean()
```

Checks if a specific Ueberauth provider is configured.

## Examples

    iex> PhoenixKit.Config.UeberAuth.has_provider?(:google)
    true

    iex> PhoenixKit.Config.UeberAuth.has_provider?(:facebook)
    false

# `remove_provider`

```elixir
@spec remove_provider(atom()) :: :ok
```

Removes a specific Ueberauth provider from the configuration.

## Examples

    iex> PhoenixKit.Config.UeberAuth.remove_provider(:google)
    :ok

# `set_all`

```elixir
@spec set_all(Keyword.t()) :: :ok
```

Sets Ueberauth configuration options.

Updates the Ueberauth configuration in the application environment.

## Examples

    iex> PhoenixKit.Config.UeberAuth.set_all([providers: %{google: {Ueberauth.Strategy.Google, []}}])
    :ok

    iex> PhoenixKit.Config.UeberAuth.set_all([base_path: "/custom/auth"])
    :ok

# `set_base_path`

```elixir
@spec set_base_path(String.t()) :: :ok
```

Sets Ueberauth base path configuration.

Updates the base path for OAuth routes.

## Examples

    iex> PhoenixKit.Config.UeberAuth.set_base_path("/custom/auth")
    :ok

# `set_option`

```elixir
@spec set_option(atom(), any()) :: :ok
```

Sets specific Ueberauth configuration option.

Updates a single key in the Ueberauth configuration.

## Examples

    iex> PhoenixKit.Config.UeberAuth.set_option(:base_path, "/custom/auth")
    :ok

    iex> PhoenixKit.Config.UeberAuth.set_option(:providers, %{google: {Ueberauth.Strategy.Google, []}})
    :ok

# `set_provider_strategy_config`

```elixir
@spec set_provider_strategy_config(atom(), module(), Keyword.t()) :: :ok
```

Sets OAuth configuration for a specific provider strategy.

This configures the credentials (client_id, client_secret, etc.) for
individual OAuth provider strategies like Ueberauth.Strategy.Google.OAuth.

## Examples

    PhoenixKit.Config.UeberAuth.set_provider_strategy_config(
      :google,
      Ueberauth.Strategy.Google.OAuth,
      [client_id: "...", client_secret: "..."]
    )
    :ok

# `set_providers`

```elixir
@spec set_providers(map() | list()) :: :ok
```

Sets Ueberauth providers configuration.

Updates the providers map in Ueberauth configuration.

## Examples

    iex> PhoenixKit.Config.UeberAuth.set_providers(%{google: {Ueberauth.Strategy.Google, []}})
    :ok

# `update_provider`

```elixir
@spec update_provider(atom(), tuple()) :: :ok
```

Updates Ueberauth providers by adding or updating a specific provider.

Adds a new provider or updates an existing one in the providers configuration.

## Examples

    iex> PhoenixKit.Config.UeberAuth.update_provider(:google, {Ueberauth.Strategy.Google, []})
    :ok

---

*Consult [api-reference.md](api-reference.md) for complete listing*
