aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorlain <lain@soykaf.club>2020-04-29 14:25:33 +0200
committerlain <lain@soykaf.club>2020-04-29 14:25:33 +0200
commita88734a0a22810bcc47c17fc9120ef7881d670d8 (patch)
tree752c9bff4b880bf4f9d98803e5fe55c5d27b2163 /lib
parent53e3063bd041409da83483e8f5c47030bf346123 (diff)
downloadpleroma-a88734a0a22810bcc47c17fc9120ef7881d670d8.tar.gz
Transmogrifier: Fetch missing actors for chatmessages.
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/web/activity_pub/object_validator.ex9
-rw-r--r--lib/pleroma/web/activity_pub/object_validators/create_chat_message_validator.ex2
-rw-r--r--lib/pleroma/web/activity_pub/transmogrifier.ex8
3 files changed, 14 insertions, 5 deletions
diff --git a/lib/pleroma/web/activity_pub/object_validator.ex b/lib/pleroma/web/activity_pub/object_validator.ex
index bada3509d..50904ed59 100644
--- a/lib/pleroma/web/activity_pub/object_validator.ex
+++ b/lib/pleroma/web/activity_pub/object_validator.ex
@@ -11,6 +11,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidator do
alias Pleroma.Object
alias Pleroma.User
+ alias Pleroma.Web.ActivityPub.ObjectValidators.Types
alias Pleroma.Web.ActivityPub.ObjectValidators.ChatMessageValidator
alias Pleroma.Web.ActivityPub.ObjectValidators.CreateChatMessageValidator
alias Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator
@@ -67,8 +68,14 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidator do
|> Map.new(fn {key, val} -> {to_string(key), val} end)
end
+ def fetch_actor(object) do
+ with {:ok, actor} <- Types.ObjectID.cast(object["actor"]) do
+ User.get_or_fetch_by_ap_id(actor)
+ end
+ end
+
def fetch_actor_and_object(object) do
- User.get_or_fetch_by_ap_id(object["actor"])
+ fetch_actor(object)
Object.normalize(object["object"])
:ok
end
diff --git a/lib/pleroma/web/activity_pub/object_validators/create_chat_message_validator.ex b/lib/pleroma/web/activity_pub/object_validators/create_chat_message_validator.ex
index dfc91bf71..88e903182 100644
--- a/lib/pleroma/web/activity_pub/object_validators/create_chat_message_validator.ex
+++ b/lib/pleroma/web/activity_pub/object_validators/create_chat_message_validator.ex
@@ -12,6 +12,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.CreateChatMessageValidator do
alias Pleroma.Web.ActivityPub.ObjectValidators.Types
import Ecto.Changeset
+ import Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations
@primary_key false
@@ -42,6 +43,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.CreateChatMessageValidator do
cng
|> validate_required([:id, :actor, :to, :type, :object])
|> validate_inclusion(:type, ["Create"])
+ |> validate_actor_presence()
|> validate_recipients_match(meta)
|> validate_object_nonexistence()
end
diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex
index 3c2fe73a3..6dbd3f588 100644
--- a/lib/pleroma/web/activity_pub/transmogrifier.ex
+++ b/lib/pleroma/web/activity_pub/transmogrifier.ex
@@ -647,10 +647,10 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
%{"type" => "Create", "object" => %{"type" => "ChatMessage"}} = data,
_options
) do
- case Pipeline.common_pipeline(data, local: false) do
- {:ok, activity, _} ->
- {:ok, activity}
-
+ with {:ok, %User{}} <- ObjectValidator.fetch_actor(data),
+ {:ok, activity, _} <- Pipeline.common_pipeline(data, local: false) do
+ {:ok, activity}
+ else
e ->
e
end