Packages
phoenix_kit
1.7.115
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
Current section
Files
lib/phoenix_kit/config/endpoint_url_sync.ex
defmodule PhoenixKit.Config.EndpointUrlSync do
@moduledoc """
Syncs the `site_url` from PhoenixKit settings to the parent Phoenix Endpoint's
`:url` configuration.
This ensures `Endpoint.url()` returns the correct public URL, which is critical
for OAuth callback URLs generated by Ueberauth.
Opt-in via `config :phoenix_kit, sync_site_url_to_endpoint: true`.
"""
require Logger
alias PhoenixKit.Config
alias PhoenixKit.Settings
@doc """
Syncs `site_url` from settings to the parent Endpoint's `:url` config.
No-op when `sync_site_url_to_endpoint` is `false` (the default),
when `site_url` is empty, or when the parent endpoint cannot be resolved.
"""
@spec sync() :: :ok
def sync do
unless Config.get_boolean(:sync_site_url_to_endpoint, false) do
throw(:disabled)
end
site_url = Settings.get_setting_cached("site_url", "")
if site_url == "" do
Logger.debug("EndpointUrlSync: site_url is empty, skipping")
throw(:empty)
end
uri = URI.parse(site_url)
unless uri.scheme in ["http", "https"] and is_binary(uri.host) and uri.host != "" do
Logger.warning("EndpointUrlSync: invalid site_url #{inspect(site_url)}, skipping")
throw(:invalid)
end
case {Config.get_parent_app(), Config.get_parent_endpoint()} do
{app, {:ok, endpoint}} when not is_nil(app) ->
url_config = build_url_config(uri)
current = Application.get_env(app, endpoint, [])
updated = Keyword.put(current, :url, url_config)
Application.put_env(app, endpoint, updated)
Logger.info("EndpointUrlSync: set Endpoint URL to #{site_url}")
_ ->
Logger.warning("EndpointUrlSync: could not resolve parent endpoint, skipping")
end
:ok
catch
:throw, reason when reason in [:disabled, :empty, :invalid] -> :ok
end
defp build_url_config(uri) do
config = [scheme: uri.scheme, host: uri.host]
case {uri.scheme, uri.port} do
{"http", port} when is_integer(port) and port != 80 -> config ++ [port: port]
{"https", port} when is_integer(port) and port != 443 -> config ++ [port: port]
_ -> config
end
end
end