From 4cbf17dac6c9501e9fc711d04540da9afbcad717 Mon Sep 17 00:00:00 2001 From: Roger Braun Date: Tue, 31 Oct 2017 17:30:46 +0100 Subject: [PATCH] Save cws in the activitypub data. --- lib/pleroma/web/common_api/utils.ex | 3 ++- lib/pleroma/web/ostatus/handlers/note_handler.ex | 3 ++- lib/pleroma/web/ostatus/ostatus.ex | 14 +++++++++----- test/web/ostatus/ostatus_test.exs | 4 ++-- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index 06fcc9e8b..83a656011 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -94,11 +94,12 @@ def add_user_links(text, mentions) do end) end - def make_note_data(actor, to, context, content_html, attachments, inReplyTo, tags) do + def make_note_data(actor, to, context, content_html, attachments, inReplyTo, tags, cw \\ nil) do object = %{ "type" => "Note", "to" => to, "content" => content_html, + "summary" => cw, "context" => context, "attachment" => attachments, "actor" => actor, diff --git a/lib/pleroma/web/ostatus/handlers/note_handler.ex b/lib/pleroma/web/ostatus/handlers/note_handler.ex index b151c118a..8747dbb67 100644 --- a/lib/pleroma/web/ostatus/handlers/note_handler.ex +++ b/lib/pleroma/web/ostatus/handlers/note_handler.ex @@ -94,6 +94,7 @@ def handle_note(entry, doc \\ nil) do [author] <- :xmerl_xpath.string('//author[1]', doc), {:ok, actor} <- OStatus.find_make_or_update_user(author), content_html <- OStatus.get_content(entry), + cw <- OStatus.get_cw(entry), inReplyTo <- XML.string_from_xpath("//thr:in-reply-to[1]/@ref", entry), inReplyToActivity <- fetch_replied_to_activity(entry, inReplyTo), inReplyTo <- (inReplyToActivity && inReplyToActivity.data["object"]["id"]) || inReplyTo, @@ -103,7 +104,7 @@ def handle_note(entry, doc \\ nil) do mentions <- get_mentions(entry), to <- make_to_list(actor, mentions), date <- XML.string_from_xpath("//published", entry), - note <- CommonAPI.Utils.make_note_data(actor.ap_id, to, context, content_html, attachments, inReplyToActivity, []), + note <- CommonAPI.Utils.make_note_data(actor.ap_id, to, context, content_html, attachments, inReplyToActivity, [], cw), note <- note |> Map.put("id", id) |> Map.put("tag", tags), note <- note |> Map.put("published", date), note <- note |> Map.put("emoji", get_emoji(entry)), diff --git a/lib/pleroma/web/ostatus/ostatus.ex b/lib/pleroma/web/ostatus/ostatus.ex index bc975f82d..1e8b71357 100644 --- a/lib/pleroma/web/ostatus/ostatus.ex +++ b/lib/pleroma/web/ostatus/ostatus.ex @@ -150,16 +150,20 @@ def get_attachments(entry) do end @doc """ - Gets the content from a an entry. Will add the cw text to the body for cw'd - Mastodon notes. + Gets the content from a an entry. """ def get_content(entry) do - base_content = string_from_xpath("//content", entry) + string_from_xpath("//content", entry) + end + @doc """ + Get the cw that mastodon uses. + """ + def get_cw(entry) do with scope when not is_nil(scope) <- string_from_xpath("//mastodon:scope", entry), cw when not is_nil(cw) <- string_from_xpath("/*/summary", entry) do - "#{cw}
#{base_content}" - else _e -> base_content + cw + else _e -> nil end end diff --git a/test/web/ostatus/ostatus_test.exs b/test/web/ostatus/ostatus_test.exs index 95038b73c..de01612b3 100644 --- a/test/web/ostatus/ostatus_test.exs +++ b/test/web/ostatus/ostatus_test.exs @@ -85,7 +85,7 @@ test "handle incoming notes - Mastodon, with CW" do assert activity.data["type"] == "Create" assert activity.data["object"]["type"] == "Note" assert activity.data["object"]["actor"] == "https://mastodon.social/users/lambadalambda" - assert String.contains?(activity.data["object"]["content"], "technologic") + assert activity.data["object"]["summary"] == "technologic" assert "https://www.w3.org/ns/activitystreams#Public" in activity.data["to"] end @@ -93,7 +93,7 @@ test "handle incoming retweets - Mastodon, with CW" do incoming = File.read!("test/fixtures/cw_retweet.xml") {:ok, [[activity, retweeted_activity]]} = OStatus.handle_incoming(incoming) - assert String.contains?(retweeted_activity.data["object"]["content"], "Hey.") + assert retweeted_activity.data["object"]["summary"] == "Hey." end test "handle incoming notes - GS, subscription, reply" do