aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlain <lain@soykaf.club>2020-04-28 13:38:02 +0200
committerlain <lain@soykaf.club>2020-04-28 13:38:02 +0200
commit906cf53ab94742327d073f56255f695c91339295 (patch)
treee530404fadb5e72628d44b6ce0370f86dd40ee10
parent3d040b1a87da66ed53a763f781477bd4f5a146d3 (diff)
downloadpleroma-906cf53ab94742327d073f56255f695c91339295.tar.gz
Recipient Type: Cast all elements as ObjectIDs.
-rw-r--r--lib/pleroma/web/activity_pub/object_validators/types/recipients.ex15
-rw-r--r--test/web/activity_pub/object_validators/types/recipients_test.exs12
2 files changed, 25 insertions, 2 deletions
diff --git a/lib/pleroma/web/activity_pub/object_validators/types/recipients.ex b/lib/pleroma/web/activity_pub/object_validators/types/recipients.ex
index 5a3040842..48fe61e1a 100644
--- a/lib/pleroma/web/activity_pub/object_validators/types/recipients.ex
+++ b/lib/pleroma/web/activity_pub/object_validators/types/recipients.ex
@@ -1,13 +1,24 @@
defmodule Pleroma.Web.ActivityPub.ObjectValidators.Types.Recipients do
use Ecto.Type
- def type, do: {:array, :string}
+ alias Pleroma.Web.ActivityPub.ObjectValidators.Types.ObjectID
+
+ def type, do: {:array, ObjectID}
def cast(object) when is_binary(object) do
cast([object])
end
- def cast([_ | _] = data), do: {:ok, data}
+ def cast(data) when is_list(data) do
+ data
+ |> Enum.reduce({:ok, []}, fn element, acc ->
+ case {acc, ObjectID.cast(element)} do
+ {:error, _} -> :error
+ {_, :error} -> :error
+ {{:ok, list}, {:ok, id}} -> {:ok, [id | list]}
+ end
+ end)
+ end
def cast(_) do
:error
diff --git a/test/web/activity_pub/object_validators/types/recipients_test.exs b/test/web/activity_pub/object_validators/types/recipients_test.exs
index 2f9218774..f278f039b 100644
--- a/test/web/activity_pub/object_validators/types/recipients_test.exs
+++ b/test/web/activity_pub/object_validators/types/recipients_test.exs
@@ -2,11 +2,23 @@ defmodule Pleroma.Web.ObjectValidators.Types.RecipientsTest do
alias Pleroma.Web.ActivityPub.ObjectValidators.Types.Recipients
use Pleroma.DataCase
+ test "it asserts that all elements of the list are object ids" do
+ list = ["https://lain.com/users/lain", "invalid"]
+
+ assert :error == Recipients.cast(list)
+ end
+
test "it works with a list" do
list = ["https://lain.com/users/lain"]
assert {:ok, list} == Recipients.cast(list)
end
+ test "it works with a list with whole objects" do
+ list = ["https://lain.com/users/lain", %{"id" => "https://gensokyo.2hu/users/raymoo"}]
+ resulting_list = ["https://gensokyo.2hu/users/raymoo", "https://lain.com/users/lain"]
+ assert {:ok, resulting_list} == Recipients.cast(list)
+ end
+
test "it turns a single string into a list" do
recipient = "https://lain.com/users/lain"