c8badc52cf4ccfd1546fa7412c4a5d9bd1b020e7
[akkoma] / lib / pleroma / config / holder.ex
1 defmodule Pleroma.Config.Loader do
2 # TODO: add support for releases
3 if Code.ensure_loaded?(Config.Reader) do
4 @spec load() :: map()
5 def load do
6 config = Config.Reader.read!("config/config.exs")
7 env_config = Config.Reader.read!("config/#{Mix.env()}.exs")
8
9 Config.Reader.merge(config, env_config)
10 end
11 else
12 # support for Elixir less than 1.9
13 @spec load() :: map()
14 def load do
15 {config, _paths} = Mix.Config.eval!("config/config.exs")
16 {env_config, _paths} = Mix.Config.eval!("config/#{Mix.env()}.exs")
17
18 Mix.Config.merge(config, env_config)
19 end
20 end
21 end
22
23 defmodule Pleroma.Config.Holder do
24 @config Pleroma.Config.Loader.load()
25
26 @spec config() :: keyword()
27 def config do
28 @config
29 |> Keyword.keys()
30 |> Enum.map(&filter(&1, config(&1)))
31 |> List.flatten()
32 end
33
34 @spec config(atom()) :: any()
35 def config(group), do: @config[group]
36
37 @spec config(atom(), atom()) :: any()
38 def config(group, key), do: @config[group][key]
39
40 defp filter(group, settings) when group not in [:swarm] do
41 filtered =
42 Enum.reject(settings, fn {k, _v} ->
43 k in [Pleroma.Repo, Pleroma.Web.Endpoint, :env, :configurable_from_database] or
44 (group == :phoenix and k == :serve_endpoints)
45 end)
46
47 {group, filtered}
48 end
49
50 defp filter(_, _), do: []
51 end