From 558ab6e74e631842e39002dffdb99a2867b5acbd Mon Sep 17 00:00:00 2001 From: Roger Braun Date: Tue, 1 Aug 2017 14:05:18 +0200 Subject: [PATCH] Display html links correctly for remote activies. --- .../web/ostatus/activity_representer.ex | 27 ++++++++++++++++--- .../web/ostatus/activity_representer_test.exs | 14 ++++++++++ 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/web/ostatus/activity_representer.ex b/lib/pleroma/web/ostatus/activity_representer.ex index 03e3d26bd..a129fac23 100644 --- a/lib/pleroma/web/ostatus/activity_representer.ex +++ b/lib/pleroma/web/ostatus/activity_representer.ex @@ -24,6 +24,29 @@ defp get_mentions(to) do end) end + defp get_links(%{local: true, data: data}) do + h = fn(str) -> [to_charlist(str)] end + [ + {:link, [type: ['application/atom+xml'], href: h.(data["object"]["id"]), rel: 'self'], []}, + {:link, [type: ['text/html'], href: h.(data["object"]["id"]), rel: 'alternate'], []} + ] + end + + defp get_links(%{local: false, + data: %{ + "object" => %{ + "external_url" => external_url + } + }}) do + + h = fn(str) -> [to_charlist(str)] end + [ + {:link, [type: ['text/html'], href: h.(external_url), rel: 'alternate'], []} + ] + end + + defp get_links(_activity), do: [] + def to_simple_form(activity, user, with_author \\ false) def to_simple_form(%{data: %{"object" => %{"type" => "Note"}}} = activity, user, with_author) do h = fn(str) -> [to_charlist(str)] end @@ -53,9 +76,7 @@ def to_simple_form(%{data: %{"object" => %{"type" => "Note"}}} = activity, user, {:updated, h.(updated_at)}, {:"ostatus:conversation", [], h.(activity.data["context"])}, {:link, [ref: h.(activity.data["context"]), rel: 'ostatus:conversation'], []}, - {:link, [type: ['application/atom+xml'], href: h.(activity.data["object"]["id"]), rel: 'self'], []}, - {:link, [type: ['text/html'], href: h.(activity.data["object"]["id"]), rel: 'alternate'], []} - ] ++ categories ++ attachments ++ in_reply_to ++ author ++ mentions + ] ++ get_links(activity) ++ categories ++ attachments ++ in_reply_to ++ author ++ mentions end def to_simple_form(%{data: %{"type" => "Like"}} = activity, user, with_author) do diff --git a/test/web/ostatus/activity_representer_test.exs b/test/web/ostatus/activity_representer_test.exs index c706c1e07..171a8bae7 100644 --- a/test/web/ostatus/activity_representer_test.exs +++ b/test/web/ostatus/activity_representer_test.exs @@ -4,9 +4,23 @@ defmodule Pleroma.Web.OStatus.ActivityRepresenterTest do alias Pleroma.Web.OStatus.ActivityRepresenter alias Pleroma.{User, Activity, Object} alias Pleroma.Web.ActivityPub.ActivityPub + alias Pleroma.Web.OStatus import Pleroma.Factory + test "an external note activity" do + incoming = File.read!("test/fixtures/mastodon-note-cw.xml") + {:ok, [activity]} = OStatus.handle_incoming(incoming) + + user = User.get_cached_by_ap_id(activity.data["actor"]) + + tuple = ActivityRepresenter.to_simple_form(activity, user) + + res = :xmerl.export_simple_content(tuple, :xmerl_xml) |> IO.iodata_to_binary + + assert String.contains?(res, ~s{}) + end + test "a note activity" do note_activity = insert(:note_activity)