Packages

phoenix_kit

1.7.21
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_web plugs ensure_oauth_config.ex
Raw

lib/phoenix_kit_web/plugs/ensure_oauth_config.ex

defmodule PhoenixKitWeb.Plugs.EnsureOAuthConfig do
@moduledoc """
Plug that ensures OAuth credentials are loaded into Application env before OAuth requests.
This plug loads OAuth provider credentials from the database and configures
them in Application env so that `Ueberauth.run_request/4` and `Ueberauth.run_callback/4`
can access them at runtime.
## How It Works
1. Checks if Ueberauth configuration exists in Application env
2. If configuration is missing, loads credentials from database via `OAuthConfig.configure_providers()`
3. If loading fails, returns 503 Service Unavailable error
4. Otherwise, allows request to proceed
## Usage
Used in OAuth controller before dynamic Ueberauth calls:
plug PhoenixKitWeb.Plugs.EnsureOAuthConfig
# Then in controller actions:
# Ueberauth.run_request(conn, provider, provider_config)
# Ueberauth.run_callback(conn, provider, provider_config)
## Why This Is Needed
PhoenixKit stores OAuth credentials in the database. This plug ensures
credentials are loaded into Application env before Ueberauth strategy
modules attempt to read them.
"""
import Plug.Conn
require Logger
alias PhoenixKit.Config
def init(opts), do: opts
def call(conn, _opts) do
case ensure_oauth_config() do
:ok ->
conn
{:error, reason} ->
Logger.error("OAuth configuration unavailable: #{inspect(reason)}")
conn
|> put_resp_content_type("text/html")
|> send_resp(503, """
<html>
<head><title>Service Temporarily Unavailable</title></head>
<body>
<h1>OAuth Service Unavailable</h1>
<p>OAuth authentication is temporarily unavailable. Please try again later.</p>
<p>If this problem persists, please contact support.</p>
</body>
</html>
""")
|> halt()
end
end
defp ensure_oauth_config do
providers = Config.UeberAuth.get_providers()
case providers do
providers when is_map(providers) or is_list(providers) ->
# Configuration exists, all good
:ok
_ ->
# Configuration missing, try to load it
Logger.warning("Ueberauth :providers missing, attempting to load OAuth configuration")
load_oauth_config()
end
end
defp load_oauth_config do
if Code.ensure_loaded?(PhoenixKit.Users.OAuthConfig) do
try do
alias PhoenixKit.Users.OAuthConfig
OAuthConfig.configure_providers()
Logger.info("OAuth configuration loaded successfully via fallback plug")
:ok
rescue
error ->
Logger.error("Failed to load OAuth configuration: #{inspect(error)}")
{:error, :configuration_load_failed}
end
else
Logger.error("PhoenixKit.Users.OAuthConfig module not available")
{:error, :oauth_module_not_loaded}
end
end
end