mirror of
https://git.pleroma.social/pleroma/pleroma.git
synced 2024-12-23 00:26:30 +00:00
Merge branch 'bugfix-ccworks' into 'develop'
Bugfix for ccworks AP bridge Closes #3234 See merge request pleroma/pleroma!4043
This commit is contained in:
commit
d19642d7eb
7 changed files with 52 additions and 5 deletions
1
changelog.d/bugfix-ccworks.fix
Normal file
1
changelog.d/bugfix-ccworks.fix
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Fix federation with Convergence AP Bridge
|
|
@ -1,5 +1,5 @@
|
||||||
# Pleroma: A lightweight social networking server
|
# Pleroma: A lightweight social networking server
|
||||||
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
|
# Copyright © 2017-2024 Pleroma Authors <https://pleroma.social/>
|
||||||
# SPDX-License-Identifier: AGPL-3.0-only
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
defmodule Pleroma.Maps do
|
defmodule Pleroma.Maps do
|
||||||
|
@ -18,4 +18,17 @@ defmodule Pleroma.Maps do
|
||||||
rescue
|
rescue
|
||||||
_ -> data
|
_ -> data
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def filter_empty_values(data) do
|
||||||
|
# TODO: Change to Map.filter in Elixir 1.13+
|
||||||
|
data
|
||||||
|
|> Enum.filter(fn
|
||||||
|
{_k, nil} -> false
|
||||||
|
{_k, ""} -> false
|
||||||
|
{_k, []} -> false
|
||||||
|
{_k, %{} = v} -> Map.keys(v) != []
|
||||||
|
{_k, _v} -> true
|
||||||
|
end)
|
||||||
|
|> Map.new()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
defmodule Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes do
|
defmodule Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes do
|
||||||
alias Pleroma.EctoType.ActivityPub.ObjectValidators
|
alias Pleroma.EctoType.ActivityPub.ObjectValidators
|
||||||
|
alias Pleroma.Maps
|
||||||
alias Pleroma.Object
|
alias Pleroma.Object
|
||||||
alias Pleroma.Object.Containment
|
alias Pleroma.Object.Containment
|
||||||
alias Pleroma.User
|
alias Pleroma.User
|
||||||
|
@ -24,6 +25,8 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes do
|
||||||
end
|
end
|
||||||
|
|
||||||
def fix_object_defaults(data) do
|
def fix_object_defaults(data) do
|
||||||
|
data = Maps.filter_empty_values(data)
|
||||||
|
|
||||||
context =
|
context =
|
||||||
Utils.maybe_create_context(
|
Utils.maybe_create_context(
|
||||||
data["context"] || data["conversation"] || data["inReplyTo"] || data["id"]
|
data["context"] || data["conversation"] || data["inReplyTo"] || data["id"]
|
||||||
|
|
|
@ -336,10 +336,6 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
|
||||||
|
|
||||||
def fix_tag(object), do: object
|
def fix_tag(object), do: object
|
||||||
|
|
||||||
def fix_content_map(%{"contentMap" => nil} = object) do
|
|
||||||
Map.drop(object, ["contentMap"])
|
|
||||||
end
|
|
||||||
|
|
||||||
# content map usually only has one language so this will do for now.
|
# content map usually only has one language so this will do for now.
|
||||||
def fix_content_map(%{"contentMap" => content_map} = object) do
|
def fix_content_map(%{"contentMap" => content_map} = object) do
|
||||||
content_groups = Map.to_list(content_map)
|
content_groups = Map.to_list(content_map)
|
||||||
|
|
1
test/fixtures/ccworld-ap-bridge_note.json
vendored
Normal file
1
test/fixtures/ccworld-ap-bridge_note.json
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"@context":"https://www.w3.org/ns/activitystreams","type":"Note","id":"https://cc.mkdir.uk/ap/note/e5d1d0a1-1ab3-4498-9949-588e3fdea286","attributedTo":"https://cc.mkdir.uk/ap/acct/hiira","inReplyTo":"","quoteUrl":"","content":"おはコンー","published":"2024-01-19T22:08:05Z","to":["https://www.w3.org/ns/activitystreams#Public"],"tag":null,"attachment":[],"object":null}
|
22
test/pleroma/maps_test.exs
Normal file
22
test/pleroma/maps_test.exs
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2024 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
defmodule Pleroma.MapsTest do
|
||||||
|
use Pleroma.DataCase, async: true
|
||||||
|
|
||||||
|
alias Pleroma.Maps
|
||||||
|
|
||||||
|
describe "filter_empty_values/1" do
|
||||||
|
assert %{"bar" => "b", "ray" => ["foo"], "objs" => %{"a" => "b"}} ==
|
||||||
|
Maps.filter_empty_values(%{
|
||||||
|
"foo" => nil,
|
||||||
|
"fooz" => "",
|
||||||
|
"bar" => "b",
|
||||||
|
"rei" => [],
|
||||||
|
"ray" => ["foo"],
|
||||||
|
"obj" => %{},
|
||||||
|
"objs" => %{"a" => "b"}
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
|
@ -93,6 +93,17 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidatorTest
|
||||||
%{valid?: true} = ArticleNotePageValidator.cast_and_validate(note)
|
%{valid?: true} = ArticleNotePageValidator.cast_and_validate(note)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "a Note from Convergence AP Bridge validates" do
|
||||||
|
insert(:user, ap_id: "https://cc.mkdir.uk/ap/acct/hiira")
|
||||||
|
|
||||||
|
note =
|
||||||
|
"test/fixtures/ccworld-ap-bridge_note.json"
|
||||||
|
|> File.read!()
|
||||||
|
|> Jason.decode!()
|
||||||
|
|
||||||
|
%{valid?: true} = ArticleNotePageValidator.cast_and_validate(note)
|
||||||
|
end
|
||||||
|
|
||||||
test "a note with an attachment should work", _ do
|
test "a note with an attachment should work", _ do
|
||||||
insert(:user, %{ap_id: "https://owncast.localhost.localdomain/federation/user/streamer"})
|
insert(:user, %{ap_id: "https://owncast.localhost.localdomain/federation/user/streamer"})
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue