mirror of
https://git.pleroma.social/pleroma/pleroma.git
synced 2024-12-23 00:26:30 +00:00
otp version
This commit is contained in:
parent
8d9dee1ba9
commit
6b2fb9160c
3 changed files with 38 additions and 61 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
@spec get_version_from_files([Path.t()]) :: String.t() | nil
|
||||
def get_version_from_files([]), do: nil
|
||||
|
||||
defp 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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue