otp_version refactor
This commit is contained in:
parent
3ecdead31a
commit
4c8569d403
5 changed files with 60 additions and 87 deletions
|
@ -66,17 +66,24 @@ defmodule Pleroma.Application do
|
||||||
Pleroma.Gopher.Server
|
Pleroma.Gopher.Server
|
||||||
]
|
]
|
||||||
|
|
||||||
case Pleroma.OTPVersion.check_version() do
|
if adapter() == Tesla.Adapter.Gun do
|
||||||
:ok -> :ok
|
case Pleroma.OTPVersion.check() do
|
||||||
{:error, version} -> raise "
|
:ok ->
|
||||||
|
:ok
|
||||||
|
|
||||||
|
{:error, version} ->
|
||||||
|
raise "
|
||||||
!!!OTP VERSION WARNING!!!
|
!!!OTP VERSION WARNING!!!
|
||||||
You are using gun adapter with OTP version #{version}, which doesn't support correct handling of unordered certificates chains.
|
You are using gun adapter with OTP version #{version}, which doesn't support correct handling of unordered certificates chains.
|
||||||
"
|
"
|
||||||
:undefined -> raise "
|
|
||||||
|
:undefined ->
|
||||||
|
raise "
|
||||||
!!!OTP VERSION WARNING!!!
|
!!!OTP VERSION WARNING!!!
|
||||||
To support correct handling of unordered certificates chains - OTP version must be > 22.2.
|
To support correct handling of unordered certificates chains - OTP version must be > 22.2.
|
||||||
"
|
"
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# See http://elixir-lang.org/docs/stable/elixir/Supervisor.html
|
# See http://elixir-lang.org/docs/stable/elixir/Supervisor.html
|
||||||
# for other strategies and supported options
|
# for other strategies and supported options
|
||||||
|
@ -202,11 +209,7 @@ defmodule Pleroma.Application do
|
||||||
[hackney_pool, Pleroma.Pool.Supervisor]
|
[hackney_pool, Pleroma.Pool.Supervisor]
|
||||||
end
|
end
|
||||||
|
|
||||||
defp http_pools_children(_) do
|
defp http_pools_children(_), do: http_pools(adapter())
|
||||||
:tesla
|
|
||||||
|> Application.get_env(:adapter)
|
|
||||||
|> http_pools()
|
|
||||||
end
|
|
||||||
|
|
||||||
defp http_pools(Tesla.Adapter.Hackney) do
|
defp http_pools(Tesla.Adapter.Hackney) do
|
||||||
pools = [:federation, :media]
|
pools = [:federation, :media]
|
||||||
|
@ -227,4 +230,6 @@ defmodule Pleroma.Application do
|
||||||
defp http_pools(Tesla.Adapter.Gun), do: [Pleroma.Pool.Supervisor]
|
defp http_pools(Tesla.Adapter.Gun), do: [Pleroma.Pool.Supervisor]
|
||||||
|
|
||||||
defp http_pools(_), do: []
|
defp http_pools(_), do: []
|
||||||
|
|
||||||
|
defp adapter, do: Application.get_env(:tesla, :adapter)
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,63 +1,53 @@
|
||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
defmodule Pleroma.OTPVersion do
|
defmodule Pleroma.OTPVersion do
|
||||||
@type check_status() :: :undefined | {:error, String.t()} | :ok
|
@type check_status() :: :ok | :undefined | {:error, String.t()}
|
||||||
|
|
||||||
require Logger
|
@spec check() :: check_status()
|
||||||
|
def check do
|
||||||
@spec check_version() :: check_status()
|
|
||||||
def check_version 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
|
||||||
paths = [
|
[
|
||||||
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()
|
||||||
:tesla
|
|> do_check()
|
||||||
|> Application.get_env(:adapter)
|
|
||||||
|> get_and_check_version(paths)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec get_and_check_version(module(), [Path.t()]) :: check_status()
|
@spec check([Path.t()]) :: check_status()
|
||||||
def get_and_check_version(Tesla.Adapter.Gun, paths) do
|
def check(paths) do
|
||||||
paths
|
paths
|
||||||
|> check_files()
|
|> get_version_from_files()
|
||||||
|> check_version()
|
|> do_check()
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_and_check_version(_, _), do: :ok
|
defp get_version_from_files([]), do: nil
|
||||||
|
|
||||||
defp check_files([]), do: nil
|
defp get_version_from_files([path | paths]) do
|
||||||
|
|
||||||
defp check_files([path | paths]) do
|
|
||||||
if File.exists?(path) do
|
if File.exists?(path) do
|
||||||
File.read!(path)
|
File.read!(path)
|
||||||
else
|
else
|
||||||
check_files(paths)
|
get_version_from_files(paths)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defp check_version(nil), do: :undefined
|
defp do_check(nil), do: :undefined
|
||||||
|
|
||||||
defp check_version(version) do
|
defp do_check(version) do
|
||||||
try do
|
|
||||||
version = String.replace(version, ~r/\r|\n|\s/, "")
|
version = String.replace(version, ~r/\r|\n|\s/, "")
|
||||||
|
|
||||||
formatted =
|
[major, minor] =
|
||||||
version
|
version
|
||||||
|> String.split(".")
|
|> String.split(".")
|
||||||
|> Enum.map(&String.to_integer/1)
|
|> Enum.map(&String.to_integer/1)
|
||||||
|> Enum.take(2)
|
|> Enum.take(2)
|
||||||
|
|
||||||
with [major, minor] when length(formatted) == 2 <- formatted,
|
if (major == 22 and minor >= 2) or major > 22 do
|
||||||
true <- (major == 22 and minor >= 2) or major > 22 do
|
|
||||||
:ok
|
:ok
|
||||||
else
|
else
|
||||||
false -> {:error, version}
|
{:error, version}
|
||||||
_ -> :undefined
|
|
||||||
end
|
|
||||||
rescue
|
|
||||||
_ -> :undefined
|
|
||||||
catch
|
|
||||||
_ -> :undefined
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
1
test/fixtures/warnings/otp_version/error
vendored
1
test/fixtures/warnings/otp_version/error
vendored
|
@ -1 +0,0 @@
|
||||||
22
|
|
1
test/fixtures/warnings/otp_version/undefined
vendored
1
test/fixtures/warnings/otp_version/undefined
vendored
|
@ -1 +0,0 @@
|
||||||
undefined
|
|
|
@ -1,58 +1,38 @@
|
||||||
|
# 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
|
defmodule Pleroma.OTPVersionTest do
|
||||||
use ExUnit.Case, async: true
|
use ExUnit.Case, async: true
|
||||||
|
|
||||||
alias Pleroma.OTPVersion
|
alias Pleroma.OTPVersion
|
||||||
|
|
||||||
describe "get_and_check_version/2" do
|
describe "check/1" do
|
||||||
test "22.4" do
|
test "22.4" do
|
||||||
assert OTPVersion.get_and_check_version(Tesla.Adapter.Gun, [
|
assert OTPVersion.check(["test/fixtures/warnings/otp_version/22.4"]) == :ok
|
||||||
"test/fixtures/warnings/otp_version/22.4"
|
|
||||||
]) == :ok
|
|
||||||
end
|
end
|
||||||
|
|
||||||
test "22.1" do
|
test "22.1" do
|
||||||
assert OTPVersion.get_and_check_version(Tesla.Adapter.Gun, [
|
assert OTPVersion.check(["test/fixtures/warnings/otp_version/22.1"]) == {:error, "22.1"}
|
||||||
"test/fixtures/warnings/otp_version/22.1"
|
|
||||||
]) == {:error, "22.1"}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
test "21.1" do
|
test "21.1" do
|
||||||
assert OTPVersion.get_and_check_version(Tesla.Adapter.Gun, [
|
assert OTPVersion.check(["test/fixtures/warnings/otp_version/21.1"]) == {:error, "21.1"}
|
||||||
"test/fixtures/warnings/otp_version/21.1"
|
|
||||||
]) == {:error, "21.1"}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
test "23.0" do
|
test "23.0" do
|
||||||
assert OTPVersion.get_and_check_version(Tesla.Adapter.Gun, [
|
assert OTPVersion.check(["test/fixtures/warnings/otp_version/23.0"]) == :ok
|
||||||
"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
|
|
||||||
end
|
end
|
||||||
|
|
||||||
test "with non existance file" do
|
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/non-exising",
|
||||||
"test/fixtures/warnings/otp_version/22.4"
|
"test/fixtures/warnings/otp_version/22.4"
|
||||||
]) == :ok
|
]) == :ok
|
||||||
end
|
end
|
||||||
|
|
||||||
test "empty paths" do
|
test "empty paths" do
|
||||||
assert OTPVersion.get_and_check_version(Tesla.Adapter.Gun, []) == :undefined
|
assert OTPVersion.check([]) == :undefined
|
||||||
end
|
|
||||||
|
|
||||||
test "another adapter" do
|
|
||||||
assert OTPVersion.get_and_check_version(Tesla.Adapter.Hackney, []) == :ok
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue