diff options
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 |