activitypub utils: fix recipient check when the message is unaddressed (mastodon)
[akkoma] / lib / pleroma / web / federator / federator.ex
index 8335add9c4ff13b4e5b23da8108a2979dc8db877..078f3ec119baa2206c83d426e88b0fdb38225db8 100644 (file)
@@ -4,7 +4,9 @@ defmodule Pleroma.Web.Federator do
   alias Pleroma.Activity
   alias Pleroma.Web.{WebFinger, Websub}
   alias Pleroma.Web.ActivityPub.ActivityPub
+  alias Pleroma.Web.ActivityPub.Relay
   alias Pleroma.Web.ActivityPub.Transmogrifier
+  alias Pleroma.Web.ActivityPub.Utils
   require Logger
 
   @websub Application.get_env(:pleroma, :websub)
@@ -14,6 +16,10 @@ defmodule Pleroma.Web.Federator do
   @federating Keyword.get(@instance, :federating)
   @max_jobs 20
 
+  def init(args) do
+    {:ok, args}
+  end
+
   def start_link do
     spawn(fn ->
       # 1 minute
@@ -64,6 +70,11 @@ defmodule Pleroma.Web.Federator do
 
         Logger.info(fn -> "Sending #{activity.data["id"]} out via Salmon" end)
         Pleroma.Web.Salmon.publish(actor, activity)
+
+        if Mix.env() != :test do
+          Logger.info(fn -> "Relaying #{activity.data["id"]} out" end)
+          Pleroma.Web.ActivityPub.Relay.publish(activity)
+        end
       end
 
       Logger.info(fn -> "Sending #{activity.data["id"]} out via AP" end)
@@ -87,14 +98,16 @@ defmodule Pleroma.Web.Federator do
   def handle(:incoming_ap_doc, params) do
     Logger.info("Handling incoming AP activity")
 
+    params = Utils.normalize_params(params)
+
     with {:ok, _user} <- ap_enabled_actor(params["actor"]),
-         nil <- Activity.get_by_ap_id(params["id"]),
-         {:ok, activity} <- Transmogrifier.handle_incoming(params) do
+         nil <- Activity.normalize(params["id"]),
+         {:ok, _activity} <- Transmogrifier.handle_incoming(params) do
     else
       %Activity{} ->
         Logger.info("Already had #{params["id"]}")
 
-      e ->
+      _e ->
         # Just drop those for now
         Logger.info("Unhandled activity")
         Logger.info(Poison.encode!(params, pretty: 2))
@@ -154,7 +167,7 @@ defmodule Pleroma.Web.Federator do
     end
   end
 
-  def handle_cast({:enqueue, type, payload, priority}, state)
+  def handle_cast({:enqueue, type, payload, _priority}, state)
       when type in [:incoming_doc, :incoming_ap_doc] do
     %{in: {i_running_jobs, i_queue}, out: {o_running_jobs, o_queue}} = state
     i_queue = enqueue_sorted(i_queue, {type, payload}, 1)
@@ -162,7 +175,7 @@ defmodule Pleroma.Web.Federator do
     {:noreply, %{in: {i_running_jobs, i_queue}, out: {o_running_jobs, o_queue}}}
   end
 
-  def handle_cast({:enqueue, type, payload, priority}, state) do
+  def handle_cast({:enqueue, type, payload, _priority}, state) do
     %{in: {i_running_jobs, i_queue}, out: {o_running_jobs, o_queue}} = state
     o_queue = enqueue_sorted(o_queue, {type, payload}, 1)
     {o_running_jobs, o_queue} = maybe_start_job(o_running_jobs, o_queue)