aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/web/activity_pub/builder.ex23
-rw-r--r--lib/pleroma/web/activity_pub/ids.ex25
-rw-r--r--lib/pleroma/web/activity_pub/object_validators/announce_validator.ex3
-rw-r--r--lib/pleroma/web/activity_pub/transmogrifier.ex5
-rw-r--r--lib/pleroma/web/activity_pub/utils.ex28
-rw-r--r--lib/pleroma/web/common_api.ex3
-rw-r--r--lib/pleroma/web/common_api/utils.ex4
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