Convert incoming Updated object into Pleroma format
This commit is contained in:
parent
06da000c5d
commit
01321c88b5
4 changed files with 59 additions and 2 deletions
|
@ -141,6 +141,22 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidator do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def validate(
|
||||||
|
%{"type" => "Update", "object" => %{"type" => objtype} = object} = update_activity,
|
||||||
|
meta
|
||||||
|
)
|
||||||
|
when objtype in ~w[Question Answer Audio Video Event Article Note Page] do
|
||||||
|
with {:ok, object_data} <- cast_and_apply(object),
|
||||||
|
meta = Keyword.put(meta, :object_data, object_data |> stringify_keys),
|
||||||
|
{:ok, update_activity} <-
|
||||||
|
update_activity
|
||||||
|
|> UpdateValidator.cast_and_validate()
|
||||||
|
|> Ecto.Changeset.apply_action(:insert) do
|
||||||
|
update_activity = stringify_keys(update_activity)
|
||||||
|
{:ok, update_activity, meta}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def validate(%{"type" => type} = object, meta)
|
def validate(%{"type" => type} = object, meta)
|
||||||
when type in ~w[Accept Reject Follow Update Like EmojiReact Announce
|
when type in ~w[Accept Reject Follow Update Like EmojiReact Announce
|
||||||
ChatMessage Answer] do
|
ChatMessage Answer] do
|
||||||
|
|
|
@ -49,7 +49,10 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidator do
|
||||||
defp fix_url(%{"url" => url} = data) when is_map(url), do: Map.put(data, "url", url["href"])
|
defp fix_url(%{"url" => url} = data) when is_map(url), do: Map.put(data, "url", url["href"])
|
||||||
defp fix_url(data), do: data
|
defp fix_url(data), do: data
|
||||||
|
|
||||||
defp fix_tag(%{"tag" => tag} = data) when is_list(tag), do: data
|
defp fix_tag(%{"tag" => tag} = data) when is_list(tag) do
|
||||||
|
Map.put(data, "tag", Enum.filter(tag, &is_map/1))
|
||||||
|
end
|
||||||
|
|
||||||
defp fix_tag(%{"tag" => tag} = data) when is_map(tag), do: Map.put(data, "tag", [tag])
|
defp fix_tag(%{"tag" => tag} = data) when is_map(tag), do: Map.put(data, "tag", [tag])
|
||||||
defp fix_tag(data), do: Map.drop(data, ["tag"])
|
defp fix_tag(data), do: Map.drop(data, ["tag"])
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,11 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidatorTest
|
||||||
test "a basic note validates", %{note: note} do
|
test "a basic note validates", %{note: note} do
|
||||||
%{valid?: true} = ArticleNotePageValidator.cast_and_validate(note)
|
%{valid?: true} = ArticleNotePageValidator.cast_and_validate(note)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "a note from factory validates" do
|
||||||
|
note = insert(:note)
|
||||||
|
%{valid?: true} = ArticleNotePageValidator.cast_and_validate(note.data)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
test "a Note from Roadhouse validates" do
|
test "a Note from Roadhouse validates" do
|
||||||
|
|
|
@ -60,7 +60,40 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.UpdateHandlingTest do
|
||||||
|
|
||||||
{:ok, update, _} = Builder.update(other_user, updated_note)
|
{:ok, update, _} = Builder.update(other_user, updated_note)
|
||||||
|
|
||||||
assert {:ok, _update, []} = ObjectValidator.validate(update, [])
|
assert {:ok, _update, _} = ObjectValidator.validate(update, [])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "update note" do
|
||||||
|
test "converts object into Pleroma's format" do
|
||||||
|
mastodon_tags = [
|
||||||
|
%{
|
||||||
|
"icon" => %{
|
||||||
|
"mediaType" => "image/png",
|
||||||
|
"type" => "Image",
|
||||||
|
"url" => "https://somewhere.org/emoji/url/1.png"
|
||||||
|
},
|
||||||
|
"id" => "https://somewhere.org/emoji/1",
|
||||||
|
"name" => ":some_emoji:",
|
||||||
|
"type" => "Emoji",
|
||||||
|
"updated" => "2021-04-07T11:00:00Z"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
user = insert(:user)
|
||||||
|
note = insert(:note, user: user)
|
||||||
|
|
||||||
|
updated_note =
|
||||||
|
note.data
|
||||||
|
|> Map.put("content", "edited content")
|
||||||
|
|> Map.put("tag", mastodon_tags)
|
||||||
|
|
||||||
|
{:ok, update, _} = Builder.update(user, updated_note)
|
||||||
|
|
||||||
|
assert {:ok, _update, meta} = ObjectValidator.validate(update, [])
|
||||||
|
|
||||||
|
assert %{"emoji" => %{"some_emoji" => "https://somewhere.org/emoji/url/1.png"}} =
|
||||||
|
meta[:object_data]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue