Merge branch '534_federation_targets_reachability' into 'develop'
[akkoma] / lib / pleroma / web / salmon / salmon.ex
index 848131d52769be2636349698d042411fde1f6105..07ca42a5f0aef095c94909b3ad9c4f3b6792c709 100644 (file)
@@ -164,34 +164,28 @@ defmodule Pleroma.Web.Salmon do
 
   # push an activity to remote accounts
   #
-  defp send_to_user(%{info: %{salmon: salmon}}, feed, poster),
+  def send_to_user(%{info: %{salmon: salmon}}, feed, poster),
     do: send_to_user(salmon, feed, poster)
 
-  defp send_to_user(url, feed, poster) when is_binary(url) do
-    with {:reachable, true} <- {:reachable, Instances.reachable?(url)},
-         {:ok, %{status: code}} when code in 200..299 <-
+  def send_to_user(url, feed, poster) when is_binary(url) do
+    with {:ok, %{status: code}} when code in 200..299 <-
            poster.(
              url,
              feed,
-             [
-               {"Content-Type", "application/magic-envelope+xml"},
-               {"referer", Pleroma.Web.Endpoint.url()}
-             ]
+             [{"Content-Type", "application/magic-envelope+xml"}]
            ) do
       Instances.set_reachable(url)
       Logger.debug(fn -> "Pushed to #{url}, code #{code}" end)
+      :ok
     else
-      {:reachable, false} ->
-        Logger.debug(fn -> "Pushing Salmon to #{url} skipped as marked unreachable)" end)
-        :noop
-
       e ->
         Instances.set_unreachable(url)
         Logger.debug(fn -> "Pushing Salmon to #{url} failed, #{inspect(e)}" end)
+        :error
     end
   end
 
-  defp send_to_user(_, _, _), do: nil
+  def send_to_user(_, _, _), do: :noop
 
   @supported_activities [
     "Create",
@@ -229,10 +223,8 @@ defmodule Pleroma.Web.Salmon do
       remote_users
       |> Enum.filter(&(&1.info.salmon in reachable_salmon_urls))
       |> Enum.each(fn remote_user ->
-        Task.start(fn ->
-          Logger.debug(fn -> "Sending Salmon to #{remote_user.ap_id}" end)
-          send_to_user(remote_user, feed, poster)
-        end)
+        Logger.debug(fn -> "Sending Salmon to #{remote_user.ap_id}" end)
+        Pleroma.Web.Federator.enqueue(:publish_single_salmon, {remote_user, feed, poster})
       end)
     end
   end