simplification of formatting host method
authorAlexander Strizhakov <alex.strizhakov@gmail.com>
Tue, 3 Mar 2020 12:44:13 +0000 (15:44 +0300)
committerAlexander Strizhakov <alex.strizhakov@gmail.com>
Tue, 3 Mar 2020 13:42:03 +0000 (16:42 +0300)
case for format_proxy method

lib/pleroma/gun/conn.ex
lib/pleroma/http/adapter.ex
lib/pleroma/http/adapter/gun.ex
test/http/adapter/gun_test.exs
test/http/adapter_test.exs

index ddb9f30b024153fbe91875020baeb5abba1a5396..a33d75558754c5625cebb4017edf0d5c30798425 100644 (file)
@@ -1,5 +1,5 @@
 # Pleroma: A lightweight social networking server
-# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
 # SPDX-License-Identifier: AGPL-3.0-only
 
 defmodule Pleroma.Gun.Conn do
@@ -131,7 +131,7 @@ defmodule Pleroma.Gun.Conn do
   end
 
   defp do_open(%URI{host: host, port: port} = uri, opts) do
-    {_type, host} = Pleroma.HTTP.Adapter.domain_or_ip(host)
+    host = Pleroma.HTTP.Connection.parse_host(host)
 
     with {:ok, conn} <- API.open(host, port, opts),
          {:ok, _} <- API.await_up(conn, opts[:await_up_timeout]) do
@@ -149,7 +149,7 @@ defmodule Pleroma.Gun.Conn do
   end
 
   defp destination_opts(%URI{host: host, port: port}) do
-    {_type, host} = Pleroma.HTTP.Adapter.domain_or_ip(host)
+    host = Pleroma.HTTP.Connection.parse_host(host)
     %{host: host, port: port}
   end
 
index 32046b1d3aba8fd1dcb14695c3100b5cd4766721..a3b84d8f32e748f884a285507f011968f0c62dcb 100644 (file)
@@ -1,5 +1,5 @@
 # Pleroma: A lightweight social networking server
-# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
 # SPDX-License-Identifier: AGPL-3.0-only
 
 defmodule Pleroma.HTTP.Adapter do
@@ -8,7 +8,6 @@ defmodule Pleroma.HTTP.Adapter do
   @type proxy ::
           {Connection.host(), pos_integer()}
           | {Connection.proxy_type(), pos_integer()}
-  @type host_type :: :domain | :ip
 
   @callback options(keyword(), URI.t()) :: keyword()
   @callback after_request(keyword()) :: :ok
@@ -29,9 +28,8 @@ defmodule Pleroma.HTTP.Adapter do
   def format_proxy(nil), do: nil
 
   def format_proxy(proxy_url) do
-    with {:ok, host, port} <- Connection.parse_proxy(proxy_url) do
-      {host, port}
-    else
+    case Connection.parse_proxy(proxy_url) do
+      {:ok, host, port} -> {host, port}
       {:ok, type, host, port} -> {type, host, port}
       _ -> nil
     end
@@ -40,25 +38,4 @@ defmodule Pleroma.HTTP.Adapter do
   @spec maybe_add_proxy(keyword(), proxy() | nil) :: keyword()
   def maybe_add_proxy(opts, nil), do: opts
   def maybe_add_proxy(opts, proxy), do: Keyword.put_new(opts, :proxy, proxy)
-
-  @spec domain_or_fallback(String.t()) :: charlist()
-  def domain_or_fallback(host) do
-    case domain_or_ip(host) do
-      {:domain, domain} -> domain
-      {:ip, _ip} -> to_charlist(host)
-    end
-  end
-
-  @spec domain_or_ip(String.t()) :: {host_type(), Connection.host()}
-  def domain_or_ip(host) do
-    charlist = to_charlist(host)
-
-    case :inet.parse_address(charlist) do
-      {:error, :einval} ->
-        {:domain, :idna.encode(charlist)}
-
-      {:ok, ip} ->
-        {:ip, ip}
-    end
-  end
 end
index 908d71898e6ed7abd93052f9e1a06f8e454e7871..5e88786bd1df23ff4d18659075715fe866765c0f 100644 (file)
@@ -1,5 +1,5 @@
 # Pleroma: A lightweight social networking server
-# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
 # SPDX-License-Identifier: AGPL-3.0-only
 
 defmodule Pleroma.HTTP.Adapter.Gun do
@@ -42,7 +42,7 @@ defmodule Pleroma.HTTP.Adapter.Gun do
   end
 
   defp add_original(opts, %URI{host: host, port: port}) do
-    formatted_host = Adapter.domain_or_fallback(host)
+    formatted_host = format_host(host)
 
     Keyword.put(opts, :original, "#{formatted_host}:#{port}")
   end
@@ -57,8 +57,7 @@ defmodule Pleroma.HTTP.Adapter.Gun do
         cacertfile: CAStore.file_path(),
         depth: 20,
         reuse_sessions: false,
-        verify_fun:
-          {&:ssl_verify_hostname.verify_fun/3, [check_hostname: Adapter.domain_or_fallback(host)]},
+        verify_fun: {&:ssl_verify_hostname.verify_fun/3, [check_hostname: format_host(host)]},
         log_level: :warning
       ]
     ]
@@ -139,4 +138,17 @@ defmodule Pleroma.HTTP.Adapter.Gun do
         opts
     end
   end
+
+  @spec format_host(String.t()) :: charlist()
+  def format_host(host) do
+    host_charlist = to_charlist(host)
+
+    case :inet.parse_address(host_charlist) do
+      {:error, :einval} ->
+        :idna.encode(host_charlist)
+
+      {:ok, _ip} ->
+        host_charlist
+    end
+  end
 end
index a8dcbae04e03ed7ec3857890a67e5ca182b04a74..a05471ac67f766e49f912541f42257fd01657cf9 100644 (file)
@@ -1,5 +1,5 @@
 # Pleroma: A lightweight social networking server
-# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
 # SPDX-License-Identifier: AGPL-3.0-only
 
 defmodule Pleroma.HTTP.Adapter.GunTest do
@@ -264,4 +264,23 @@ defmodule Pleroma.HTTP.Adapter.GunTest do
              } = Connections.get_state(:gun_connections)
     end
   end
+
+  describe "format_host/1" do
+    test "with domain" do
+      assert Gun.format_host("example.com") == 'example.com'
+    end
+
+    test "with idna domain" do
+      assert Gun.format_host("ですexample.com") == 'xn--example-183fne.com'
+    end
+
+    test "with ipv4" do
+      assert Gun.format_host("127.0.0.1") == '127.0.0.1'
+    end
+
+    test "with ipv6" do
+      assert Gun.format_host("2a03:2880:f10c:83:face:b00c:0:25de") ==
+               '2a03:2880:f10c:83:face:b00c:0:25de'
+    end
+  end
 end
index 37e47dabe83bb9e315fead480028fa460bc73941..4c805837ce3508bf3cc713abf45655a5dca95ba3 100644 (file)
@@ -1,5 +1,5 @@
 # Pleroma: A lightweight social networking server
-# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
 # SPDX-License-Identifier: AGPL-3.0-only
 
 defmodule Pleroma.HTTP.AdapterTest do
@@ -7,44 +7,6 @@ defmodule Pleroma.HTTP.AdapterTest do
 
   alias Pleroma.HTTP.Adapter
 
-  describe "domain_or_ip/1" do
-    test "with domain" do
-      assert Adapter.domain_or_ip("example.com") == {:domain, 'example.com'}
-    end
-
-    test "with idna domain" do
-      assert Adapter.domain_or_ip("ですexample.com") == {:domain, 'xn--example-183fne.com'}
-    end
-
-    test "with ipv4" do
-      assert Adapter.domain_or_ip("127.0.0.1") == {:ip, {127, 0, 0, 1}}
-    end
-
-    test "with ipv6" do
-      assert Adapter.domain_or_ip("2a03:2880:f10c:83:face:b00c:0:25de") ==
-               {:ip, {10_755, 10_368, 61_708, 131, 64_206, 45_068, 0, 9_694}}
-    end
-  end
-
-  describe "domain_or_fallback/1" do
-    test "with domain" do
-      assert Adapter.domain_or_fallback("example.com") == 'example.com'
-    end
-
-    test "with idna domain" do
-      assert Adapter.domain_or_fallback("ですexample.com") == 'xn--example-183fne.com'
-    end
-
-    test "with ipv4" do
-      assert Adapter.domain_or_fallback("127.0.0.1") == '127.0.0.1'
-    end
-
-    test "with ipv6" do
-      assert Adapter.domain_or_fallback("2a03:2880:f10c:83:face:b00c:0:25de") ==
-               '2a03:2880:f10c:83:face:b00c:0:25de'
-    end
-  end
-
   describe "format_proxy/1" do
     test "with nil" do
       assert Adapter.format_proxy(nil) == nil