Merge remote-tracking branch 'pleroma/develop' into cycles-constants
[akkoma] / lib / pleroma / ecto_type / activity_pub / object_validators / recipients.ex
index b76547e7580d5e7116d8d305e192d9ccd7193b9c..06fed8fb3526fbf54f3f718d745146ece6d548a2 100644 (file)
@@ -13,21 +13,29 @@ defmodule Pleroma.EctoType.ActivityPub.ObjectValidators.Recipients do
     cast([object])
   end
 
-  def cast(data) when is_list(data) do
-    data
-    |> Enum.reduce_while({:ok, []}, fn
-      nil, {:ok, list} ->
-        {:cont, {:ok, list}}
+  def cast(object) when is_map(object) do
+    case ObjectID.cast(object) do
+      {:ok, data} -> {:ok, [data]}
+      _ -> :error
+    end
+  end
 
-      element, {:ok, list} ->
+  def cast(data) when is_list(data) do
+    data =
+      data
+      |> Enum.reduce_while([], fn element, list ->
         case ObjectID.cast(element) do
           {:ok, id} ->
-            {:cont, {:ok, [id | list]}}
+            {:cont, [id | list]}
 
           _ ->
-            {:halt, {:error, element}}
+            {:cont, list}
         end
-    end)
+      end)
+      |> Enum.sort()
+      |> Enum.uniq()
+
+    {:ok, data}
   end
 
   def cast(data) do