Merge branch 'finmoji-optional' into 'develop'
[akkoma] / lib / pleroma / web / activity_pub / activity_pub.ex
index dad9c4865b0010c8329c5f1a6cddb97d1d8ff344..fc191addf38ed0820ac872fea861481f18e650c5 100644 (file)
@@ -60,16 +60,14 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
          :ok <- check_actor_is_active(map["actor"]),
          {:ok, map} <- MRF.filter(map),
          :ok <- insert_full_object(map) do
-      {recipients, recipients_to, recipients_cc} = get_recipients(map)
+      {recipients, _, _} = get_recipients(map)
 
       {:ok, activity} =
         Repo.insert(%Activity{
           data: map,
           local: local,
           actor: map["actor"],
-          recipients: recipients,
-          recipients_to: recipients_to,
-          recipients_cc: recipients_cc
+          recipients: recipients
         })
 
       Notification.create_notifications(activity)
@@ -95,6 +93,11 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
           Pleroma.Web.Streamer.stream("public:local", activity)
         end
 
+        activity.data["object"]
+        |> Map.get("tag", [])
+        |> Enum.filter(fn tag -> is_bitstring(tag) end)
+        |> Enum.map(fn tag -> Pleroma.Web.Streamer.stream("hashtag:" <> tag, activity) end)
+
         if activity.data["object"]["attachment"] != [] do
           Pleroma.Web.Streamer.stream("public:media", activity)
 
@@ -415,11 +418,11 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
       activity in query,
       where:
         fragment(
-          "(? && ?) or (? && ?)",
+          "(?->'to' \\?| ?) or (?->'cc' \\?| ?)",
+          activity.data,
           ^recipients_to,
-          activity.recipients_to,
-          ^recipients_cc,
-          activity.recipients_cc
+          activity.data,
+          ^recipients_cc
         )
     )
   end
@@ -680,7 +683,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
       (Pleroma.Web.Salmon.remote_users(activity) ++ followers)
       |> Enum.filter(fn user -> User.ap_enabled?(user) end)
       |> Enum.map(fn %{info: %{"source_data" => data}} ->
-        (data["endpoints"] && data["endpoints"]["sharedInbox"]) || data["inbox"]
+        (is_map(data["endpoints"]) && Map.get(data["endpoints"], "sharedInbox")) || data["inbox"]
       end)
       |> Enum.uniq()
       |> Enum.filter(fn inbox -> should_federate?(inbox, public) end)
@@ -749,9 +752,13 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
              "actor" => data["attributedTo"],
              "object" => data
            },
+           :ok <- Transmogrifier.contain_origin(id, params),
            {:ok, activity} <- Transmogrifier.handle_incoming(params) do
         {:ok, Object.normalize(activity.data["object"])}
       else
+        {:error, {:reject, nil}} ->
+          {:reject, nil}
+
         object = %Object{} ->
           {:ok, object}