Packages

phoenix_kit

1.6.11
1.7.210 1.7.209 1.7.208 1.7.207 1.7.206 1.7.205 1.7.204 1.7.203 1.7.202 1.7.201 1.7.200 1.7.199 1.7.198 1.7.197 1.7.196 1.7.194 1.7.193 1.7.192 1.7.191 1.7.190 1.7.189 1.7.187 1.7.186 1.7.185 1.7.184 1.7.183 1.7.182 1.7.181 1.7.180 1.7.179 1.7.178 1.7.177 1.7.176 1.7.175 1.7.174 1.7.173 1.7.172 1.7.171 1.7.170 1.7.169 1.7.168 1.7.167 1.7.166 1.7.165 1.7.164 1.7.162 1.7.161 1.7.160 1.7.159 1.7.157 1.7.156 1.7.155 1.7.154 1.7.153 1.7.152 1.7.151 1.7.150 1.7.149 1.7.146 1.7.145 1.7.144 1.7.143 1.7.138 1.7.133 1.7.132 1.7.131 1.7.130 1.7.128 1.7.126 1.7.125 1.7.121 1.7.120 1.7.119 1.7.118 1.7.117 1.7.116 1.7.115 1.7.114 1.7.113 1.7.112 1.7.111 1.7.110 1.7.109 1.7.108 1.7.107 1.7.106 1.7.105 1.7.104 1.7.103 1.7.102 1.7.101 1.7.100 1.7.99 1.7.98 1.7.97 1.7.96 1.7.95 1.7.94 1.7.93 1.7.92 1.7.91 1.7.90 1.7.89 1.7.88 1.7.87 1.7.86 1.7.85 1.7.84 1.7.83 1.7.82 1.7.81 1.7.80 1.7.79 1.7.78 1.7.77 1.7.76 1.7.75 1.7.74 1.7.71 1.7.70 1.7.69 1.7.66 1.7.65 1.7.64 1.7.63 1.7.62 1.7.61 1.7.59 1.7.58 1.7.57 1.7.56 1.7.55 1.7.54 1.7.53 1.7.52 1.7.51 1.7.49 1.7.44 1.7.43 1.7.42 1.7.41 1.7.39 1.7.38 1.7.37 1.7.36 1.7.34 1.7.33 1.7.31 1.7.30 1.7.29 1.7.28 1.7.27 1.7.26 1.7.25 1.7.24 1.7.23 1.7.22 1.7.21 1.7.20 1.7.19 1.7.18 1.7.17 1.7.16 1.7.15 1.7.14 1.7.13 1.7.12 1.7.11 1.7.10 1.7.9 1.7.8 1.7.7 1.7.6 1.7.5 1.7.4 1.7.3 1.7.2 1.7.1 1.7.0 1.6.20 1.6.19 1.6.18 1.6.17 1.6.16 1.6.15 1.6.14 1.6.13 1.6.12 1.6.11 1.6.10 1.6.9 1.6.8 1.6.7 1.6.6 1.6.5 1.6.4 1.6.3 1.5.2 1.5.1 1.5.0 1.4.9 1.4.8 1.4.7 1.4.6 1.4.5 1.4.4 1.4.3 1.4.2 1.4.1 1.4.0 1.3.2 1.3.1 1.3.0 1.2.10 1.2.9 1.2.8 1.2.7 1.2.5 1.2.4 1.2.2 1.2.1 1.2.0 1.1.0 1.0.0

A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more

Current section

Files

Jump to
phoenix_kit lib phoenix_kit install oauth_config.ex
Raw

lib/phoenix_kit/install/oauth_config.ex

defmodule PhoenixKit.Install.OAuthConfig do
@moduledoc """
Handles Ueberauth OAuth configuration for PhoenixKit installation.
This module ensures proper Ueberauth compile-time configuration is set up
during PhoenixKit installation. The key requirement is:
- **Compile-time**: Empty map `providers: %{}` (not empty list `[]`)
- **Runtime**: Providers loaded dynamically from database via `PhoenixKit.Workers.OAuthConfigLoader`
## Why Empty Map vs Empty List?
Ueberauth expects `providers` to be a map-like structure. Using an empty list `[]`
causes runtime errors when Ueberauth tries to access provider configuration.
### Incorrect (causes errors):
```elixir
config :ueberauth, Ueberauth, providers: [] # ❌ Empty list
```
### Correct:
```elixir
config :ueberauth, Ueberauth, providers: %{} # ✅ Empty map
```
## Runtime Configuration
PhoenixKit uses runtime configuration through:
- `PhoenixKit.Workers.OAuthConfigLoader` - Loads providers from database at startup
- `PhoenixKit.Users.OAuthConfig.configure_providers()` - Updates Application config
- `PhoenixKitWeb.Plugs.EnsureOAuthConfig` - Fallback protection for race conditions
The compile-time configuration serves as a foundation that runtime configuration builds upon.
"""
use PhoenixKit.Install.IgniterCompat
@doc """
Adds minimal Ueberauth configuration required for PhoenixKit OAuth functionality.
This function adds compile-time configuration with an empty providers map.
Runtime configuration will populate providers from the database.
## Parameters
- `igniter` - The igniter context
## Returns
Updated igniter with Ueberauth configuration and informational notice.
## Example
```elixir
igniter
|> OAuthConfig.add_oauth_configuration()
```
"""
def add_oauth_configuration(igniter) do
igniter
|> add_ueberauth_config()
|> add_oauth_configuration_notice()
end
# Add minimal Ueberauth configuration with empty providers map
defp add_ueberauth_config(igniter) do
# Add compile-time Ueberauth config with empty map (not empty list!)
# Runtime configuration (OAuthConfigLoader) will populate providers from database
ueberauth_config = """
# Configure Ueberauth (minimal configuration for compilation)
# Applications using PhoenixKit should configure their own providers
config :ueberauth, Ueberauth, providers: %{}
"""
try do
Igniter.update_file(igniter, "config/config.exs", fn source ->
current_content = Rewrite.Source.get(source, :content)
# Check if already configured
if String.contains?(current_content, "config :ueberauth, Ueberauth") do
source
else
# Append to end of file
updated_content = current_content <> ueberauth_config
Rewrite.Source.update(source, :content, updated_content)
end
end)
rescue
_ ->
# If update fails, return igniter as-is (better than failing install)
igniter
end
end
# Add informational notice about OAuth configuration
defp add_oauth_configuration_notice(igniter) do
notice = """
🔐 OAuth configured (providers loaded at runtime from database)
"""
Igniter.add_notice(igniter, String.trim(notice))
end
end