Actually fix incoming attachments.
[akkoma] / lib / pleroma / web / activity_pub / activity_pub.ex
index 7c9ddcfe750de84bd604d218e7d2b17c31e9d6a3..d171913f81e11ff440e3391af76fb6fd19ec33fd 100644 (file)
@@ -1,6 +1,7 @@
 defmodule Pleroma.Web.ActivityPub.ActivityPub do
   alias Pleroma.{Activity, Repo, Object, Upload, User, Notification}
   alias Pleroma.Web.ActivityPub.Transmogrifier
+  alias Pleroma.Web.WebFinger
   import Ecto.Query
   import Pleroma.Web.ActivityPub.Utils
   require Logger
@@ -253,6 +254,12 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
     end
   end
 
+  def make_user_from_nickname(nickname) do
+    with {:ok, %{"ap_id" => ap_id}} when not is_nil(ap_id) <- WebFinger.finger(nickname) do
+      make_user_from_ap_id(ap_id)
+    end
+  end
+
   def publish(actor, activity) do
     {:ok, followers} = User.get_followers(actor)
 
@@ -273,6 +280,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
     end
   end
 
+  # TODO:
+  # This will create a Create activity, which we need internally at the moment.
   def fetch_object_from_id(id) do
     if object = Object.get_cached_by_ap_id(id) do
       {:ok, object}
@@ -280,8 +289,13 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
       with {:ok, %{body: body, status_code: code}} when code in 200..299 <- @httpoison.get(id, [Accept: "application/activity+json"], follow_redirect: true, timeout: 10000, recv_timeout: 20000),
            {:ok, data} <- Poison.decode(body),
            data <- Transmogrifier.fix_object(data),
-           %User{} <- User.get_or_fetch_by_ap_id(data["attributedTo"]) do
-        Object.create(data)
+           nil <- Object.get_by_ap_id(data["id"]),
+           %User{} = user <- User.get_or_fetch_by_ap_id(data["attributedTo"]),
+           {:ok, activity} = create(%{to: data["to"], actor: user, context: data["context"], object: data, local: false, additional: %{"cc" => data["cc"]}}) do
+        {:ok, Object.get_by_ap_id(activity.data["object"]["id"])}
+      else
+        object = %Object{} -> {:ok, object}
+        e -> e
       end
     end
   end