Correctly handle unlisted messages coming in through Ostatus.
authorlain <lain@soykaf.club>
Wed, 7 Mar 2018 14:45:13 +0000 (15:45 +0100)
committerlain <lain@soykaf.club>
Wed, 7 Mar 2018 14:45:13 +0000 (15:45 +0100)
lib/pleroma/web/ostatus/handlers/note_handler.ex
test/web/ostatus/ostatus_test.exs

index 7b7ed2d5a4a09078b1dd5761849867deefd918e7..38f9fc478e381857a00663472bace236297a4d3e 100644 (file)
@@ -88,6 +88,7 @@ defmodule Pleroma.Web.OStatus.NoteHandler do
     end
   end
 
+  # TODO: Clean this up a bit.
   def handle_note(entry, doc \\ nil) do
     with id <- XML.string_from_xpath("//id", entry),
          activity when is_nil(activity) <- Activity.get_create_activity_by_object_ap_id(id),
@@ -104,15 +105,18 @@ defmodule Pleroma.Web.OStatus.NoteHandler do
          mentions <- get_mentions(entry),
          to <- make_to_list(actor, mentions),
          date <- XML.string_from_xpath("//published", entry),
+         unlisted <- XML.string_from_xpath("//mastodon:scope", entry) == "unlisted",
+         cc <- if(unlisted, do: ["https://www.w3.org/ns/activitystreams#Public"], else: []),
          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)),
          note <- add_external_url(note, entry),
+         note <- note |> Map.put("cc", cc),
          # TODO: Handle this case in make_note_data
          note <- (if inReplyTo && !inReplyToActivity, do: note |> Map.put("inReplyTo", inReplyTo), else: note)
       do
-      res = ActivityPub.create(%{to: to, actor: actor, context: context, object: note, published: date, local: false})
+      res = ActivityPub.create(%{to: to, actor: actor, context: context, object: note, published: date, local: false, additional: %{"cc" => cc}})
       User.increase_note_count(actor)
       res
     else
index bb995199cac4c39c8a9b24571209a494f9004df7..7f67b9ec0c63c78db8712952cba49f0345862a9c 100644 (file)
@@ -90,6 +90,15 @@ defmodule Pleroma.Web.OStatusTest do
     assert "https://www.w3.org/ns/activitystreams#Public" in activity.data["to"]
   end
 
+  test "handle incoming unlisted messages, put public into cc" do
+    incoming = File.read!("test/fixtures/mastodon-note-unlisted.xml")
+    {:ok, [activity]} = OStatus.handle_incoming(incoming)
+    refute "https://www.w3.org/ns/activitystreams#Public" in activity.data["to"]
+    assert "https://www.w3.org/ns/activitystreams#Public" in activity.data["cc"]
+    refute "https://www.w3.org/ns/activitystreams#Public" in activity.data["object"]["to"]
+    assert "https://www.w3.org/ns/activitystreams#Public" in activity.data["object"]["cc"]
+  end
+
   test "handle incoming retweets - Mastodon, with CW" do
     incoming = File.read!("test/fixtures/cw_retweet.xml")
     {:ok, [[_activity, retweeted_activity]]} = OStatus.handle_incoming(incoming)