diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/web/activity_pub/builder.ex | 23 | ||||
-rw-r--r-- | lib/pleroma/web/activity_pub/ids.ex | 25 | ||||
-rw-r--r-- | lib/pleroma/web/activity_pub/object_validators/announce_validator.ex | 3 | ||||
-rw-r--r-- | lib/pleroma/web/activity_pub/transmogrifier.ex | 5 | ||||
-rw-r--r-- | lib/pleroma/web/activity_pub/utils.ex | 28 | ||||
-rw-r--r-- | lib/pleroma/web/common_api.ex | 3 | ||||
-rw-r--r-- | lib/pleroma/web/common_api/utils.ex | 4 |
7 files changed, 51 insertions, 40 deletions
diff --git a/lib/pleroma/web/activity_pub/builder.ex b/lib/pleroma/web/activity_pub/builder.ex index f56bfc600..97b3dad73 100644 --- a/lib/pleroma/web/activity_pub/builder.ex +++ b/lib/pleroma/web/activity_pub/builder.ex @@ -12,6 +12,7 @@ defmodule Pleroma.Web.ActivityPub.Builder do alias Pleroma.Emoji alias Pleroma.Object alias Pleroma.User + alias Pleroma.Web.ActivityPub.IDs alias Pleroma.Web.ActivityPub.Relay alias Pleroma.Web.ActivityPub.Utils alias Pleroma.Web.ActivityPub.Visibility @@ -20,7 +21,7 @@ defmodule Pleroma.Web.ActivityPub.Builder do def accept_or_reject(actor, activity, type) do data = %{ - "id" => Utils.generate_activity_id(), + "id" => IDs.generate_activity_id(), "actor" => actor.ap_id, "type" => type, "object" => activity.data["id"], @@ -43,7 +44,7 @@ defmodule Pleroma.Web.ActivityPub.Builder do @spec follow(User.t(), User.t()) :: {:ok, map(), keyword()} def follow(follower, followed) do data = %{ - "id" => Utils.generate_activity_id(), + "id" => IDs.generate_activity_id(), "actor" => follower.ap_id, "type" => "Follow", "object" => followed.ap_id, @@ -69,7 +70,7 @@ defmodule Pleroma.Web.ActivityPub.Builder do def undo(actor, object) do {:ok, %{ - "id" => Utils.generate_activity_id(), + "id" => IDs.generate_activity_id(), "actor" => actor.ap_id, "type" => "Undo", "object" => object.data["id"], @@ -97,7 +98,7 @@ defmodule Pleroma.Web.ActivityPub.Builder do {:ok, %{ - "id" => Utils.generate_activity_id(), + "id" => IDs.generate_activity_id(), "actor" => actor.ap_id, "object" => object_id, "to" => to, @@ -115,7 +116,7 @@ defmodule Pleroma.Web.ActivityPub.Builder do {:ok, %{ - "id" => Utils.generate_activity_id(), + "id" => IDs.generate_activity_id(), "actor" => actor.ap_id, "to" => recipients, "object" => object, @@ -127,7 +128,7 @@ defmodule Pleroma.Web.ActivityPub.Builder do def chat_message(actor, recipient, content, opts \\ []) do basic = %{ - "id" => Utils.generate_object_id(), + "id" => IDs.generate_object_id(), "actor" => actor.ap_id, "type" => "ChatMessage", "to" => [recipient], @@ -161,7 +162,7 @@ defmodule Pleroma.Web.ActivityPub.Builder do "inReplyTo" => object.data["id"], "context" => object.data["context"], "published" => DateTime.utc_now() |> DateTime.to_iso8601(), - "id" => Utils.generate_object_id() + "id" => IDs.generate_object_id() }, []} end @@ -193,7 +194,7 @@ defmodule Pleroma.Web.ActivityPub.Builder do {:ok, %{ - "id" => Utils.generate_activity_id(), + "id" => IDs.generate_activity_id(), "type" => "Update", "actor" => actor.ap_id, "object" => object, @@ -205,7 +206,7 @@ defmodule Pleroma.Web.ActivityPub.Builder do def block(blocker, blocked) do {:ok, %{ - "id" => Utils.generate_activity_id(), + "id" => IDs.generate_activity_id(), "type" => "Block", "actor" => blocker.ap_id, "object" => blocked.ap_id, @@ -234,7 +235,7 @@ defmodule Pleroma.Web.ActivityPub.Builder do {:ok, %{ - "id" => Utils.generate_activity_id(), + "id" => IDs.generate_activity_id(), "actor" => actor.ap_id, "object" => object.data["id"], "to" => to, @@ -265,7 +266,7 @@ defmodule Pleroma.Web.ActivityPub.Builder do {:ok, %{ - "id" => Utils.generate_activity_id(), + "id" => IDs.generate_activity_id(), "actor" => actor.ap_id, "object" => object.data["id"], "to" => to, diff --git a/lib/pleroma/web/activity_pub/ids.ex b/lib/pleroma/web/activity_pub/ids.ex new file mode 100644 index 000000000..bc52930a4 --- /dev/null +++ b/lib/pleroma/web/activity_pub/ids.ex @@ -0,0 +1,25 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ActivityPub.IDs do + alias Ecto.UUID + alias Pleroma.Web.Endpoint + alias Pleroma.Web.Router.Helpers, as: Routes + + def generate_activity_id do + generate_id("activities") + end + + def generate_context_id do + generate_id("contexts") + end + + def generate_object_id do + Routes.o_status_url(Endpoint, :object, UUID.generate()) + end + + def generate_id(type) do + "#{Endpoint.url()}/#{type}/#{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 b08a33e68..1eb3960d7 100644 --- a/lib/pleroma/web/activity_pub/object_validators/announce_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/announce_validator.ex @@ -8,6 +8,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AnnounceValidator do alias Pleroma.EctoType.ActivityPub.ObjectValidators alias Pleroma.Object alias Pleroma.User + alias Pleroma.Web.ActivityPub.IDs alias Pleroma.Web.ActivityPub.Utils alias Pleroma.Web.ActivityPub.Visibility @@ -23,7 +24,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, :string, autogenerate: {IDs, :generate_context_id, []}) field(:to, ObjectValidators.Recipients, default: []) field(:cc, ObjectValidators.Recipients, default: []) field(:published, ObjectValidators.DateTime) diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 4d9a5617e..089276dd9 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -15,6 +15,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.Builder + alias Pleroma.Web.ActivityPub.IDs alias Pleroma.Web.ActivityPub.ObjectValidator alias Pleroma.Web.ActivityPub.Pipeline alias Pleroma.Web.ActivityPub.Utils @@ -205,7 +206,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do end def fix_context(object) do - context = object["context"] || object["conversation"] || Utils.generate_context_id() + context = object["context"] || object["conversation"] || IDs.generate_context_id() object |> Map.put("context", context) @@ -395,7 +396,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do # Flag objects are placed ahead of the ID check because Mastodon 2.8 and earlier send them # with nil ID. def handle_incoming(%{"type" => "Flag", "object" => objects, "actor" => actor} = data, _options) do - with context <- data["context"] || Utils.generate_context_id(), + with context <- data["context"] || IDs.generate_context_id(), content <- data["content"] || "", %User{} = actor <- User.get_cached_by_ap_id(actor), # Reduce the object list to find the reported user. diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex index 170dd9371..adafa9af2 100644 --- a/lib/pleroma/web/activity_pub/utils.ex +++ b/lib/pleroma/web/activity_pub/utils.ex @@ -4,7 +4,6 @@ defmodule Pleroma.Web.ActivityPub.Utils do alias Ecto.Changeset - alias Ecto.UUID alias Pleroma.Activity alias Pleroma.Config alias Pleroma.Maps @@ -12,12 +11,11 @@ defmodule Pleroma.Web.ActivityPub.Utils do alias Pleroma.Object alias Pleroma.Repo alias Pleroma.User - alias Pleroma.Web alias Pleroma.Web.ActivityPub.ActivityPub + alias Pleroma.Web.ActivityPub.IDs alias Pleroma.Web.ActivityPub.Visibility alias Pleroma.Web.AdminAPI.AccountView alias Pleroma.Web.Endpoint - alias Pleroma.Web.Router.Helpers import Ecto.Query @@ -107,7 +105,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do %{ "@context" => [ "https://www.w3.org/ns/activitystreams", - "#{Web.Endpoint.url()}/schemas/litepub-0.1.jsonld", + "#{Endpoint.url()}/schemas/litepub-0.1.jsonld", %{ "@language" => "und" } @@ -119,22 +117,6 @@ defmodule Pleroma.Web.ActivityPub.Utils do DateTime.utc_now() |> DateTime.to_iso8601() end - def generate_activity_id do - generate_id("activities") - end - - def generate_context_id do - generate_id("contexts") - end - - def generate_object_id do - Helpers.o_status_url(Endpoint, :object, UUID.generate()) - end - - def generate_id(type) do - "#{Web.Endpoint.url()}/#{type}/#{UUID.generate()}" - end - def get_notified_from_object(%{"type" => type} = object) when type in @supported_object_types do fake_create_activity = %{ "to" => object["to"], @@ -151,7 +133,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do end def create_context(context) do - context = context || generate_id("contexts") + context = context || IDs.generate_id("contexts") # Ecto has problems accessing the constraint inside the jsonb, # so we explicitly check for the existed object before insert @@ -205,7 +187,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do %{data: %{"id" => context}, id: context_id} = create_context(map["context"]) map - |> Map.put_new_lazy("id", &generate_activity_id/0) + |> Map.put_new_lazy("id", &IDs.generate_activity_id/0) |> Map.put_new_lazy("published", &make_date/0) |> Map.put_new("context", context) |> Map.put_new("context_id", context_id) @@ -232,7 +214,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do when is_map(map) do object = map - |> Map.put_new_lazy("id", &generate_object_id/0) + |> Map.put_new_lazy("id", &IDs.generate_object_id/0) |> Map.put_new_lazy("published", &make_date/0) |> Map.put_new("context", activity["context"]) |> Map.put_new("context_id", activity["context_id"]) diff --git a/lib/pleroma/web/common_api.ex b/lib/pleroma/web/common_api.ex index b003e30c7..8936d951b 100644 --- a/lib/pleroma/web/common_api.ex +++ b/lib/pleroma/web/common_api.ex @@ -12,6 +12,7 @@ defmodule Pleroma.Web.CommonAPI do alias Pleroma.UserRelationship alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.Builder + alias Pleroma.Web.ActivityPub.IDs alias Pleroma.Web.ActivityPub.Pipeline alias Pleroma.Web.ActivityPub.Utils alias Pleroma.Web.ActivityPub.Visibility @@ -489,7 +490,7 @@ defmodule Pleroma.Web.CommonAPI do {:ok, {content_html, _, _}} <- make_report_content_html(data[:comment]), {:ok, statuses} <- get_report_statuses(account, data) do ActivityPub.flag(%{ - context: Utils.generate_context_id(), + context: IDs.generate_context_id(), actor: user, account: account, statuses: statuses, diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index 7da8ca48f..a5265ce3e 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -13,7 +13,7 @@ defmodule Pleroma.Web.CommonAPI.Utils do alias Pleroma.Object alias Pleroma.Repo alias Pleroma.User - alias Pleroma.Web.ActivityPub.Utils + alias Pleroma.Web.ActivityPub.IDs alias Pleroma.Web.ActivityPub.Visibility alias Pleroma.Web.CommonAPI.ActivityDraft alias Pleroma.Web.MediaProxy @@ -240,7 +240,7 @@ defmodule Pleroma.Web.CommonAPI.Utils do end def make_context(%Activity{data: %{"context" => context}}, _), do: context - def make_context(_, _), do: Utils.generate_context_id() + def make_context(_, _), do: IDs.generate_context_id() def maybe_add_attachments(parsed, _attachments, false = _no_links), do: parsed |