summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Gleason <alex@alexgleason.me>2021-06-08 14:03:44 -0500
committerAlex Gleason <alex@alexgleason.me>2021-06-08 14:17:40 -0500
commitbed10ab2c70848756740f251c1d54bdca02dd093 (patch)
tree8029847f4fd1f5c7cd0a1b989a1937c885e260d3
parent5667c02fcefd7a128ca7fcf9ccf09d7efa1e7844 (diff)
ObjectValidators: create ContextID Ecto type
-rw-r--r--lib/pleroma/ecto_type/activity_pub/object_validators/context_id.ex24
-rw-r--r--lib/pleroma/web/activity_pub/object_validators/announce_validator.ex2
-rw-r--r--test/pleroma/web/activity_pub/object_validators/announce_validation_test.exs7
3 files changed, 32 insertions, 1 deletions
diff --git a/lib/pleroma/ecto_type/activity_pub/object_validators/context_id.ex b/lib/pleroma/ecto_type/activity_pub/object_validators/context_id.ex
new file mode 100644
index 000000000..15f47d45f
--- /dev/null
+++ b/lib/pleroma/ecto_type/activity_pub/object_validators/context_id.ex
@@ -0,0 +1,24 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.EctoType.ActivityPub.ObjectValidators.ContextID do
+ use Ecto.Type
+
+ alias Ecto.UUID
+ alias Pleroma.Web.Endpoint
+
+ def type, do: :string
+
+ def cast(context) when is_binary(context), do: {:ok, context}
+
+ def cast(_), do: :error
+
+ def dump(data), do: {:ok, data}
+
+ def load(data), do: {:ok, data}
+
+ def autogenerate do
+ "#{Endpoint.url()}/contexts/#{UUID.generate()}"
+ end
+end
diff --git a/lib/pleroma/web/activity_pub/object_validators/announce_validator.ex b/lib/pleroma/web/activity_pub/object_validators/announce_validator.ex
index a2f752ac3..f216d4391 100644
--- a/lib/pleroma/web/activity_pub/object_validators/announce_validator.ex
+++ b/lib/pleroma/web/activity_pub/object_validators/announce_validator.ex
@@ -23,7 +23,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AnnounceValidator do
field(:type, :string)
field(:object, ObjectValidators.ObjectID)
field(:actor, ObjectValidators.ObjectID)
- field(:context, :string, autogenerate: {Utils, :generate_context_id, []})
+ field(:context, ObjectValidators.ContextID, autogenerate: true)
field(:to, ObjectValidators.Recipients, default: [])
field(:cc, ObjectValidators.Recipients, default: [])
field(:published, ObjectValidators.DateTime)
diff --git a/test/pleroma/web/activity_pub/object_validators/announce_validation_test.exs b/test/pleroma/web/activity_pub/object_validators/announce_validation_test.exs
index 939922127..c854e6b32 100644
--- a/test/pleroma/web/activity_pub/object_validators/announce_validation_test.exs
+++ b/test/pleroma/web/activity_pub/object_validators/announce_validation_test.exs
@@ -33,6 +33,13 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AnnounceValidationTest do
assert {:ok, _object, _meta} = ObjectValidator.validate(valid_announce, [])
end
+ test "autogenerates a context ID", %{valid_announce: valid_announce} do
+ {:ok, %{"context" => context}, _} = ObjectValidator.validate(valid_announce, [])
+
+ assert String.starts_with?(context, "http://localhost:4001/contexts/")
+ assert String.length(context) == 67
+ end
+
test "returns an error if the object can't be found", %{valid_announce: valid_announce} do
without_object =
valid_announce