diff options
Diffstat (limited to 'lib/pleroma/config/loader.ex')
-rw-r--r-- | lib/pleroma/config/loader.ex | 70 |
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 |