activitypub: add outbox endpoint
[akkoma] / lib / pleroma / web / activity_pub / transmogrifier.ex
index 8b1a26ae5110e67a404d55d4e72654ab0d762b16..d759ca2b2faf21a65074a0a09d7fac1cc21dc6b4 100644 (file)
@@ -210,11 +210,31 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
 
   def prepare_outgoing(%{"type" => type} = data) do
     data = data
+    |> maybe_fix_object_url
     |> Map.put("@context", "https://www.w3.org/ns/activitystreams")
 
     {:ok, data}
   end
 
+  def maybe_fix_object_url(data) do
+    if is_binary(data["object"]) and not String.starts_with?(data["object"], "http") do
+      case ActivityPub.fetch_object_from_id(data["object"]) do
+        {:ok, relative_object} ->
+          if relative_object.data["external_url"] do
+            data = data
+            |> Map.put("object", relative_object.data["external_url"])
+          else
+            data
+          end
+        e ->
+          Logger.error("Couldn't fetch #{data["object"]} #{inspect(e)}")
+          data
+      end
+    else
+      data
+    end
+  end
+
   def add_hashtags(object) do
     tags = (object["tag"] || [])
     |> Enum.map fn (tag) -> %{"href" => Pleroma.Web.Endpoint.url() <> "/tags/#{tag}", "name" => "##{tag}", "type" => "Hashtag"} end