otp version

This commit is contained in:
Alexander Strizhakov 2020-03-04 09:23:42 +03:00
parent 8d9dee1ba9
commit 6b2fb9160c
No known key found for this signature in database
GPG key ID: 022896A53AEF1381
3 changed files with 38 additions and 61 deletions

View file

@ -43,7 +43,25 @@ def start(_type, _args) do
load_custom_modules() load_custom_modules()
if adapter() == Tesla.Adapter.Gun do 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 end
# Define workers and child supervisors to be supervised # Define workers and child supervisors to be supervised

View file

@ -3,71 +3,26 @@
# SPDX-License-Identifier: AGPL-3.0-only # SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.OTPVersion do defmodule Pleroma.OTPVersion do
@type check_status() :: :ok | :undefined | {:error, String.t()} @spec version() :: String.t() | nil
def version do
@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
# OTP Version https://erlang.org/doc/system_principles/versions.html#otp-version # OTP Version https://erlang.org/doc/system_principles/versions.html#otp-version
[ [
Path.join(:code.root_dir(), "OTP_VERSION"), Path.join(:code.root_dir(), "OTP_VERSION"),
Path.join([:code.root_dir(), "releases", :erlang.system_info(:otp_release), "OTP_VERSION"]) Path.join([:code.root_dir(), "releases", :erlang.system_info(:otp_release), "OTP_VERSION"])
] ]
|> get_version_from_files() |> get_version_from_files()
|> do_check()
end end
@spec check([Path.t()]) :: check_status() @spec get_version_from_files([Path.t()]) :: String.t() | nil
def check(paths) do def get_version_from_files([]), do: nil
paths
|> get_version_from_files()
|> do_check()
end
defp get_version_from_files([]), do: nil def get_version_from_files([path | paths]) do
defp get_version_from_files([path | paths]) do
if File.exists?(path) do if File.exists?(path) do
File.read!(path) path
|> File.read!()
|> String.replace(~r/\r|\n|\s/, "")
else else
get_version_from_files(paths) get_version_from_files(paths)
end end
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 end

View file

@ -9,30 +9,34 @@ defmodule Pleroma.OTPVersionTest do
describe "check/1" do describe "check/1" do
test "22.4" 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 end
test "22.1" do 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 end
test "21.1" do 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 end
test "23.0" do 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 end
test "with non existance file" do 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/non-exising",
"test/fixtures/warnings/otp_version/22.4" "test/fixtures/warnings/otp_version/22.4"
]) == :ok ]) == "22.4"
end end
test "empty paths" do test "empty paths" do
assert OTPVersion.check([]) == :undefined assert OTPVersion.get_version_from_files([]) == nil
end end
end end
end end