web push http_client fix
authorAlexander Strizhakov <alex.strizhakov@gmail.com>
Thu, 1 Oct 2020 10:32:11 +0000 (13:32 +0300)
committerAlexander Strizhakov <alex.strizhakov@gmail.com>
Thu, 1 Oct 2020 10:32:11 +0000 (13:32 +0300)
config/benchmark.exs
config/config.exs
config/test.exs
lib/pleroma/http/web_push.ex [new file with mode: 0644]
lib/pleroma/web/push/impl.ex
test/support/web_push_http_client_mock.ex [deleted file]
test/web/push/impl_test.exs

index e867253ebd021925f4bb11eec6d34a1a9f7c27e1..5567ff26e4694fea7e699b8efccc544c1ff110e3 100644 (file)
@@ -59,8 +59,6 @@ config :web_push_encryption, :vapid_details,
     "BLH1qVhJItRGCfxgTtONfsOKDc9VRAraXw-3NsmjMngWSh7NxOizN6bkuRA7iLTMPS82PjwJAr3UoK9EC1IFrz4",
   private_key: "_-XZ0iebPrRfZ_o0-IatTdszYa8VCH1yLN-JauK7HHA"
 
-config :web_push_encryption, :http_client, Pleroma.Web.WebPushHttpClientMock
-
 config :pleroma, Pleroma.ScheduledActivity,
   daily_user_limit: 2,
   total_user_limit: 3,
index 00624bf001a72d9486d1ec165b52ab7b26db139b..2e6b0796aa6b3ee92ee44ef6943b9153f210110e 100644 (file)
@@ -809,7 +809,7 @@ config :tzdata, :http_client, Pleroma.HTTP.Tzdata
 
 config :ex_aws, http_client: Pleroma.HTTP.ExAws
 
-config :web_push_encryption, http_client: Pleroma.HTTP
+config :web_push_encryption, http_client: Pleroma.HTTP.WebPush
 
 config :pleroma, :instances_favicons, enabled: false
 
index 93a0e2a61c032d63f12850e392b65fc8a44ba6e3..95f860f2f82783445444c303d4783c581a2b2cf0 100644 (file)
@@ -83,8 +83,6 @@ config :web_push_encryption, :vapid_details,
     "BLH1qVhJItRGCfxgTtONfsOKDc9VRAraXw-3NsmjMngWSh7NxOizN6bkuRA7iLTMPS82PjwJAr3UoK9EC1IFrz4",
   private_key: "_-XZ0iebPrRfZ_o0-IatTdszYa8VCH1yLN-JauK7HHA"
 
-config :web_push_encryption, :http_client, Pleroma.Web.WebPushHttpClientMock
-
 config :pleroma, Oban,
   queues: false,
   crontab: false,
diff --git a/lib/pleroma/http/web_push.ex b/lib/pleroma/http/web_push.ex
new file mode 100644 (file)
index 0000000..78148a1
--- /dev/null
@@ -0,0 +1,12 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.HTTP.WebPush do
+  @moduledoc false
+
+  def post(url, payload, headers) do
+    list_headers = Map.to_list(headers)
+    Pleroma.HTTP.post(url, payload, list_headers)
+  end
+end
index 16368485e57d1028e241c8302c103d942cc99123..da535aa68bf93f0fd3e1edcc8335ad657c4059af 100644 (file)
@@ -19,7 +19,7 @@ defmodule Pleroma.Web.Push.Impl do
   @types ["Create", "Follow", "Announce", "Like", "Move"]
 
   @doc "Performs sending notifications for user subscriptions"
-  @spec perform(Notification.t()) :: list(any) | :error
+  @spec perform(Notification.t()) :: list(any) | :error | {:error, :unknown_type}
   def perform(
         %{
           activity: %{data: %{"type" => activity_type}} = activity,
@@ -64,20 +64,20 @@ defmodule Pleroma.Web.Push.Impl do
   @doc "Push message to web"
   def push_message(body, sub, api_key, subscription) do
     case WebPushEncryption.send_web_push(body, sub, api_key) do
-      {:ok, %{status_code: code}} when 400 <= code and code < 500 ->
+      {:ok, %{status: code}} when code in 400..499 ->
         Logger.debug("Removing subscription record")
         Repo.delete!(subscription)
         :ok
 
-      {:ok, %{status_code: code}} when 200 <= code and code < 300 ->
+      {:ok, %{status: code}} when code in 200..299 ->
         :ok
 
-      {:ok, %{status_code: code}} ->
+      {:ok, %{status: code}} ->
         Logger.error("Web Push Notification failed with code: #{code}")
         :error
 
-      _ ->
-        Logger.error("Web Push Notification failed with unknown error")
+      error ->
+        Logger.error("Web Push Notification failed with #{inspect(error)}")
         :error
     end
   end
diff --git a/test/support/web_push_http_client_mock.ex b/test/support/web_push_http_client_mock.ex
deleted file mode 100644 (file)
index 3cd1295..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-# Pleroma: A lightweight social networking server
-# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
-# SPDX-License-Identifier: AGPL-3.0-only
-
-defmodule Pleroma.Web.WebPushHttpClientMock do
-  def get(url, headers \\ [], options \\ []) do
-    {
-      res,
-      %Tesla.Env{status: status}
-    } = Pleroma.HTTP.request(:get, url, "", headers, options)
-
-    {res, %{status_code: status}}
-  end
-
-  def post(url, body, headers \\ [], options \\ []) do
-    {
-      res,
-      %Tesla.Env{status: status}
-    } = Pleroma.HTTP.request(:post, url, body, headers, options)
-
-    {res, %{status_code: status}}
-  end
-end
index c7c17e156185d17d698a39f84bc78cd08e30f902..6cab46696dede96a40a9a4a618f0834ec3892968 100644 (file)
@@ -5,6 +5,8 @@
 defmodule Pleroma.Web.Push.ImplTest do
   use Pleroma.DataCase
 
+  import Pleroma.Factory
+
   alias Pleroma.Notification
   alias Pleroma.Object
   alias Pleroma.User
@@ -12,10 +14,6 @@ defmodule Pleroma.Web.Push.ImplTest do
   alias Pleroma.Web.CommonAPI
   alias Pleroma.Web.Push.Impl
   alias Pleroma.Web.Push.Subscription
-  alias Pleroma.Web.WebPushHttpClientMock
-
-  import Mock
-  import Pleroma.Factory
 
   setup do
     Tesla.Mock.mock(fn
@@ -80,22 +78,6 @@ defmodule Pleroma.Web.Push.ImplTest do
     assert Impl.push_message(@message, @sub, @api_key, %Subscription{}) == :ok
   end
 
-  test_with_mock "uses WebPushHttpClientMock as an HTTP client", WebPushHttpClientMock,
-    post: fn _, _, _ -> {:ok, %{status_code: 200}} end do
-    Impl.push_message(@message, @sub, @api_key, %Subscription{})
-    assert_called(WebPushHttpClientMock.post("https://example.com/example/1234", :_, :_))
-  end
-
-  test_with_mock "uses Pleroma.HTTP as an HTTP client", Pleroma.HTTP,
-    post: fn _, _, _ -> {:ok, %{status_code: 200}} end do
-    client = Application.get_env(:web_push_encryption, :http_client)
-    on_exit(fn -> Application.put_env(:web_push_encryption, :http_client, client) end)
-    Application.put_env(:web_push_encryption, :http_client, Pleroma.HTTP)
-
-    Impl.push_message(@message, @sub, @api_key, %Subscription{})
-    assert_called(Pleroma.HTTP.post("https://example.com/example/1234", :_, :_))
-  end
-
   @tag capture_log: true
   test "fail message sending" do
     assert Impl.push_message(