From 1a001588e80e1ff7088472e3faaf754617d63973 Mon Sep 17 00:00:00 2001 From: Roger Braun Date: Thu, 24 Aug 2017 12:54:01 +0200 Subject: [PATCH] Don't break on empty mentions. --- lib/pleroma/web/ostatus/handlers/note_handler.ex | 5 +++-- lib/pleroma/web/twitter_api/twitter_api.ex | 6 +++++- test/web/ostatus/ostatus_test.exs | 7 +++++++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/web/ostatus/handlers/note_handler.ex b/lib/pleroma/web/ostatus/handlers/note_handler.ex index e67f67b37..f9aa463a0 100644 --- a/lib/pleroma/web/ostatus/handlers/note_handler.ex +++ b/lib/pleroma/web/ostatus/handlers/note_handler.ex @@ -55,8 +55,9 @@ def get_collection_mentions(entry) do end def get_mentions(entry) do - get_people_mentions(entry) - ++ get_collection_mentions(entry) + (get_people_mentions(entry) + ++ get_collection_mentions(entry)) + |> Enum.filter(&(&1)) end def make_to_list(actor, mentions) do diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex index dc66e27ad..de39834ca 100644 --- a/lib/pleroma/web/twitter_api/twitter_api.ex +++ b/lib/pleroma/web/twitter_api/twitter_api.ex @@ -270,7 +270,11 @@ defp activity_to_status(activity, opts) do user = User.get_cached_by_ap_id(actor) # mentioned_users = Repo.all(from user in User, where: user.ap_id in ^activity.data["to"]) mentioned_users = Enum.map(activity.data["to"] || [], fn (ap_id) -> - User.get_cached_by_ap_id(ap_id) + if ap_id do + User.get_cached_by_ap_id(ap_id) + else + nil + end end) |> Enum.filter(&(&1)) diff --git a/test/web/ostatus/ostatus_test.exs b/test/web/ostatus/ostatus_test.exs index 44d687d8e..8dd3c3b54 100644 --- a/test/web/ostatus/ostatus_test.exs +++ b/test/web/ostatus/ostatus_test.exs @@ -346,4 +346,11 @@ test "insert or update a user from given data" do assert {:ok, %User{}} = OStatus.insert_or_update_user(data) end + + test "it doesn't add nil in the do field" do + incoming = File.read!("test/fixtures/nil_mention_entry.xml") + {:ok, [activity]} = OStatus.handle_incoming(incoming) + + assert activity.data["to"] == ["http://localhost:4001/users/atarifrosch@social.stopwatchingus-heidelberg.de/followers", "https://www.w3.org/ns/activitystreams#Public"] + end end