aboutsummaryrefslogtreecommitdiff
path: root/lib/pleroma/config/loader.ex
diff options
context:
space:
mode:
Diffstat (limited to 'lib/pleroma/config/loader.ex')
-rw-r--r--lib/pleroma/config/loader.ex70
1 files changed, 43 insertions, 27 deletions
diff --git a/lib/pleroma/config/loader.ex b/lib/pleroma/config/loader.ex
index b64d06707..69fd458c0 100644
--- a/lib/pleroma/config/loader.ex
+++ b/lib/pleroma/config/loader.ex
@@ -3,57 +3,73 @@
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Config.Loader do
+ @reject_groups [
+ :postgrex,
+ :tesla,
+ :phoenix,
+ :tzdata,
+ :http_signatures,
+ :web_push_encryption,
+ :floki,
+ :pbkdf2_elixir
+ ]
+
@reject_keys [
Pleroma.Repo,
Pleroma.Web.Endpoint,
:env,
:configurable_from_database,
:database,
- :swarm
- ]
-
- @reject_groups [
- :postgrex,
- :tesla
+ :ecto_repos,
+ Pleroma.Gun,
+ Pleroma.ReverseProxy.Client,
+ Pleroma.Web.Auth.Authenticator
]
if Code.ensure_loaded?(Config.Reader) do
@reader Config.Reader
-
- def read(path), do: @reader.read!(path)
+ @config_header "import Config\r\n\r\n"
else
# support for Elixir less than 1.9
@reader Mix.Config
- def read(path) do
- path
- |> @reader.eval!()
- |> elem(0)
- end
+ @config_header "use Mix.Config\r\n\r\n"
end
- @spec read(Path.t()) :: keyword()
+ @spec read!(Path.t()) :: keyword()
+ def read!(path), do: @reader.read!(path)
@spec merge(keyword(), keyword()) :: keyword()
def merge(c1, c2), do: @reader.merge(c1, c2)
+ @spec config_header() :: String.t()
+ def config_header, do: @config_header
+
@spec default_config() :: keyword()
def default_config do
- "config/config.exs"
- |> read()
- |> filter()
- end
+ config =
+ "config/config.exs"
+ |> read!()
+ |> filter()
+
+ logger_config =
+ :logger
+ |> Application.get_all_env()
+ |> Enum.filter(fn {key, _} -> key in [:backends, :console, :ex_syslogger] end)
- defp filter(configs) do
- configs
- |> Keyword.keys()
- |> Enum.reduce([], &Keyword.put(&2, &1, filter_group(&1, configs)))
+ merge(config, logger: logger_config)
end
- @spec filter_group(atom(), keyword()) :: keyword()
- def filter_group(group, configs) do
- Enum.reject(configs[group], fn {key, _v} ->
- key in @reject_keys or group in @reject_groups or
- (group == :phoenix and key == :serve_endpoints)
+ @spec filter(keyword()) :: keyword()
+ def filter(configs) do
+ Enum.reduce(configs, [], fn
+ {group, _settings}, group_acc when group in @reject_groups ->
+ group_acc
+
+ {group, settings}, group_acc ->
+ Enum.reduce(settings, group_acc, fn
+ {key, _value}, acc when key in @reject_keys -> acc
+ setting, acc -> Keyword.update(acc, group, [setting], &Keyword.merge(&1, [setting]))
+ end)
end)
end
end