some clean up
authorAlexander Strizhakov <alex.strizhakov@gmail.com>
Fri, 17 Jan 2020 13:28:44 +0000 (16:28 +0300)
committerAlexander Strizhakov <alex.strizhakov@gmail.com>
Fri, 17 Jan 2020 13:28:44 +0000 (16:28 +0300)
lib/mix/tasks/pleroma/config.ex
lib/mix/tasks/pleroma/docs.ex
lib/pleroma/config/config_db.ex
lib/pleroma/config/holder.ex
lib/pleroma/config/transfer_task.ex
lib/pleroma/docs/json.ex
test/config/config_db_test.exs
test/web/admin_api/admin_api_controller_test.exs

index 43039ae779616fb035ac3b29e1582cba26eafe59..148d18141c39dbf0f91986df7b91402caabd469a 100644 (file)
@@ -16,7 +16,6 @@ defmodule Mix.Tasks.Pleroma.Config do
   @moduledoc File.read!("docs/administration/CLI_tasks/config.md")
 
   def run(["migrate_to_db"]) do
-    # we want to save original logger level
     start_pleroma()
     migrate_to_db()
   end
index 0d2663648de4463d9b564bb7f29f9cc919d37362..3c870f8766fc263ee63e63311652d1d78c09488c 100644 (file)
@@ -28,7 +28,7 @@ defmodule Mix.Tasks.Pleroma.Docs do
   defp do_run(implementation) do
     start_pleroma()
 
-    with {descriptions, _paths} <- Mix.Config.eval!("config/description.exs"),
+    with descriptions <- Pleroma.Config.Loader.load("config/description.exs"),
          {:ok, file_path} <-
            Pleroma.Docs.Generator.process(
              implementation,
index 294fbc3f06861d3c4b2388f864f72ede54633592..6d48e030000995dd28c13a8fd4e2a5e068f787ec 100644 (file)
@@ -192,7 +192,6 @@ defmodule Pleroma.ConfigDB do
     }
   end
 
-  defp do_convert({:dispatch, [entity]}), do: %{"tuple" => [":dispatch", [inspect(entity)]]}
   # TODO: will become useless after removing hackney
   defp do_convert({:partial_chain, entity}), do: %{"tuple" => [":partial_chain", inspect(entity)]}
 
@@ -229,14 +228,13 @@ defmodule Pleroma.ConfigDB do
     {:proxy_url, {do_transform_string(type), parse_host(host), port}}
   end
 
-  defp do_transform(%{"tuple" => [":dispatch", [entity]]}) do
-    {dispatch_settings, []} = do_eval(entity)
-    {:dispatch, [dispatch_settings]}
-  end
-
   # TODO: will become useless after removing hackney
   defp do_transform(%{"tuple" => [":partial_chain", entity]}) do
-    {partial_chain, []} = do_eval(entity)
+    {partial_chain, []} =
+      entity
+      |> String.replace(~r/[^\w|^{:,[|^,|^[|^\]^}|^\/|^\.|^"]^\s/, "")
+      |> Code.eval_string()
+
     {:partial_chain, partial_chain}
   end
 
@@ -322,9 +320,4 @@ defmodule Pleroma.ConfigDB do
     Regex.match?(~r/^(Pleroma|Phoenix|Tesla|Quack)\./, string) or
       string in ["Oban", "Ueberauth", "ExSyslogger"]
   end
-
-  defp do_eval(entity) do
-    cleaned_string = String.replace(entity, ~r/[^\w|^{:,[|^,|^[|^\]^}|^\/|^\.|^"]^\s/, "")
-    Code.eval_string(cleaned_string)
-  end
 end
index c8badc52cf4ccfd1546fa7412c4a5d9bd1b020e7..0d9cfef66bea4cbe193fbcfff0703e4aabaeed60 100644 (file)
@@ -3,20 +3,29 @@ defmodule Pleroma.Config.Loader do
   if Code.ensure_loaded?(Config.Reader) do
     @spec load() :: map()
     def load do
-      config = Config.Reader.read!("config/config.exs")
-      env_config = Config.Reader.read!("config/#{Mix.env()}.exs")
+      config = load("config/config.exs")
+      env_config = load("config/#{Mix.env()}.exs")
 
       Config.Reader.merge(config, env_config)
     end
+
+    @spec load(Path.t()) :: keyword()
+    def load(path), do: Config.Reader.read!(path)
   else
     # support for Elixir less than 1.9
     @spec load() :: map()
     def load do
-      {config, _paths} = Mix.Config.eval!("config/config.exs")
-      {env_config, _paths} = Mix.Config.eval!("config/#{Mix.env()}.exs")
+      {config, _paths} = load("config/config.exs")
+      {env_config, _paths} = load("config/#{Mix.env()}.exs")
 
       Mix.Config.merge(config, env_config)
     end
+
+    @spec load(Path.t()) :: keyword()
+    def load(path) do
+      {config, _paths} = Mix.Config.eval!(path)
+      config
+    end
   end
 end
 
index 828a297de59973372bdf3c92ebe0d94d34a3e347..70b51cb4d0d4ecede601ea61a4329f0884499dc1 100644 (file)
@@ -48,7 +48,20 @@ defmodule Pleroma.Config.TransferTask do
           end
 
         :ok = Application.put_env(group, key, merged_value)
-        group
+
+        if group != :logger do
+          group
+        else
+          # change logger configuration in runtime, without restart
+          if Keyword.keyword?(merged_value) and
+               key not in [:compile_time_application, :backends, :compile_time_purge_matching] do
+            Logger.configure_backend(key, merged_value)
+          else
+            Logger.configure([{key, merged_value}])
+          end
+
+          nil
+        end
       end
     rescue
       e ->
index f191b60132f4fd53866681390cae039b5a07d4f9..6508a7bdb50e2d2edac10c15e30776aa480f9e33 100644 (file)
@@ -15,7 +15,7 @@ defmodule Pleroma.Docs.JSON do
   end
 
   def compile do
-    with {config, _paths} <- Mix.Config.eval!("config/description.exs") do
+    with config <- Pleroma.Config.Loader.load("config/description.exs") do
       config[:pleroma][:config_description]
       |> Pleroma.Docs.Generator.convert_to_strings()
       |> Jason.encode!()
index 6f76008e62eac79dcd21107310fe5599c234017d..7668bc5473fd270a7e0d9ffa9bb1f07fbcebc0c8 100644 (file)
@@ -330,45 +330,6 @@ defmodule Pleroma.ConfigDBTest do
                {"v1", :v2, Pleroma.Bookmark, 150, false, Phoenix.Socket.V1.JSONSerializer}
     end
 
-    test "tuple with dispatch key" do
-      binary = ConfigDB.transform(%{"tuple" => [":dispatch", ["{:_,
-       [
-         {\"/api/v1/streaming\", Pleroma.Web.MastodonAPI.WebsocketHandler, []},
-         {\"/websocket\", Phoenix.Endpoint.CowboyWebSocket,
-          {Phoenix.Transports.WebSocket,
-           {Pleroma.Web.Endpoint, Pleroma.Web.UserSocket, [path: \"/websocket\"]}}},
-         {:_, Phoenix.Endpoint.Cowboy2Handler, {Pleroma.Web.Endpoint, []}}
-       ]}"]]})
-
-      assert binary ==
-               :erlang.term_to_binary(
-                 {:dispatch,
-                  [
-                    {:_,
-                     [
-                       {"/api/v1/streaming", Pleroma.Web.MastodonAPI.WebsocketHandler, []},
-                       {"/websocket", Phoenix.Endpoint.CowboyWebSocket,
-                        {Phoenix.Transports.WebSocket,
-                         {Pleroma.Web.Endpoint, Pleroma.Web.UserSocket, [path: "/websocket"]}}},
-                       {:_, Phoenix.Endpoint.Cowboy2Handler, {Pleroma.Web.Endpoint, []}}
-                     ]}
-                  ]}
-               )
-
-      assert ConfigDB.from_binary(binary) ==
-               {:dispatch,
-                [
-                  {:_,
-                   [
-                     {"/api/v1/streaming", Pleroma.Web.MastodonAPI.WebsocketHandler, []},
-                     {"/websocket", Phoenix.Endpoint.CowboyWebSocket,
-                      {Phoenix.Transports.WebSocket,
-                       {Pleroma.Web.Endpoint, Pleroma.Web.UserSocket, [path: "/websocket"]}}},
-                     {:_, Phoenix.Endpoint.Cowboy2Handler, {Pleroma.Web.Endpoint, []}}
-                   ]}
-                ]}
-    end
-
     test "map with string key" do
       binary = ConfigDB.transform(%{"key" => "value"})
       assert binary == :erlang.term_to_binary(%{"key" => "value"})
index 35cef4df33f819c782f04bffd7d14e31ed0163ff..0206f23d6faa98133f268aee860e786ca72d32fd 100644 (file)
@@ -2632,69 +2632,6 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
                }
     end
 
-    test "dispatch setting", %{conn: conn} do
-      conn =
-        post(conn, "/api/pleroma/admin/config", %{
-          configs: [
-            %{
-              "group" => ":pleroma",
-              "key" => "Pleroma.Web.Endpoint.NotReal",
-              "value" => [
-                %{
-                  "tuple" => [
-                    ":http",
-                    [
-                      %{"tuple" => [":ip", %{"tuple" => [127, 0, 0, 1]}]},
-                      %{"tuple" => [":dispatch", ["{:_,
-       [
-         {\"/api/v1/streaming\", Pleroma.Web.MastodonAPI.WebsocketHandler, []},
-         {\"/websocket\", Phoenix.Endpoint.CowboyWebSocket,
-          {Phoenix.Transports.WebSocket,
-           {Pleroma.Web.Endpoint, Pleroma.Web.UserSocket, [path: \"/websocket\"]}}},
-         {:_, Phoenix.Endpoint.Cowboy2Handler, {Pleroma.Web.Endpoint, []}}
-       ]}"]]}
-                    ]
-                  ]
-                }
-              ]
-            }
-          ]
-        })
-
-      dispatch_string =
-        "{:_, [{\"/api/v1/streaming\", Pleroma.Web.MastodonAPI.WebsocketHandler, []}, " <>
-          "{\"/websocket\", Phoenix.Endpoint.CowboyWebSocket, {Phoenix.Transports.WebSocket, " <>
-          "{Pleroma.Web.Endpoint, Pleroma.Web.UserSocket, [path: \"/websocket\"]}}}, " <>
-          "{:_, Phoenix.Endpoint.Cowboy2Handler, {Pleroma.Web.Endpoint, []}}]}"
-
-      assert json_response(conn, 200) == %{
-               "configs" => [
-                 %{
-                   "group" => ":pleroma",
-                   "key" => "Pleroma.Web.Endpoint.NotReal",
-                   "value" => [
-                     %{
-                       "tuple" => [
-                         ":http",
-                         [
-                           %{"tuple" => [":ip", %{"tuple" => [127, 0, 0, 1]}]},
-                           %{
-                             "tuple" => [
-                               ":dispatch",
-                               [
-                                 dispatch_string
-                               ]
-                             ]
-                           }
-                         ]
-                       ]
-                     }
-                   ]
-                 }
-               ]
-             }
-    end
-
     test "queues key as atom", %{conn: conn} do
       conn =
         post(conn, "/api/pleroma/admin/config", %{