diff options
| author | lain <lain@soykaf.club> | 2018-02-25 10:56:01 +0100 | 
|---|---|---|
| committer | lain <lain@soykaf.club> | 2018-02-25 10:56:01 +0100 | 
| commit | b76de1ecd3def57fb716ca25d44bee398ee4d8e1 (patch) | |
| tree | dd96b75cbadbbba6ba4a04b66d09dad870aa27a9 | |
| parent | 0e9bd6d1485e56f81da8fcde6b40d8981f63b113 (diff) | |
| download | pleroma-b76de1ecd3def57fb716ca25d44bee398ee4d8e1.tar.gz pleroma-b76de1ecd3def57fb716ca25d44bee398ee4d8e1.zip  | |
Some fixes to AP fetching.
| -rw-r--r-- | lib/pleroma/web/activity_pub/transmogrifier.ex | 30 | ||||
| -rw-r--r-- | test/web/activity_pub/transmogrifier_test.exs | 22 | 
2 files changed, 37 insertions, 15 deletions
diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 698cfa0a9..464842f69 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -20,8 +20,24 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do      |> Map.put("actor", object["attributedTo"])      |> fix_attachments      |> fix_context +    |> fix_in_reply_to    end +  def fix_in_reply_to(%{"inReplyTo" => in_reply_to_id} = object) when not is_nil(in_reply_to_id) do +    case ActivityPub.fetch_object_from_id(object["inReplyToAtomUri"] || in_reply_to_id) do +      {:ok, replied_object} -> +        activity = Activity.get_create_activity_by_object_ap_id(replied_object.data["id"]) +        object +        |> Map.put("inReplyTo", replied_object.data["id"]) +        |> Map.put("inReplyToAtomUri", object["inReplyToAtomUri"] || in_reply_to_id) +        |> Map.put("inReplyToStatusId", activity.id) +      e -> +        Logger.error("Couldn't fetch #{object["inReplyTo"]} #{inspect(e)}") +        object +    end +  end +  def fix_in_reply_to(object), do: object +    def fix_context(object) do      object      |> Map.put("context", object["conversation"]) @@ -46,19 +62,6 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do           %User{} = user <- User.get_or_fetch_by_ap_id(data["actor"]) do        object = fix_object(data["object"]) -      replied_to_id = if object["inReplyTo"] do -        case ActivityPub.fetch_object_from_id(object["inReplyTo"]) do -          {:ok, object} -> object.data["id"] -          e -> -            Logger.error("Couldn't fetch #{object["inReplyTo"]} #{inspect(e)}") -            nil -        end -      else -        nil -      end - -      object = Map.put(object, "inReplyTo", replied_to_id || object["inReplyTo"]) -        params = %{          to: data["to"],          object: object, @@ -139,7 +142,6 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do    def prepare_outgoing(%{"type" => "Create", "object" => %{"type" => "Note"} = object} = data) do      object = object      |> prepare_object -      data = data      |> Map.put("object", object)      |> Map.put("@context", "https://www.w3.org/ns/activitystreams") diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index 2e500d11d..43cc94e5f 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -36,7 +36,27 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do        {:ok, returned_activity} = Transmogrifier.handle_incoming(data) -      assert Activity.get_create_activity_by_object_ap_id("tag:shitposter.club,2017-05-05:noticeId=2827873:objectType=comment") +      assert activity = Activity.get_create_activity_by_object_ap_id("tag:shitposter.club,2017-05-05:noticeId=2827873:objectType=comment") +      assert returned_activity.data["object"]["inReplyToAtomUri"] == "https://shitposter.club/notice/2827873" +      assert returned_activity.data["object"]["inReplyToStatusId"] == activity.id +    end + +    test "it works if the activity id isn't an url but an atom-uri is given" do +      data = File.read!("test/fixtures/mastodon-post-activity.json") +      |> Poison.decode! + +      object = data["object"] +      |> Map.put("inReplyToAtomUri", "https://shitposter.club/notice/2827873") +      |> Map.put("inReplyTo", "tag:shitposter.club,2017-05-05:noticeId=2827873:objectType=comment") + +      data = data +      |> Map.put("object", object) + +      {:ok, returned_activity} = Transmogrifier.handle_incoming(data) + +      assert activity = Activity.get_create_activity_by_object_ap_id("tag:shitposter.club,2017-05-05:noticeId=2827873:objectType=comment") +      assert returned_activity.data["object"]["inReplyToAtomUri"] == "https://shitposter.club/notice/2827873" +      assert returned_activity.data["object"]["inReplyToStatusId"] == activity.id      end      test "it works for incoming notices" do  | 
