diff options
-rw-r--r-- | lib/pleroma/application.ex | 42 | ||||
-rw-r--r-- | lib/pleroma/config.ex | 14 | ||||
-rw-r--r-- | lib/pleroma/gopher/server.ex | 35 | ||||
-rw-r--r-- | test/config_test.exs | 15 |
4 files changed, 71 insertions, 35 deletions
diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex index ca5b9fe65..cc68d9669 100644 --- a/lib/pleroma/application.ex +++ b/lib/pleroma/application.ex @@ -1,5 +1,6 @@ defmodule Pleroma.Application do use Application + import Supervisor.Spec @name "Pleroma" @version Mix.Project.config()[:version] @@ -16,7 +17,6 @@ defmodule Pleroma.Application do # for more information on OTP Applications @env Mix.env() def start(_type, _args) do - import Supervisor.Spec import Cachex.Spec # Define workers and child supervisors to be supervised @@ -25,10 +25,6 @@ defmodule Pleroma.Application do # Start the Ecto repository supervisor(Pleroma.Repo, []), worker(Pleroma.Emoji, []), - # Start the endpoint when the application starts - supervisor(Pleroma.Web.Endpoint, []), - # Start your own worker by calling: Pleroma.Worker.start_link(arg1, arg2, arg3) - # worker(Pleroma.Worker, [arg1, arg2, arg3]), worker( Cachex, [ @@ -68,20 +64,17 @@ defmodule Pleroma.Application do ], id: :cachex_idem ), - worker(Pleroma.Web.Federator, []), worker(Pleroma.Web.Federator.RetryQueue, []), - worker(Pleroma.Gopher.Server, []), + worker(Pleroma.Web.Federator, []), worker(Pleroma.Stats, []) ] ++ - if @env == :test, - do: [], - else: - [worker(Pleroma.Web.Streamer, [])] ++ - if( - !chat_enabled(), - do: [], - else: [worker(Pleroma.Web.ChatChannel.ChatChannelState, [])] - ) + streamer_child() ++ + chat_child() ++ + [ + # Start the endpoint when the application starts + supervisor(Pleroma.Web.Endpoint, []), + worker(Pleroma.Gopher.Server, []) + ] # See http://elixir-lang.org/docs/stable/elixir/Supervisor.html # for other strategies and supported options @@ -89,7 +82,20 @@ defmodule Pleroma.Application do Supervisor.start_link(children, opts) end - defp chat_enabled do - Application.get_env(:pleroma, :chat, []) |> Keyword.get(:enabled) + if Mix.env() == :test do + defp streamer_child(), do: [] + defp chat_child(), do: [] + else + defp streamer_child() do + [worker(Pleroma.Web.Streamer, [])] + end + + defp chat_child() do + if Pleroma.Config.get([:chat, :enabled]) do + [worker(Pleroma.Web.ChatChannel.ChatChannelState, [])] + else + [] + end + end end end diff --git a/lib/pleroma/config.ex b/lib/pleroma/config.ex index 15f771b6e..3876ddf1f 100644 --- a/lib/pleroma/config.ex +++ b/lib/pleroma/config.ex @@ -39,4 +39,18 @@ defmodule Pleroma.Config do def put(key, value) do Application.put_env(:pleroma, key, value) end + + def delete([key]), do: delete(key) + + def delete([parent_key | keys]) do + {_, parent} = + Application.get_env(:pleroma, parent_key) + |> get_and_update_in(keys, fn _ -> :pop end) + + Application.put_env(:pleroma, parent_key, parent) + end + + def delete(key) do + Application.delete_env(:pleroma, key) + end end diff --git a/lib/pleroma/gopher/server.ex b/lib/pleroma/gopher/server.ex index e6361a82c..3b0569a99 100644 --- a/lib/pleroma/gopher/server.ex +++ b/lib/pleroma/gopher/server.ex @@ -6,28 +6,29 @@ defmodule Pleroma.Gopher.Server do config = Pleroma.Config.get(:gopher, []) ip = Keyword.get(config, :ip, {0, 0, 0, 0}) port = Keyword.get(config, :port, 1234) - GenServer.start_link(__MODULE__, [ip, port], []) - end - def init([ip, port]) do - if Pleroma.Config.get([:gopher, :enabled], false) do - Logger.info("Starting gopher server on #{port}") - - :ranch.start_listener( - :gopher, - 100, - :ranch_tcp, - [port: port], - __MODULE__.ProtocolHandler, - [] - ) - - {:ok, %{ip: ip, port: port}} + if Keyword.get(config, :enabled, false) do + GenServer.start_link(__MODULE__, [ip, port], []) else Logger.info("Gopher server disabled") - {:ok, nil} + :ignore end end + + def init([ip, port]) do + Logger.info("Starting gopher server on #{port}") + + :ranch.start_listener( + :gopher, + 100, + :ranch_tcp, + [port: port], + __MODULE__.ProtocolHandler, + [] + ) + + {:ok, %{ip: ip, port: port}} + end end defmodule Pleroma.Gopher.Server.ProtocolHandler do diff --git a/test/config_test.exs b/test/config_test.exs index 0124544c8..837cbb30c 100644 --- a/test/config_test.exs +++ b/test/config_test.exs @@ -53,4 +53,19 @@ defmodule Pleroma.ConfigTest do assert Pleroma.Config.get([:instance, :config_test]) == true assert Pleroma.Config.get([:instance, :config_nested_test, :x]) == true end + + test "delete/1 with a key" do + Pleroma.Config.put([:delete_me], :delete_me) + Pleroma.Config.delete([:delete_me]) + assert Pleroma.Config.get([:delete_me]) == nil + end + + test "delete/2 with a list of keys" do + Pleroma.Config.put([:delete_me], hello: "world", world: "Hello") + Pleroma.Config.delete([:delete_me, :world]) + assert Pleroma.Config.get([:delete_me]) == [hello: "world"] + Pleroma.Config.put([:delete_me, :delete_me], hello: "world", world: "Hello") + Pleroma.Config.delete([:delete_me, :delete_me, :world]) + assert Pleroma.Config.get([:delete_me, :delete_me]) == [hello: "world"] + end end |