return db key on update requests
[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 = load("config/config.exs")
7 env_config = load("config/#{Mix.env()}.exs")
8
9 Config.Reader.merge(config, env_config)
10 end
11
12 @spec load(Path.t()) :: keyword()
13 def load(path), do: Config.Reader.read!(path)
14 else
15 # support for Elixir less than 1.9
16 @spec load() :: map()
17 def load do
18 config = load("config/config.exs")
19 env_config = load("config/#{Mix.env()}.exs")
20
21 Mix.Config.merge(config, env_config)
22 end
23
24 @spec load(Path.t()) :: keyword()
25 def load(path) do
26 {config, _paths} = Mix.Config.eval!(path)
27 config
28 end
29 end
30 end
31
32 defmodule Pleroma.Config.Holder do
33 @config Pleroma.Config.Loader.load()
34
35 @spec config() :: keyword()
36 def config do
37 @config
38 |> Keyword.keys()
39 |> Enum.map(&filter(&1, config(&1)))
40 |> List.flatten()
41 end
42
43 @spec config(atom()) :: any()
44 def config(group), do: @config[group]
45
46 @spec config(atom(), atom()) :: any()
47 def config(group, key), do: @config[group][key]
48
49 defp filter(group, settings) when group not in [:swarm] do
50 filtered =
51 Enum.reject(settings, fn {k, _v} ->
52 k in [Pleroma.Repo, Pleroma.Web.Endpoint, :env, :configurable_from_database] or
53 (group == :phoenix and k == :serve_endpoints)
54 end)
55
56 {group, filtered}
57 end
58
59 defp filter(_, _), do: []
60 end