aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Braun <roger@rogerbraun.net>2017-08-01 14:05:18 +0200
committerRoger Braun <roger@rogerbraun.net>2017-08-01 14:05:18 +0200
commit558ab6e74e631842e39002dffdb99a2867b5acbd (patch)
tree890497a55d96a5f52051e3b96d0216000f95d5d7
parentc3dfa1970f33db5df8eca36cadbf18ccd7229240 (diff)
downloadpleroma-558ab6e74e631842e39002dffdb99a2867b5acbd.tar.gz
Display html links correctly for remote activies.
-rw-r--r--lib/pleroma/web/ostatus/activity_representer.ex27
-rw-r--r--test/web/ostatus/activity_representer_test.exs14
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 @@ defmodule Pleroma.Web.OStatus.ActivityRepresenter 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 @@ defmodule Pleroma.Web.OStatus.ActivityRepresenter do
{: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{<link type="text/html" href="https://mastodon.social/users/lambadalambda/updates/2314748" rel="alternate"/>})
+ end
+
test "a note activity" do
note_activity = insert(:note_activity)