42 lines
		
	
	
	
		
			1,007 B
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
	
		
			1,007 B
		
	
	
	
		
			Elixir
		
	
	
	
	
	
| defmodule Pleroma.Config.TransferTask do
 | |
|   use Task
 | |
|   alias Pleroma.Web.AdminAPI.Config
 | |
| 
 | |
|   def start_link do
 | |
|     load_and_update_env()
 | |
|     if Pleroma.Config.get(:env) == :test, do: Ecto.Adapters.SQL.Sandbox.checkin(Pleroma.Repo)
 | |
|     :ignore
 | |
|   end
 | |
| 
 | |
|   def load_and_update_env do
 | |
|     if Pleroma.Config.get([:instance, :dynamic_configuration]) and
 | |
|          Ecto.Adapters.SQL.table_exists?(Pleroma.Repo, "config") do
 | |
|       Pleroma.Repo.all(Config)
 | |
|       |> Enum.each(&update_env(&1))
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   defp update_env(setting) do
 | |
|     try do
 | |
|       key =
 | |
|         if String.starts_with?(setting.key, "Pleroma.") do
 | |
|           "Elixir." <> setting.key
 | |
|         else
 | |
|           setting.key
 | |
|         end
 | |
| 
 | |
|       Application.put_env(
 | |
|         :pleroma,
 | |
|         String.to_existing_atom(key),
 | |
|         Config.from_binary(setting.value)
 | |
|       )
 | |
|     rescue
 | |
|       e ->
 | |
|         require Logger
 | |
| 
 | |
|         Logger.warn(
 | |
|           "updating env causes error, key: #{inspect(setting.key)}, error: #{inspect(e)}"
 | |
|         )
 | |
|     end
 | |
|   end
 | |
| end
 | 
