summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHaelwenn (lanodan) Monnier <contact@hacktivis.me>2021-04-01 13:49:04 +0200
committerHaelwenn (lanodan) Monnier <contact@hacktivis.me>2021-04-05 19:07:45 +0200
commitef36f7fa5cff0a0d364aff192954556b0d2b0d2a (patch)
tree4ea4af4fd7935d7b3c5f1b293fc85535782d77b3
parent7ebfe899007002f5bbf8744a8f0b582e0e13342e (diff)
Move tag fixup to object_validator
-rw-r--r--lib/pleroma/web/activity_pub/object_validator.ex32
-rw-r--r--lib/pleroma/web/activity_pub/pipeline.ex14
2 files changed, 26 insertions, 20 deletions
diff --git a/lib/pleroma/web/activity_pub/object_validator.ex b/lib/pleroma/web/activity_pub/object_validator.ex
index 15784b28c..70d9a35a9 100644
--- a/lib/pleroma/web/activity_pub/object_validator.ex
+++ b/lib/pleroma/web/activity_pub/object_validator.ex
@@ -114,8 +114,33 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidator do
end
def validate(%{"type" => type} = object, meta)
+ when type in ~w[Event Question Audio Video Article] do
+ validator =
+ case type do
+ "Event" -> EventValidator
+ "Question" -> QuestionValidator
+ "Audio" -> AudioVideoValidator
+ "Video" -> AudioVideoValidator
+ "Article" -> ArticleNoteValidator
+ end
+
+ with {:ok, object} <-
+ object
+ |> validator.cast_and_validate()
+ |> Ecto.Changeset.apply_action(:insert) do
+ object = stringify_keys(object)
+
+ # Insert copy of hashtags as strings for the non-hashtag table indexing
+ tag = (object["tag"] || []) ++ Object.hashtags(%Object{data: object})
+ object = Map.put(object, "tag", tag)
+
+ {:ok, object, meta}
+ end
+ end
+
+ def validate(%{"type" => type} = object, meta)
when type in ~w[Accept Reject Follow Update Like EmojiReact Announce
- Event ChatMessage Question Audio Video Article Answer] do
+ ChatMessage Answer] do
validator =
case type do
"Accept" -> AcceptRejectValidator
@@ -125,12 +150,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidator do
"Like" -> LikeValidator
"EmojiReact" -> EmojiReactValidator
"Announce" -> AnnounceValidator
- "Event" -> EventValidator
"ChatMessage" -> ChatMessageValidator
- "Question" -> QuestionValidator
- "Audio" -> AudioVideoValidator
- "Video" -> AudioVideoValidator
- "Article" -> ArticleNoteValidator
"Answer" -> AnswerValidator
end
diff --git a/lib/pleroma/web/activity_pub/pipeline.ex b/lib/pleroma/web/activity_pub/pipeline.ex
index e184a9376..377eccb92 100644
--- a/lib/pleroma/web/activity_pub/pipeline.ex
+++ b/lib/pleroma/web/activity_pub/pipeline.ex
@@ -44,7 +44,6 @@ defmodule Pleroma.Web.ActivityPub.Pipeline do
def do_common_pipeline(message, meta) do
with {_, {:ok, message, meta}} <- {:validate, @object_validator.validate(message, meta)},
- {_, {:ok, message, meta}} <- {:fixup, validation_fixups(message, meta)},
{_, {:ok, message, meta}} <- {:mrf, @mrf.pipeline_filter(message, meta)},
{_, {:ok, message, meta}} <- {:persist, @activity_pub.persist(message, meta)},
{_, {:ok, message, meta}} <- {:side_effects, @side_effects.handle(message, meta)},
@@ -56,19 +55,6 @@ defmodule Pleroma.Web.ActivityPub.Pipeline do
end
end
- defp validation_fixups(message, meta) do
- # Insert copy of hashtags as strings for the non-hashtag table indexing
- message =
- if message["tag"] do
- tag = Object.hashtags(%Object{data: message}) ++ (message["tag"] || [])
- Map.put(message, "tag", tag)
- else
- message
- end
-
- {:ok, message, meta}
- end
-
defp maybe_federate(%Object{}, _), do: {:ok, :not_federated}
defp maybe_federate(%Activity{} = activity, meta) do