Pleroma.Gopher.Server
]
- case Pleroma.OTPVersion.check_version() do
- :ok -> :ok
- {:error, version} -> raise "
- !!!OTP VERSION WARNING!!!
- You are using gun adapter with OTP version #{version}, which doesn't support correct handling of unordered certificates chains.
- "
- :undefined -> raise "
- !!!OTP VERSION WARNING!!!
- To support correct handling of unordered certificates chains - OTP version must be > 22.2.
- "
+ if adapter() == Tesla.Adapter.Gun do
+ case Pleroma.OTPVersion.check() do
+ :ok ->
+ :ok
+
+ {:error, version} ->
+ raise "
+ !!!OTP VERSION WARNING!!!
+ You are using gun adapter with OTP version #{version}, which doesn't support correct handling of unordered certificates chains.
+ "
+
+ :undefined ->
+ raise "
+ !!!OTP VERSION WARNING!!!
+ To support correct handling of unordered certificates chains - OTP version must be > 22.2.
+ "
+ end
end
# See http://elixir-lang.org/docs/stable/elixir/Supervisor.html
[hackney_pool, Pleroma.Pool.Supervisor]
end
- defp http_pools_children(_) do
- :tesla
- |> Application.get_env(:adapter)
- |> http_pools()
- end
+ defp http_pools_children(_), do: http_pools(adapter())
defp http_pools(Tesla.Adapter.Hackney) do
pools = [:federation, :media]
defp http_pools(Tesla.Adapter.Gun), do: [Pleroma.Pool.Supervisor]
defp http_pools(_), do: []
+
+ defp adapter, do: Application.get_env(:tesla, :adapter)
end
-defmodule Pleroma.OTPVersion do
- @type check_status() :: :undefined | {:error, String.t()} | :ok
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
- require Logger
+defmodule Pleroma.OTPVersion do
+ @type check_status() :: :ok | :undefined | {:error, String.t()}
- @spec check_version() :: check_status()
- def check_version do
+ @spec check() :: check_status()
+ def check do
# OTP Version https://erlang.org/doc/system_principles/versions.html#otp-version
- paths = [
+ [
Path.join(:code.root_dir(), "OTP_VERSION"),
Path.join([:code.root_dir(), "releases", :erlang.system_info(:otp_release), "OTP_VERSION"])
]
-
- :tesla
- |> Application.get_env(:adapter)
- |> get_and_check_version(paths)
+ |> get_version_from_files()
+ |> do_check()
end
- @spec get_and_check_version(module(), [Path.t()]) :: check_status()
- def get_and_check_version(Tesla.Adapter.Gun, paths) do
+ @spec check([Path.t()]) :: check_status()
+ def check(paths) do
paths
- |> check_files()
- |> check_version()
+ |> get_version_from_files()
+ |> do_check()
end
- def get_and_check_version(_, _), do: :ok
-
- defp check_files([]), do: nil
+ defp get_version_from_files([]), do: nil
- defp check_files([path | paths]) do
+ defp get_version_from_files([path | paths]) do
if File.exists?(path) do
File.read!(path)
else
- check_files(paths)
+ get_version_from_files(paths)
end
end
- defp check_version(nil), do: :undefined
-
- defp check_version(version) do
- try do
- version = String.replace(version, ~r/\r|\n|\s/, "")
-
- formatted =
- version
- |> String.split(".")
- |> Enum.map(&String.to_integer/1)
- |> Enum.take(2)
-
- with [major, minor] when length(formatted) == 2 <- formatted,
- true <- (major == 22 and minor >= 2) or major > 22 do
- :ok
- else
- false -> {:error, version}
- _ -> :undefined
- end
- rescue
- _ -> :undefined
- catch
- _ -> :undefined
+ defp do_check(nil), do: :undefined
+
+ defp do_check(version) do
+ version = String.replace(version, ~r/\r|\n|\s/, "")
+
+ [major, minor] =
+ version
+ |> String.split(".")
+ |> Enum.map(&String.to_integer/1)
+ |> Enum.take(2)
+
+ if (major == 22 and minor >= 2) or major > 22 do
+ :ok
+ else
+ {:error, version}
end
end
end
+++ /dev/null
-22
\ No newline at end of file
+++ /dev/null
-undefined
\ No newline at end of file
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
defmodule Pleroma.OTPVersionTest do
use ExUnit.Case, async: true
alias Pleroma.OTPVersion
- describe "get_and_check_version/2" do
+ describe "check/1" do
test "22.4" do
- assert OTPVersion.get_and_check_version(Tesla.Adapter.Gun, [
- "test/fixtures/warnings/otp_version/22.4"
- ]) == :ok
+ assert OTPVersion.check(["test/fixtures/warnings/otp_version/22.4"]) == :ok
end
test "22.1" do
- assert OTPVersion.get_and_check_version(Tesla.Adapter.Gun, [
- "test/fixtures/warnings/otp_version/22.1"
- ]) == {:error, "22.1"}
+ assert OTPVersion.check(["test/fixtures/warnings/otp_version/22.1"]) == {:error, "22.1"}
end
test "21.1" do
- assert OTPVersion.get_and_check_version(Tesla.Adapter.Gun, [
- "test/fixtures/warnings/otp_version/21.1"
- ]) == {:error, "21.1"}
+ assert OTPVersion.check(["test/fixtures/warnings/otp_version/21.1"]) == {:error, "21.1"}
end
test "23.0" do
- assert OTPVersion.get_and_check_version(Tesla.Adapter.Gun, [
- "test/fixtures/warnings/otp_version/23.0"
- ]) == :ok
- end
-
- test "undefined" do
- assert OTPVersion.get_and_check_version(Tesla.Adapter.Gun, [
- "test/fixtures/warnings/otp_version/undefined"
- ]) == :undefined
- end
-
- test "not parsable" do
- assert OTPVersion.get_and_check_version(Tesla.Adapter.Gun, [
- "test/fixtures/warnings/otp_version/error"
- ]) == :undefined
+ assert OTPVersion.check(["test/fixtures/warnings/otp_version/23.0"]) == :ok
end
test "with non existance file" do
- assert OTPVersion.get_and_check_version(Tesla.Adapter.Gun, [
+ assert OTPVersion.check([
"test/fixtures/warnings/otp_version/non-exising",
"test/fixtures/warnings/otp_version/22.4"
]) == :ok
end
test "empty paths" do
- assert OTPVersion.get_and_check_version(Tesla.Adapter.Gun, []) == :undefined
- end
-
- test "another adapter" do
- assert OTPVersion.get_and_check_version(Tesla.Adapter.Hackney, []) == :ok
+ assert OTPVersion.check([]) == :undefined
end
end
end