forked from YokaiRick/akkoma
Merge branch 'fetcher-fixes' into 'develop'
Don't fail fetching when the user in a replied-to message can't be fetched. See merge request pleroma/pleroma!2711
This commit is contained in:
commit
4c044f6225
8 changed files with 689 additions and 7 deletions
|
@ -446,12 +446,9 @@ def handle_incoming(
|
||||||
when objtype in ["Article", "Event", "Note", "Video", "Page", "Question", "Answer", "Audio"] do
|
when objtype in ["Article", "Event", "Note", "Video", "Page", "Question", "Answer", "Audio"] do
|
||||||
actor = Containment.get_actor(data)
|
actor = Containment.get_actor(data)
|
||||||
|
|
||||||
data =
|
|
||||||
Map.put(data, "actor", actor)
|
|
||||||
|> fix_addressing
|
|
||||||
|
|
||||||
with nil <- Activity.get_create_by_object_ap_id(object["id"]),
|
with nil <- Activity.get_create_by_object_ap_id(object["id"]),
|
||||||
{:ok, %User{} = user} <- User.get_or_fetch_by_ap_id(data["actor"]) do
|
{:ok, %User{} = user} <- User.get_or_fetch_by_ap_id(actor),
|
||||||
|
data <- Map.put(data, "actor", actor) |> fix_addressing() do
|
||||||
object = fix_object(object, options)
|
object = fix_object(object, options)
|
||||||
|
|
||||||
params = %{
|
params = %{
|
||||||
|
|
72
test/fixtures/fetch_mocks/104410921027210069.json
vendored
Normal file
72
test/fixtures/fetch_mocks/104410921027210069.json
vendored
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
{
|
||||||
|
"@context" : [
|
||||||
|
"https://www.w3.org/ns/activitystreams",
|
||||||
|
{
|
||||||
|
"atomUri" : "ostatus:atomUri",
|
||||||
|
"conversation" : "ostatus:conversation",
|
||||||
|
"inReplyToAtomUri" : "ostatus:inReplyToAtomUri",
|
||||||
|
"ostatus" : "http://ostatus.org#",
|
||||||
|
"sensitive" : "as:sensitive",
|
||||||
|
"toot" : "http://joinmastodon.org/ns#",
|
||||||
|
"votersCount" : "toot:votersCount"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"atomUri" : "https://busshi.moe/users/tuxcrafting/statuses/104410921027210069",
|
||||||
|
"attachment" : [],
|
||||||
|
"attributedTo" : "https://busshi.moe/users/tuxcrafting",
|
||||||
|
"cc" : [
|
||||||
|
"https://busshi.moe/users/tuxcrafting/followers",
|
||||||
|
"https://stereophonic.space/users/fixpoint",
|
||||||
|
"https://blob.cat/users/blobyoumu",
|
||||||
|
"https://cawfee.club/users/grips",
|
||||||
|
"https://jaeger.website/users/igel"
|
||||||
|
],
|
||||||
|
"content" : "<p><span class=\"h-card\"><a href=\"https://stereophonic.space/users/fixpoint\" class=\"u-url mention\">@<span>fixpoint</span></a></span> <span class=\"h-card\"><a href=\"https://blob.cat/users/blobyoumu\" class=\"u-url mention\">@<span>blobyoumu</span></a></span> <span class=\"h-card\"><a href=\"https://cawfee.club/users/grips\" class=\"u-url mention\">@<span>grips</span></a></span> <span class=\"h-card\"><a href=\"https://jaeger.website/users/igel\" class=\"u-url mention\">@<span>igel</span></a></span> there's a difference between not liking nukes and not liking nuclear power<br />nukes are pretty bad as are all WMDs in general but disliking nuclear power just indicates you are unable of thought</p>",
|
||||||
|
"contentMap" : {
|
||||||
|
"en" : "<p><span class=\"h-card\"><a href=\"https://stereophonic.space/users/fixpoint\" class=\"u-url mention\">@<span>fixpoint</span></a></span> <span class=\"h-card\"><a href=\"https://blob.cat/users/blobyoumu\" class=\"u-url mention\">@<span>blobyoumu</span></a></span> <span class=\"h-card\"><a href=\"https://cawfee.club/users/grips\" class=\"u-url mention\">@<span>grips</span></a></span> <span class=\"h-card\"><a href=\"https://jaeger.website/users/igel\" class=\"u-url mention\">@<span>igel</span></a></span> there's a difference between not liking nukes and not liking nuclear power<br />nukes are pretty bad as are all WMDs in general but disliking nuclear power just indicates you are unable of thought</p>"
|
||||||
|
},
|
||||||
|
"conversation" : "https://cawfee.club/contexts/ad6c73d8-efc2-4e74-84ea-2dacf1a27a5e",
|
||||||
|
"id" : "https://busshi.moe/users/tuxcrafting/statuses/104410921027210069",
|
||||||
|
"inReplyTo" : "https://stereophonic.space/objects/02997b83-3ea7-4b63-94af-ef3aa2d4ed17",
|
||||||
|
"inReplyToAtomUri" : "https://stereophonic.space/objects/02997b83-3ea7-4b63-94af-ef3aa2d4ed17",
|
||||||
|
"published" : "2020-06-26T15:10:19Z",
|
||||||
|
"replies" : {
|
||||||
|
"first" : {
|
||||||
|
"items" : [],
|
||||||
|
"next" : "https://busshi.moe/users/tuxcrafting/statuses/104410921027210069/replies?only_other_accounts=true&page=true",
|
||||||
|
"partOf" : "https://busshi.moe/users/tuxcrafting/statuses/104410921027210069/replies",
|
||||||
|
"type" : "CollectionPage"
|
||||||
|
},
|
||||||
|
"id" : "https://busshi.moe/users/tuxcrafting/statuses/104410921027210069/replies",
|
||||||
|
"type" : "Collection"
|
||||||
|
},
|
||||||
|
"sensitive" : false,
|
||||||
|
"summary" : null,
|
||||||
|
"tag" : [
|
||||||
|
{
|
||||||
|
"href" : "https://stereophonic.space/users/fixpoint",
|
||||||
|
"name" : "@fixpoint@stereophonic.space",
|
||||||
|
"type" : "Mention"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"href" : "https://blob.cat/users/blobyoumu",
|
||||||
|
"name" : "@blobyoumu@blob.cat",
|
||||||
|
"type" : "Mention"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"href" : "https://cawfee.club/users/grips",
|
||||||
|
"name" : "@grips@cawfee.club",
|
||||||
|
"type" : "Mention"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"href" : "https://jaeger.website/users/igel",
|
||||||
|
"name" : "@igel@jaeger.website",
|
||||||
|
"type" : "Mention"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"to" : [
|
||||||
|
"https://www.w3.org/ns/activitystreams#Public"
|
||||||
|
],
|
||||||
|
"type" : "Note",
|
||||||
|
"url" : "https://busshi.moe/@tuxcrafting/104410921027210069"
|
||||||
|
}
|
59
test/fixtures/fetch_mocks/9wTkLEnuq47B25EehM.json
vendored
Normal file
59
test/fixtures/fetch_mocks/9wTkLEnuq47B25EehM.json
vendored
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
{
|
||||||
|
"@context" : [
|
||||||
|
"https://www.w3.org/ns/activitystreams",
|
||||||
|
"https://social.sakamoto.gq/schemas/litepub-0.1.jsonld",
|
||||||
|
{
|
||||||
|
"@language" : "und"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"actor" : "https://social.sakamoto.gq/users/eal",
|
||||||
|
"attachment" : [],
|
||||||
|
"attributedTo" : "https://social.sakamoto.gq/users/eal",
|
||||||
|
"cc" : [
|
||||||
|
"https://social.sakamoto.gq/users/eal/followers"
|
||||||
|
],
|
||||||
|
"content" : "<span class=\"h-card\"><a data-user=\"9uw2wH0iTYAMV7XnLU\" class=\"u-url mention\" href=\"https://busshi.moe/@tuxcrafting\" rel=\"ugc\">@<span>tuxcrafting</span></a></span> <span class=\"h-card\"><a data-user=\"9r5l8j8x23NI9KUFu4\" class=\"u-url mention\" href=\"https://stereophonic.space/users/fixpoint\" rel=\"ugc\">@<span>fixpoint</span></a></span> <span class=\"h-card\"><a data-user=\"9orDK545JwjY4Lxjge\" class=\"u-url mention\" href=\"https://blob.cat/users/blobyoumu\" rel=\"ugc\">@<span>blobyoumu</span></a></span> <span class=\"h-card\"><a data-user=\"68184\" class=\"u-url mention\" href=\"https://cawfee.club/users/grips\" rel=\"ugc\">@<span>grips</span></a></span> <span class=\"h-card\"><a data-user=\"9sAmMgHVKjTXKpgx84\" class=\"u-url mention\" href=\"https://jaeger.website/users/igel\" rel=\"ugc\">@<span>igel</span></a></span> What's bad about nukes?",
|
||||||
|
"context" : "https://cawfee.club/contexts/ad6c73d8-efc2-4e74-84ea-2dacf1a27a5e",
|
||||||
|
"conversation" : "https://cawfee.club/contexts/ad6c73d8-efc2-4e74-84ea-2dacf1a27a5e",
|
||||||
|
"id" : "https://social.sakamoto.gq/objects/f20f2497-66d9-4a52-a2e1-1be2a39c32c1",
|
||||||
|
"inReplyTo" : "https://busshi.moe/users/tuxcrafting/statuses/104410921027210069",
|
||||||
|
"published" : "2020-06-26T15:20:15.975737Z",
|
||||||
|
"sensitive" : false,
|
||||||
|
"summary" : "",
|
||||||
|
"tag" : [
|
||||||
|
{
|
||||||
|
"href" : "https://blob.cat/users/blobyoumu",
|
||||||
|
"name" : "@blobyoumu@blob.cat",
|
||||||
|
"type" : "Mention"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"href" : "https://busshi.moe/users/tuxcrafting",
|
||||||
|
"name" : "@tuxcrafting@busshi.moe",
|
||||||
|
"type" : "Mention"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"href" : "https://cawfee.club/users/grips",
|
||||||
|
"name" : "@grips@cawfee.club",
|
||||||
|
"type" : "Mention"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"href" : "https://jaeger.website/users/igel",
|
||||||
|
"name" : "@igel@jaeger.website",
|
||||||
|
"type" : "Mention"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"href" : "https://stereophonic.space/users/fixpoint",
|
||||||
|
"name" : "@fixpoint@stereophonic.space",
|
||||||
|
"type" : "Mention"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"to" : [
|
||||||
|
"https://busshi.moe/users/tuxcrafting",
|
||||||
|
"https://www.w3.org/ns/activitystreams#Public",
|
||||||
|
"https://blob.cat/users/blobyoumu",
|
||||||
|
"https://stereophonic.space/users/fixpoint",
|
||||||
|
"https://cawfee.club/users/grips",
|
||||||
|
"https://jaeger.website/users/igel"
|
||||||
|
],
|
||||||
|
"type" : "Note"
|
||||||
|
}
|
43
test/fixtures/fetch_mocks/eal.json
vendored
Normal file
43
test/fixtures/fetch_mocks/eal.json
vendored
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
{
|
||||||
|
"@context" : [
|
||||||
|
"https://www.w3.org/ns/activitystreams",
|
||||||
|
"https://social.sakamoto.gq/schemas/litepub-0.1.jsonld",
|
||||||
|
{
|
||||||
|
"@language" : "und"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"attachment" : [],
|
||||||
|
"discoverable" : true,
|
||||||
|
"endpoints" : {
|
||||||
|
"oauthAuthorizationEndpoint" : "https://social.sakamoto.gq/oauth/authorize",
|
||||||
|
"oauthRegistrationEndpoint" : "https://social.sakamoto.gq/api/v1/apps",
|
||||||
|
"oauthTokenEndpoint" : "https://social.sakamoto.gq/oauth/token",
|
||||||
|
"sharedInbox" : "https://social.sakamoto.gq/inbox",
|
||||||
|
"uploadMedia" : "https://social.sakamoto.gq/api/ap/upload_media"
|
||||||
|
},
|
||||||
|
"followers" : "https://social.sakamoto.gq/users/eal/followers",
|
||||||
|
"following" : "https://social.sakamoto.gq/users/eal/following",
|
||||||
|
"icon" : {
|
||||||
|
"type" : "Image",
|
||||||
|
"url" : "https://social.sakamoto.gq/media/f1cb6f79bf6839f3223ca240441f766056b74ddd23c69bcaf8bb1ba1ecff6eec.jpg"
|
||||||
|
},
|
||||||
|
"id" : "https://social.sakamoto.gq/users/eal",
|
||||||
|
"image" : {
|
||||||
|
"type" : "Image",
|
||||||
|
"url" : "https://social.sakamoto.gq/media/e5cccf26421e8366f4e34be3c9d5042b8bc8dcceccc7c8e89785fa312dd9632c.jpg"
|
||||||
|
},
|
||||||
|
"inbox" : "https://social.sakamoto.gq/users/eal/inbox",
|
||||||
|
"manuallyApprovesFollowers" : false,
|
||||||
|
"name" : "ìì",
|
||||||
|
"outbox" : "https://social.sakamoto.gq/users/eal/outbox",
|
||||||
|
"preferredUsername" : "eal",
|
||||||
|
"publicKey" : {
|
||||||
|
"id" : "https://social.sakamoto.gq/users/eal#main-key",
|
||||||
|
"owner" : "https://social.sakamoto.gq/users/eal",
|
||||||
|
"publicKeyPem" : "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz3pF85YOhhv2Zaxv9YQ7\nrCe1aEhetCMVHtrK63tUVGoGdsblyKnVeJNbFcr6k3y35OpHS3HXIi6GzgihYcTu\nONLP4eQMHTnLUNAQZi03mjJA4iIq8v/tm8ZkL2mXsQSAbWj6Iq518mHNN7OvCoNt\n3Xjepl/0kgkc2gsund7m8r+Wu0Fusx6UlUyyAk3PexdDRdSSlVLeskqtP8jtdQDo\nL70pMyL+VD+Qb9RKFdtgJ+M4OqYP+7FVzCqXN0QIPhFf/kvHSLr+c4Y3Wm0nAKHU\n9CwXWXz5Xqscpv41KlgnUCOkTXb5eBSt23lNulae5srVzWBiFb6guiCpNzBGa+Sq\nrwIDAQAB\n-----END PUBLIC KEY-----\n\n"
|
||||||
|
},
|
||||||
|
"summary" : "Pizza napoletana supremacist.<br><br>Any artworks posted here that are good are not mine.",
|
||||||
|
"tag" : [],
|
||||||
|
"type" : "Person",
|
||||||
|
"url" : "https://social.sakamoto.gq/users/eal"
|
||||||
|
}
|
59
test/fixtures/fetch_mocks/tuxcrafting.json
vendored
Normal file
59
test/fixtures/fetch_mocks/tuxcrafting.json
vendored
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
{
|
||||||
|
"@context" : [
|
||||||
|
"https://www.w3.org/ns/activitystreams",
|
||||||
|
"https://w3id.org/security/v1",
|
||||||
|
{
|
||||||
|
"IdentityProof" : "toot:IdentityProof",
|
||||||
|
"PropertyValue" : "schema:PropertyValue",
|
||||||
|
"alsoKnownAs" : {
|
||||||
|
"@id" : "as:alsoKnownAs",
|
||||||
|
"@type" : "@id"
|
||||||
|
},
|
||||||
|
"discoverable" : "toot:discoverable",
|
||||||
|
"featured" : {
|
||||||
|
"@id" : "toot:featured",
|
||||||
|
"@type" : "@id"
|
||||||
|
},
|
||||||
|
"focalPoint" : {
|
||||||
|
"@container" : "@list",
|
||||||
|
"@id" : "toot:focalPoint"
|
||||||
|
},
|
||||||
|
"manuallyApprovesFollowers" : "as:manuallyApprovesFollowers",
|
||||||
|
"movedTo" : {
|
||||||
|
"@id" : "as:movedTo",
|
||||||
|
"@type" : "@id"
|
||||||
|
},
|
||||||
|
"schema" : "http://schema.org#",
|
||||||
|
"toot" : "http://joinmastodon.org/ns#",
|
||||||
|
"value" : "schema:value"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"attachment" : [],
|
||||||
|
"discoverable" : true,
|
||||||
|
"endpoints" : {
|
||||||
|
"sharedInbox" : "https://busshi.moe/inbox"
|
||||||
|
},
|
||||||
|
"featured" : "https://busshi.moe/users/tuxcrafting/collections/featured",
|
||||||
|
"followers" : "https://busshi.moe/users/tuxcrafting/followers",
|
||||||
|
"following" : "https://busshi.moe/users/tuxcrafting/following",
|
||||||
|
"icon" : {
|
||||||
|
"mediaType" : "image/jpeg",
|
||||||
|
"type" : "Image",
|
||||||
|
"url" : "https://blobcdn.busshi.moe/busshifiles/accounts/avatars/000/046/872/original/054f0806ccb303d0.jpg"
|
||||||
|
},
|
||||||
|
"id" : "https://busshi.moe/users/tuxcrafting",
|
||||||
|
"inbox" : "https://busshi.moe/users/tuxcrafting/inbox",
|
||||||
|
"manuallyApprovesFollowers" : true,
|
||||||
|
"name" : "@tuxcrafting@localhost:8080",
|
||||||
|
"outbox" : "https://busshi.moe/users/tuxcrafting/outbox",
|
||||||
|
"preferredUsername" : "tuxcrafting",
|
||||||
|
"publicKey" : {
|
||||||
|
"id" : "https://busshi.moe/users/tuxcrafting#main-key",
|
||||||
|
"owner" : "https://busshi.moe/users/tuxcrafting",
|
||||||
|
"publicKeyPem" : "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwqWWTBf9OizsBiBhGS/M\nQTT6fB1VvQP6vvxouGZ5cGg1a97V67ouhjJ+nGMuWr++DNYjJYkk2TOynfykk0H/\n8rRSujSe3BNRKYGNzdnRJu/4XxgIE847Fqx5SijSP23JGYcn8TjeSUsN2u2YYVXK\n+Eb3Bu7DjGiqwNon6YB0h5qkGjkMSMVIFn0hZx6Z21bkfYWgra96Ok5OWf7Ck3je\nCuErlCMZcbQcHtFpBueJAxYchjNvm6fqwZxLX/NtaHdr7Fm2kin89mqzliapBlFH\nCXk7Jln6xV5I6ryggPAMzm3fuHzeo0RWlu8lrxLfARBVwaQQZS99bwqp6N9O2aUp\nYwIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||||
|
},
|
||||||
|
"summary" : "<p>expert procrastinator</p><p>trans(humanist|gender|istorized)</p><p>web: <a href=\"https://tuxcrafting.port0.org\" rel=\"nofollow noopener noreferrer\" target=\"_blank\"><span class=\"invisible\">https://</span><span class=\"\">tuxcrafting.port0.org</span><span class=\"invisible\"></span></a><br />pronouns: she/they<br />languages: french (native)/english (fluent)/hebrew (ok-ish)/esperanto (barely)</p>",
|
||||||
|
"tag" : [],
|
||||||
|
"type" : "Person",
|
||||||
|
"url" : "https://busshi.moe/@tuxcrafting"
|
||||||
|
}
|
File diff suppressed because one or more lines are too long
188
test/fixtures/tesla_mock/peertube.moe-vid.json
vendored
188
test/fixtures/tesla_mock/peertube.moe-vid.json
vendored
File diff suppressed because one or more lines are too long
|
@ -26,6 +26,46 @@ defmodule Pleroma.Object.FetcherTest do
|
||||||
:ok
|
:ok
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "error cases" do
|
||||||
|
setup do
|
||||||
|
mock(fn
|
||||||
|
%{method: :get, url: "https://social.sakamoto.gq/notice/9wTkLEnuq47B25EehM"} ->
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/fetch_mocks/9wTkLEnuq47B25EehM.json")
|
||||||
|
}
|
||||||
|
|
||||||
|
%{method: :get, url: "https://social.sakamoto.gq/users/eal"} ->
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/fetch_mocks/eal.json")
|
||||||
|
}
|
||||||
|
|
||||||
|
%{method: :get, url: "https://busshi.moe/users/tuxcrafting/statuses/104410921027210069"} ->
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/fetch_mocks/104410921027210069.json")
|
||||||
|
}
|
||||||
|
|
||||||
|
%{method: :get, url: "https://busshi.moe/users/tuxcrafting"} ->
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 500
|
||||||
|
}
|
||||||
|
end)
|
||||||
|
|
||||||
|
:ok
|
||||||
|
end
|
||||||
|
|
||||||
|
@tag capture_log: true
|
||||||
|
test "it works when fetching the OP actor errors out" do
|
||||||
|
# Here we simulate a case where the author of the OP can't be read
|
||||||
|
assert {:ok, _} =
|
||||||
|
Fetcher.fetch_object_from_id(
|
||||||
|
"https://social.sakamoto.gq/notice/9wTkLEnuq47B25EehM"
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe "max thread distance restriction" do
|
describe "max thread distance restriction" do
|
||||||
@ap_id "http://mastodon.example.org/@admin/99541947525187367"
|
@ap_id "http://mastodon.example.org/@admin/99541947525187367"
|
||||||
setup do: clear_config([:instance, :federation_incoming_replies_max_depth])
|
setup do: clear_config([:instance, :federation_incoming_replies_max_depth])
|
||||||
|
|
Loading…
Reference in a new issue