72 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
# Pleroma: A lightweight social networking server
 | 
						|
# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
 | 
						|
# SPDX-License-Identifier: AGPL-3.0-only
 | 
						|
 | 
						|
defmodule Mix.Tasks.Pleroma.Config do
 | 
						|
  use Mix.Task
 | 
						|
  import Mix.Pleroma
 | 
						|
  alias Pleroma.Repo
 | 
						|
  alias Pleroma.Web.AdminAPI.Config
 | 
						|
  @shortdoc "Manages the location of the config"
 | 
						|
  @moduledoc File.read!("docs/administration/CLI_tasks/config.md")
 | 
						|
  def run(["migrate_to_db"]) do
 | 
						|
    start_pleroma()
 | 
						|
 | 
						|
    if Pleroma.Config.get([:instance, :dynamic_configuration]) do
 | 
						|
      Application.get_all_env(:pleroma)
 | 
						|
      |> Enum.reject(fn {k, _v} -> k in [Pleroma.Repo, :env] end)
 | 
						|
      |> Enum.each(fn {k, v} ->
 | 
						|
        key = to_string(k) |> String.replace("Elixir.", "")
 | 
						|
 | 
						|
        key =
 | 
						|
          if String.starts_with?(key, "Pleroma.") do
 | 
						|
            key
 | 
						|
          else
 | 
						|
            ":" <> key
 | 
						|
          end
 | 
						|
 | 
						|
        {:ok, _} = Config.update_or_create(%{group: "pleroma", key: key, value: v})
 | 
						|
        Mix.shell().info("#{key} is migrated.")
 | 
						|
      end)
 | 
						|
 | 
						|
      Mix.shell().info("Settings migrated.")
 | 
						|
    else
 | 
						|
      Mix.shell().info(
 | 
						|
        "Migration is not allowed by config. You can change this behavior in instance settings."
 | 
						|
      )
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def run(["migrate_from_db", env, delete?]) do
 | 
						|
    start_pleroma()
 | 
						|
 | 
						|
    delete? = if delete? == "true", do: true, else: false
 | 
						|
 | 
						|
    if Pleroma.Config.get([:instance, :dynamic_configuration]) do
 | 
						|
      config_path = "config/#{env}.exported_from_db.secret.exs"
 | 
						|
 | 
						|
      {:ok, file} = File.open(config_path, [:write])
 | 
						|
      IO.write(file, "use Mix.Config\r\n")
 | 
						|
 | 
						|
      Repo.all(Config)
 | 
						|
      |> Enum.each(fn config ->
 | 
						|
        IO.write(
 | 
						|
          file,
 | 
						|
          "config :#{config.group}, #{config.key}, #{inspect(Config.from_binary(config.value))}\r\n\r\n"
 | 
						|
        )
 | 
						|
 | 
						|
        if delete? do
 | 
						|
          {:ok, _} = Repo.delete(config)
 | 
						|
          Mix.shell().info("#{config.key} deleted from DB.")
 | 
						|
        end
 | 
						|
      end)
 | 
						|
 | 
						|
      File.close(file)
 | 
						|
      System.cmd("mix", ["format", config_path])
 | 
						|
    else
 | 
						|
      Mix.shell().info(
 | 
						|
        "Migration is not allowed by config. You can change this behavior in instance settings."
 | 
						|
      )
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |