in dev, allow dev FE
[akkoma] / lib / pleroma / web / activity_pub / activity_pub.ex
index 8233bcbf8f36edb05bf6be51ac5079a6241e4df4..8e55df0d8cac2fc955b2394e197be133167ffe89 100644 (file)
@@ -739,9 +739,9 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
     |> fetch_activities(params, :offset)
   end
 
-  defp user_activities_recipients(%{godmode: true}), do: []
+  def user_activities_recipients(%{godmode: true}), do: []
 
-  defp user_activities_recipients(%{reading_user: reading_user}) do
+  def user_activities_recipients(%{reading_user: reading_user}) do
     if not is_nil(reading_user) and reading_user.local do
       [
         Constants.as_public(),
@@ -946,13 +946,15 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
   end
 
   defp restrict_recipients_or_hashtags(query, recipients, _user, hashtag_ids) do
-    from(
-      [activity, object] in query,
-      join: hto in "hashtags_objects",
+    from([activity, object] in query)
+    |> join(:left, [activity, object], hto in "hashtags_objects",
       on: hto.object_id == object.id,
-      where:
-        (hto.hashtag_id in ^hashtag_ids and ^Constants.as_public() in activity.recipients) or
-          fragment("? && ?", ^recipients, activity.recipients)
+      as: :hto
+    )
+    |> where(
+      [activity, object, hto: hto],
+      (hto.hashtag_id in ^hashtag_ids and ^Constants.as_public() in activity.recipients) or
+        fragment("? && ?", ^recipients, activity.recipients)
     )
   end
 
@@ -1529,6 +1531,10 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
   defp normalize_image(urls) when is_list(urls), do: urls |> List.first() |> normalize_image()
   defp normalize_image(_), do: nil
 
+  defp normalize_also_known_as(aka) when is_list(aka), do: aka
+  defp normalize_also_known_as(aka) when is_binary(aka), do: [aka]
+  defp normalize_also_known_as(nil), do: []
+
   defp object_to_user_data(data, additional) do
     fields =
       data
@@ -1574,6 +1580,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
     also_known_as =
       data
       |> Map.get("alsoKnownAs", [])
+      |> normalize_also_known_as()
       |> Enum.filter(fn url ->
         case URI.parse(url) do
           %URI{scheme: "http"} -> true
@@ -1709,7 +1716,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
       {:ok, maybe_update_follow_information(data)}
     else
       # If this has been deleted, only log a debug and not an error
-      {:error, "Object has been deleted" = e} ->
+      {:error, {"Object has been deleted", _, _} = e} ->
         Logger.debug("Could not decode user at fetch #{ap_id}, #{inspect(e)}")
         {:error, e}