dynamic_configuration renaming
authorAlexander Strizhakov <alex.strizhakov@gmail.com>
Fri, 10 Jan 2020 16:34:19 +0000 (19:34 +0300)
committerAlexander Strizhakov <alex.strizhakov@gmail.com>
Fri, 10 Jan 2020 16:34:19 +0000 (19:34 +0300)
and moving it from instance settings

13 files changed:
config/config.exs
config/description.exs
docs/API/admin_api.md
docs/admin/config.md
docs/configuration/cheatsheet.md
lib/mix/tasks/pleroma/config.ex
lib/pleroma/config/transfer_task.ex
lib/pleroma/web/admin_api/admin_api_controller.ex
priv/templates/sample_config.eex
test/config/transfer_task_test.exs
test/tasks/config_test.exs
test/tasks/instance_test.exs
test/web/admin_api/admin_api_controller_test.exs

index 103361b297373e3f5f397d00d54ced636e95c633..df677c2e052e2e6d38964d9f3c92468388bcd68a 100644 (file)
@@ -269,7 +269,6 @@ config :pleroma, :instance,
   remote_post_retention_days: 90,
   skip_thread_containment: true,
   limit_to_local_content: :unauthenticated,
-  dynamic_configuration: false,
   user_bio_length: 5000,
   user_name_length: 100,
   max_account_fields: 10,
@@ -623,6 +622,8 @@ config :pleroma, :web_cache_ttl,
 
 config :pleroma, :modules, runtime_dir: "instance/modules"
 
+config :pleroma, configurable_from_database: false
+
 config :swarm, node_blacklist: [~r/myhtml_.*$/]
 # Import environment specific config. This must remain at the bottom
 # of this file so it overrides the configuration defined above.
index 285c8b19c8c5e52277bd1e88a44b11a0e054ebff..3c5febf0539915289fa089d599b5de4c18b4e683 100644 (file)
@@ -867,12 +867,6 @@ config :pleroma, :config_description, [
           false
         ]
       },
-      %{
-        key: :dynamic_configuration,
-        type: :boolean,
-        description:
-          "Allow transferring configuration to DB with the subsequent customization from Admin api. Defaults to `false`"
-      },
       %{
         key: :max_account_fields,
         type: :integer,
@@ -3111,5 +3105,18 @@ config :pleroma, :config_description, [
         description: "A path to custom Elixir modules (such as MRF policies)."
       }
     ]
+  },
+  %{
+    group: :pleroma,
+    type: :group,
+    description: "Allow instance configuration from database.",
+    children: [
+      %{
+        key: :configurable_from_database,
+        type: :boolean,
+        description:
+          "Allow transferring configuration to DB with the subsequent customization from Admin api. Defaults to `false`"
+      }
+    ]
   }
 ]
index cd491624826a722b453ba669e76f21f48838a91f..f2a0906b8eb832b4479aee4228b3db7fc7c08f76 100644 (file)
@@ -684,7 +684,7 @@ Copies all settings from database to `config/{env}.exported_from_db.secret.exs`
 
 ### Get saved config settings
 
-**Only works when `:dynamic_configuration` is `true`.**
+**Only works when configuration from database is enabled.**
 
 - Params: none
 - Response:
@@ -708,7 +708,7 @@ Copies all settings from database to `config/{env}.exported_from_db.secret.exs`
 
 ### Update config settings
 
-**Only works when `:dynamic_configuration` is `true`.**
+**Only works when configuration from database is enabled.**
 
 Some modifications are necessary to save the config settings correctly:
 
index f42ec897559e2f51a2d22917ae3051a381c2edca..41ca8fd5850187b300c945ce45dbef3df4eb94de 100644 (file)
@@ -1,9 +1,8 @@
 # Configuring instance
-You can configure your instance from admin interface. You need account with admin rights and little change in config file, which will allow settings dynamic configuration from database.
+You can configure your instance from admin interface. You need account with admin rights and little change in config file, which will allow settings configuration from database.
 
 ```elixir
-config :pleroma, :instance,
-  dynamic_configuration: true
+config :pleroma, configurable_from_database: true
 ```
 
 ## How it works
@@ -48,10 +47,9 @@ rm -rf config/prod.exported_from_db.exs
 ```
 *If you don't want to backup settings, you can skip step with `cp` command.*
 
-3. Set dynamic configuration to `false`.
+3. Set configurable_from_database to `false`.
 ```elixir
-config :pleroma, :instance,
-  dynamic_configuration: false
+config :pleroma, configurable_from_database: false
 ```
 4. Restart pleroma instance
 ```bash
index 336fd3e118b9571c32058186c62d8a00983f23eb..30d673ebad156d30b8e06cd3ec15b86bc0f5cb04 100644 (file)
@@ -70,11 +70,6 @@ You shouldn't edit the base config directly to avoid breakages and merge conflic
 * `account_field_value_length`: An account field value maximum length (default: `2048`).
 * `external_user_synchronization`: Enabling following/followers counters synchronization for external users.
 
-!!! danger
-    This is a Work In Progress, not usable just yet
-
-* `dynamic_configuration`: Allow transferring configuration to DB with the subsequent customization from Admin api.
-
 ## Federation
 ### MRF policies
 
@@ -841,3 +836,7 @@ config :auto_linker,
 ## Custom Runtime Modules (`:modules`)
 
 * `runtime_dir`: A path to custom Elixir modules (such as MRF policies).
+
+
+## :configurable_from_database
+Enable/disable configuration from database.
index 257a0dfe5841fa53541980f3fe84784f32e59aef..3f80af5a7d903df3c8f9e932015f8bb712cb6f5a 100644 (file)
@@ -30,7 +30,7 @@ defmodule Mix.Tasks.Pleroma.Config do
   def run(["migrate_to_db"]) do
     start_pleroma()
 
-    if Pleroma.Config.get([:instance, :dynamic_configuration]) do
+    if Pleroma.Config.get([:configurable_from_database]) do
       Enum.each(@groups, &load_and_create(&1))
     else
       Mix.shell().info(
@@ -48,7 +48,8 @@ defmodule Mix.Tasks.Pleroma.Config do
         aliases: [d: :delete_from_db]
       )
 
-    with {:active?, true} <- {:active?, Pleroma.Config.get([:instance, :dynamic_configuration])},
+    with {:active?, true} <-
+           {:active?, Pleroma.Config.get([:configurable_from_database])},
          env_path when is_binary(env_path) <- opts[:env],
          config_path <- "config/#{env_path}.exported_from_db.secret.exs",
          {:ok, file} <- File.open(config_path, [:write, :utf8]) do
index c89c1fcc8c56202cfb52e5b9688703a376a7b104..75c4aa7397d649c12ca32f3b61aede3d0cf30bc8 100644 (file)
@@ -17,7 +17,7 @@ defmodule Pleroma.Config.TransferTask do
   end
 
   def load_and_update_env do
-    with true <- Pleroma.Config.get([:instance, :dynamic_configuration]),
+    with true <- Pleroma.Config.get([:configurable_from_database]),
          true <- Ecto.Adapters.SQL.table_exists?(Repo, "config"),
          started_applications <- Application.started_applications() do
       # We need to restart applications for loaded settings take effect
index d12ed459d682179020062c1b75f8b7d903147853..849641113baead98ff76580169c57abe946d8846 100644 (file)
@@ -785,7 +785,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
   end
 
   def migrate_from_db(conn, _params) do
-    with :ok <- check_dynamic_configuration(conn) do
+    with :ok <- configurable_from_database(conn) do
       Mix.Tasks.Pleroma.Config.run([
         "migrate_from_db",
         "--env",
@@ -798,7 +798,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
   end
 
   def config_show(conn, _params) do
-    with :ok <- check_dynamic_configuration(conn) do
+    with :ok <- configurable_from_database(conn) do
       configs = Pleroma.Repo.all(Config)
 
       if configs == [] do
@@ -812,7 +812,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
   end
 
   def config_update(conn, %{"configs" => configs}) do
-    with :ok <- check_dynamic_configuration(conn) do
+    with :ok <- configurable_from_database(conn) do
       updated =
         Enum.map(configs, fn
           %{"group" => group, "key" => key, "delete" => true} = params ->
@@ -843,8 +843,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
     end
   end
 
-  defp check_dynamic_configuration(conn) do
-    if Pleroma.Config.get([:instance, :dynamic_configuration]) do
+  defp configurable_from_database(conn) do
+    if Pleroma.Config.get([:configurable_from_database]) do
       :ok
     else
       errors(conn, {:error, "To use this endpoint you need to enable dynamic configuration."})
index dc75d4008e0ff631d54d9408dfbe952283c15cb6..bc7e37375bf1cd0c5b34e41a14a11ada1090cb38 100644 (file)
@@ -20,8 +20,7 @@ config :pleroma, :instance,
   email: "<%= email %>",
   notify_email: "<%= notify_email %>",
   limit: 5000,
-  registrations_open: true,
-  dynamic_configuration: <%= db_configurable? %>
+  registrations_open: true
 
 config :pleroma, :media_proxy,
   enabled: false,
@@ -70,3 +69,5 @@ config :pleroma, Pleroma.Uploaders.Local, uploads: "<%= uploads_dir %>"
 #   host: "s3.wasabisys.com"
 
 config :joken, default_signer: "<%= jwt_secret %>"
+
+config :pleroma, configurable_from_database: <%= db_configurable? %>
index d1314cf99cac98edcddd97537d660d446bd3f8fd..b05191eab6e9a7f8a569c5cd03a8f7e515803964 100644 (file)
@@ -7,8 +7,8 @@ defmodule Pleroma.Config.TransferTaskTest do
 
   alias Pleroma.Web.AdminAPI.Config
 
-  clear_config([:instance, :dynamic_configuration]) do
-    Pleroma.Config.put([:instance, :dynamic_configuration], true)
+  clear_config([:configurable_from_database]) do
+    Pleroma.Config.put([:configurable_from_database], true)
   end
 
   test "transfer config values from db to env" do
index c95db534da544bdbd7a763f12bf1896ba1cbcf1c..b967dfddeacce487a519a2d9e156656e98e0c6db 100644 (file)
@@ -19,8 +19,8 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do
     :ok
   end
 
-  clear_config_all([:instance, :dynamic_configuration]) do
-    Pleroma.Config.put([:instance, :dynamic_configuration], true)
+  clear_config_all([:configurable_from_database]) do
+    Pleroma.Config.put([:configurable_from_database], true)
   end
 
   test "settings are migrated to db" do
@@ -127,7 +127,6 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do
           remote_post_retention_days: 90,
           skip_thread_containment: true,
           limit_to_local_content: :unauthenticated,
-          dynamic_configuration: false,
           user_bio_length: 5000,
           user_name_length: 100,
           max_account_fields: 10,
@@ -157,7 +156,7 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do
       {:ok, file} = File.read(temp_file)
 
       assert file ==
-               "use Mix.Config\n\nconfig :pleroma, :instance,\n  name: \"Pleroma\",\n  email: \"example@example.com\",\n  notify_email: \"noreply@example.com\",\n  description: \"A Pleroma instance, an alternative fediverse server\",\n  limit: 5000,\n  chat_limit: 5000,\n  remote_limit: 100_000,\n  upload_limit: 16_000_000,\n  avatar_upload_limit: 2_000_000,\n  background_upload_limit: 4_000_000,\n  banner_upload_limit: 4_000_000,\n  poll_limits: %{\n    max_expiration: 31_536_000,\n    max_option_chars: 200,\n    max_options: 20,\n    min_expiration: 0\n  },\n  registrations_open: true,\n  federating: true,\n  federation_incoming_replies_max_depth: 100,\n  federation_reachability_timeout_days: 7,\n  federation_publisher_modules: [Pleroma.Web.ActivityPub.Publisher],\n  allow_relay: true,\n  rewrite_policy: Pleroma.Web.ActivityPub.MRF.NoOpPolicy,\n  public: true,\n  quarantined_instances: [],\n  managed_config: true,\n  static_dir: \"instance/static/\",\n  allowed_post_formats: [\"text/plain\", \"text/html\", \"text/markdown\", \"text/bbcode\"],\n  mrf_transparency: true,\n  mrf_transparency_exclusions: [],\n  autofollowed_nicknames: [],\n  max_pinned_statuses: 1,\n  no_attachment_links: true,\n  welcome_user_nickname: nil,\n  welcome_message: nil,\n  max_report_comment_size: 1000,\n  safe_dm_mentions: false,\n  healthcheck: false,\n  remote_post_retention_days: 90,\n  skip_thread_containment: true,\n  limit_to_local_content: :unauthenticated,\n  dynamic_configuration: false,\n  user_bio_length: 5000,\n  user_name_length: 100,\n  max_account_fields: 10,\n  max_remote_account_fields: 20,\n  account_field_name_length: 512,\n  account_field_value_length: 2048,\n  external_user_synchronization: true,\n  extended_nickname_format: true,\n  multi_factor_authentication: [\n    totp: [digits: 6, period: 30],\n    backup_codes: [number: 2, length: 6]\n  ]\n"
+               "use Mix.Config\n\nconfig :pleroma, :instance,\n  name: \"Pleroma\",\n  email: \"example@example.com\",\n  notify_email: \"noreply@example.com\",\n  description: \"A Pleroma instance, an alternative fediverse server\",\n  limit: 5000,\n  chat_limit: 5000,\n  remote_limit: 100_000,\n  upload_limit: 16_000_000,\n  avatar_upload_limit: 2_000_000,\n  background_upload_limit: 4_000_000,\n  banner_upload_limit: 4_000_000,\n  poll_limits: %{\n    max_expiration: 31_536_000,\n    max_option_chars: 200,\n    max_options: 20,\n    min_expiration: 0\n  },\n  registrations_open: true,\n  federating: true,\n  federation_incoming_replies_max_depth: 100,\n  federation_reachability_timeout_days: 7,\n  federation_publisher_modules: [Pleroma.Web.ActivityPub.Publisher],\n  allow_relay: true,\n  rewrite_policy: Pleroma.Web.ActivityPub.MRF.NoOpPolicy,\n  public: true,\n  quarantined_instances: [],\n  managed_config: true,\n  static_dir: \"instance/static/\",\n  allowed_post_formats: [\"text/plain\", \"text/html\", \"text/markdown\", \"text/bbcode\"],\n  mrf_transparency: true,\n  mrf_transparency_exclusions: [],\n  autofollowed_nicknames: [],\n  max_pinned_statuses: 1,\n  no_attachment_links: true,\n  welcome_user_nickname: nil,\n  welcome_message: nil,\n  max_report_comment_size: 1000,\n  safe_dm_mentions: false,\n  healthcheck: false,\n  remote_post_retention_days: 90,\n  skip_thread_containment: true,\n  limit_to_local_content: :unauthenticated,\n  user_bio_length: 5000,\n  user_name_length: 100,\n  max_account_fields: 10,\n  max_remote_account_fields: 20,\n  account_field_name_length: 512,\n  account_field_value_length: 2048,\n  external_user_synchronization: true,\n  extended_nickname_format: true,\n  multi_factor_authentication: [\n    totp: [digits: 6, period: 30],\n    backup_codes: [number: 2, length: 6]\n  ]\n"
     end
   end
 end
index 6d7eed4c1477186bd134329d5266711f9af57127..d69275726e280c11e19c8296b3c90c7a741a07d7 100644 (file)
@@ -78,7 +78,7 @@ defmodule Pleroma.InstanceTest do
     assert generated_config =~ "database: \"dbname\""
     assert generated_config =~ "username: \"dbuser\""
     assert generated_config =~ "password: \"dbpass\""
-    assert generated_config =~ "dynamic_configuration: true"
+    assert generated_config =~ "configurable_from_database: true"
     assert generated_config =~ "http: [ip: {127, 0, 0, 1}, port: 4000]"
     assert File.read!(tmp_path() <> "setup.psql") == generated_setup_psql()
   end
index ebd9054e3390b6e753295a7c851d56dc6f75ff08..bbaff8ed2b34ef9705942050e4a004e3c8a07b05 100644 (file)
@@ -584,7 +584,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
 
       assert json_response(conn, :no_content)
 
-      token_record = List.last(Pleroma.Repo.all(Pleroma.UserInviteToken))
+      token_record = List.last(Repo.all(Pleroma.UserInviteToken))
       assert token_record
       refute token_record.used
 
@@ -1929,8 +1929,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
   end
 
   describe "GET /api/pleroma/admin/config" do
-    clear_config([:instance, :dynamic_configuration]) do
-      Pleroma.Config.put([:instance, :dynamic_configuration], true)
+    clear_config([:configurable_from_database]) do
+      Pleroma.Config.put([:configurable_from_database], true)
     end
 
     setup %{conn: conn} do
@@ -1940,9 +1940,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
     end
 
     test "when dynamic configuration is off", %{conn: conn} do
-      initial = Pleroma.Config.get([:instance, :dynamic_configuration])
-      Pleroma.Config.put([:instance, :dynamic_configuration], false)
-      on_exit(fn -> Pleroma.Config.put([:instance, :dynamic_configuration], initial) end)
+      initial = Pleroma.Config.get([:configurable_from_database])
+      Pleroma.Config.put([:configurable_from_database], false)
+      on_exit(fn -> Pleroma.Config.put([:configurable_from_database], initial) end)
       conn = get(conn, "/api/pleroma/admin/config")
 
       assert json_response(conn, 400) ==
@@ -2016,8 +2016,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
       %{conn: assign(conn, :user, admin)}
     end
 
-    clear_config([:instance, :dynamic_configuration]) do
-      Pleroma.Config.put([:instance, :dynamic_configuration], true)
+    clear_config([:configurable_from_database]) do
+      Pleroma.Config.put([:configurable_from_database], true)
     end
 
     @tag capture_log: true
@@ -2908,8 +2908,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
       %{conn: assign(conn, :user, admin)}
     end
 
-    clear_config([:instance, :dynamic_configuration]) do
-      Pleroma.Config.put([:instance, :dynamic_configuration], true)
+    clear_config([:configurable_from_database]) do
+      Pleroma.Config.put([:configurable_from_database], true)
     end
 
     clear_config([:feed, :post_title]) do
@@ -2918,20 +2918,20 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
 
     test "transfer settings to DB and to file", %{conn: conn} do
       on_exit(fn -> :ok = File.rm("config/test.exported_from_db.secret.exs") end)
-      assert Pleroma.Repo.all(Pleroma.Web.AdminAPI.Config) == []
+      assert Repo.all(Pleroma.Web.AdminAPI.Config) == []
       Mix.Tasks.Pleroma.Config.run(["migrate_to_db"])
-      assert Pleroma.Repo.all(Pleroma.Web.AdminAPI.Config) > 0
+      assert Repo.aggregate(Pleroma.Web.AdminAPI.Config, :count, :id) > 0
 
       conn = get(conn, "/api/pleroma/admin/config/migrate_from_db")
 
       assert json_response(conn, 200) == %{}
-      assert Pleroma.Repo.all(Pleroma.Web.AdminAPI.Config) == []
+      assert Repo.all(Pleroma.Web.AdminAPI.Config) == []
     end
 
     test "returns error if dynamic configuration is off", %{conn: conn} do
-      initial = Pleroma.Config.get([:instance, :dynamic_configuration])
-      on_exit(fn -> Pleroma.Config.put([:instance, :dynamic_configuration], initial) end)
-      Pleroma.Config.put([:instance, :dynamic_configuration], false)
+      initial = Pleroma.Config.get([:configurable_from_database])
+      on_exit(fn -> Pleroma.Config.put([:configurable_from_database], initial) end)
+      Pleroma.Config.put([:configurable_from_database], false)
 
       conn = get(conn, "/api/pleroma/admin/config/migrate_from_db")