57 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
| # Pleroma: A lightweight social networking server
 | |
| # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
 | |
| # SPDX-License-Identifier: AGPL-3.0-only
 | |
| 
 | |
| defmodule Pleroma.Config.Loader do
 | |
|   @reject_keys [
 | |
|     Pleroma.Repo,
 | |
|     Pleroma.Web.Endpoint,
 | |
|     :env,
 | |
|     :configurable_from_database,
 | |
|     :database,
 | |
|     :swarm
 | |
|   ]
 | |
| 
 | |
|   if Code.ensure_loaded?(Config.Reader) do
 | |
|     @spec load(Path.t()) :: keyword()
 | |
|     def load(path), do: Config.Reader.read!(path)
 | |
| 
 | |
|     defp do_merge(conf1, conf2), do: Config.Reader.merge(conf1, conf2)
 | |
|   else
 | |
|     # support for Elixir less than 1.9
 | |
|     @spec load(Path.t()) :: keyword()
 | |
|     def load(path) do
 | |
|       path
 | |
|       |> Mix.Config.eval!()
 | |
|       |> elem(0)
 | |
|     end
 | |
| 
 | |
|     defp do_merge(conf1, conf2), do: Mix.Config.merge(conf1, conf2)
 | |
|   end
 | |
| 
 | |
|   @spec load_and_merge() :: keyword()
 | |
|   def load_and_merge do
 | |
|     all_paths =
 | |
|       if Pleroma.Config.get(:release),
 | |
|         do: ["config/config.exs", "config/releases.exs"],
 | |
|         else: ["config/config.exs"]
 | |
| 
 | |
|     all_paths
 | |
|     |> Enum.map(&load(&1))
 | |
|     |> Enum.reduce([], &do_merge(&2, &1))
 | |
|     |> filter()
 | |
|   end
 | |
| 
 | |
|   defp filter(configs) do
 | |
|     configs
 | |
|     |> Keyword.keys()
 | |
|     |> Enum.reduce([], &Keyword.put(&2, &1, filter_group(&1, configs)))
 | |
|   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 == :phoenix and key == :serve_endpoints)
 | |
|     end)
 | |
|   end
 | |
| end
 | 
