summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/pleroma/application.ex42
-rw-r--r--lib/pleroma/config.ex14
-rw-r--r--lib/pleroma/gopher/server.ex35
-rw-r--r--test/config_test.exs15
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