notifications: fix notification generation for non-create activities
authorWilliam Pitcock <nenolod@dereferenced.org>
Sat, 22 Jun 2019 06:44:47 +0000 (06:44 +0000)
committerWilliam Pitcock <nenolod@dereferenced.org>
Sat, 22 Jun 2019 06:44:47 +0000 (06:44 +0000)
in 300d94c62, an Object.normalize() call was introduced.  calling Object.normalize()
on an activity with a non-object URI (say, a user) causes Really Bad Things to happen.
so don't do that.

lib/pleroma/notification.ex

index e256920068147f8450799e520b60311c9aecd68b..a414afbbfe9e4107b30ce10306cef0e00960e3cc 100644 (file)
@@ -127,8 +127,7 @@ defmodule Pleroma.Notification do
     end
   end
 
-  def create_notifications(%Activity{data: %{"to" => _, "type" => type}} = activity)
-      when type in ["Create", "Like", "Announce", "Follow"] do
+  def create_notifications(%Activity{data: %{"to" => _, "type" => "Create"}} = activity) do
     object = Object.normalize(activity)
 
     unless object && object.data["type"] == "Answer" do
@@ -140,6 +139,13 @@ defmodule Pleroma.Notification do
     end
   end
 
+  def create_notifications(%Activity{data: %{"to" => _, "type" => type}} = activity)
+      when type in ["Like", "Announce", "Follow"] do
+    users = get_notified_from_activity(activity)
+    notifications = Enum.map(users, fn user -> create_notification(activity, user) end)
+    {:ok, notifications}
+  end
+
   def create_notifications(_), do: {:ok, []}
 
   # TODO move to sql, too.