aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Strizhakov <alex.strizhakov@gmail.com>2020-03-04 09:23:42 +0300
committerAlexander Strizhakov <alex.strizhakov@gmail.com>2020-03-04 09:23:42 +0300
commit6b2fb9160cd945cdd4b1265c793d1f85d559fccb (patch)
treeaed18106a285a073ed19d0e8f74699f087ce4941
parent8d9dee1ba951e81aaa08b4db64b431a7456dae56 (diff)
downloadpleroma-6b2fb9160cd945cdd4b1265c793d1f85d559fccb.tar.gz
otp version
-rw-r--r--lib/pleroma/application.ex20
-rw-r--r--lib/pleroma/otp_version.ex61
-rw-r--r--test/otp_version_test.exs18
3 files changed, 38 insertions, 61 deletions
diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex
index d0b9c3c41..c8a0617a5 100644
--- a/lib/pleroma/application.ex
+++ b/lib/pleroma/application.ex
@@ -43,7 +43,25 @@ defmodule Pleroma.Application do
load_custom_modules()
if adapter() == Tesla.Adapter.Gun do
- Pleroma.OTPVersion.check!()
+ if version = Pleroma.OTPVersion.version() do
+ [major, minor] =
+ version
+ |> String.split(".")
+ |> Enum.map(&String.to_integer/1)
+ |> Enum.take(2)
+
+ if (major == 22 and minor < 2) or major < 22 do
+ raise "
+ !!!OTP VERSION WARNING!!!
+ You are using gun adapter with OTP version #{version}, which doesn't support correct handling of unordered certificates chains.
+ "
+ end
+ else
+ raise "
+ !!!OTP VERSION WARNING!!!
+ To support correct handling of unordered certificates chains - OTP version must be > 22.2.
+ "
+ end
end
# Define workers and child supervisors to be supervised
diff --git a/lib/pleroma/otp_version.ex b/lib/pleroma/otp_version.ex
index 9ced2d27d..114d0054f 100644
--- a/lib/pleroma/otp_version.ex
+++ b/lib/pleroma/otp_version.ex
@@ -3,71 +3,26 @@
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.OTPVersion do
- @type check_status() :: :ok | :undefined | {:error, String.t()}
-
- @spec check!() :: :ok | no_return()
- def check! do
- case 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
-
- @spec check() :: check_status()
- def check do
+ @spec version() :: String.t() | nil
+ def version do
# OTP Version https://erlang.org/doc/system_principles/versions.html#otp-version
[
Path.join(:code.root_dir(), "OTP_VERSION"),
Path.join([:code.root_dir(), "releases", :erlang.system_info(:otp_release), "OTP_VERSION"])
]
|> get_version_from_files()
- |> do_check()
- end
-
- @spec check([Path.t()]) :: check_status()
- def check(paths) do
- paths
- |> get_version_from_files()
- |> do_check()
end
- defp get_version_from_files([]), do: nil
+ @spec get_version_from_files([Path.t()]) :: String.t() | nil
+ def get_version_from_files([]), do: nil
- defp get_version_from_files([path | paths]) do
+ def get_version_from_files([path | paths]) do
if File.exists?(path) do
- File.read!(path)
+ path
+ |> File.read!()
+ |> String.replace(~r/\r|\n|\s/, "")
else
get_version_from_files(paths)
end
end
-
- 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
diff --git a/test/otp_version_test.exs b/test/otp_version_test.exs
index af278cc72..7d2538ec8 100644
--- a/test/otp_version_test.exs
+++ b/test/otp_version_test.exs
@@ -9,30 +9,34 @@ defmodule Pleroma.OTPVersionTest do
describe "check/1" do
test "22.4" do
- assert OTPVersion.check(["test/fixtures/warnings/otp_version/22.4"]) == :ok
+ assert OTPVersion.get_version_from_files(["test/fixtures/warnings/otp_version/22.4"]) ==
+ "22.4"
end
test "22.1" do
- assert OTPVersion.check(["test/fixtures/warnings/otp_version/22.1"]) == {:error, "22.1"}
+ assert OTPVersion.get_version_from_files(["test/fixtures/warnings/otp_version/22.1"]) ==
+ "22.1"
end
test "21.1" do
- assert OTPVersion.check(["test/fixtures/warnings/otp_version/21.1"]) == {:error, "21.1"}
+ assert OTPVersion.get_version_from_files(["test/fixtures/warnings/otp_version/21.1"]) ==
+ "21.1"
end
test "23.0" do
- assert OTPVersion.check(["test/fixtures/warnings/otp_version/23.0"]) == :ok
+ assert OTPVersion.get_version_from_files(["test/fixtures/warnings/otp_version/23.0"]) ==
+ "23.0"
end
test "with non existance file" do
- assert OTPVersion.check([
+ assert OTPVersion.get_version_from_files([
"test/fixtures/warnings/otp_version/non-exising",
"test/fixtures/warnings/otp_version/22.4"
- ]) == :ok
+ ]) == "22.4"
end
test "empty paths" do
- assert OTPVersion.check([]) == :undefined
+ assert OTPVersion.get_version_from_files([]) == nil
end
end
end