diff options
| author | rinpatch <rinpatch@sdf.org> | 2020-10-28 18:08:23 +0300 | 
|---|---|---|
| committer | rinpatch <rinpatch@sdf.org> | 2020-11-12 15:25:33 +0300 | 
| commit | 6ca709816f74f1171423c7bc040619fca57a2087 (patch) | |
| tree | c63d54e69018c195279ff946f8f3990b25215cef /test | |
| parent | 99bc175f0257fb0cb9275cba94df662ed219eacf (diff) | |
| download | pleroma-6ca709816f74f1171423c7bc040619fca57a2087.tar.gz pleroma-6ca709816f74f1171423c7bc040619fca57a2087.zip | |
Fix object spoofing vulnerability in attachments
Validate the content-type of the response when fetching an object,
according to https://www.w3.org/TR/activitypub/#x3-2-retrieving-objects.
content-type headers had to be added to many mocks in order to support
this, some of this was done with a regex. While I did go over the
resulting files to check I didn't modify anything unrelated, there is a
 possibility I missed something.
Closes pleroma#1948
Diffstat (limited to 'test')
9 files changed, 235 insertions, 77 deletions
| diff --git a/test/fixtures/spoofed-object.json b/test/fixtures/spoofed-object.json new file mode 100644 index 000000000..91e34307d --- /dev/null +++ b/test/fixtures/spoofed-object.json @@ -0,0 +1,26 @@ +{ +  "@context": [ +    "https://www.w3.org/ns/activitystreams", +    "https://patch.cx/schemas/litepub-0.1.jsonld", +    { +      "@language": "und" +    } +  ], +  "actor": "https://patch.cx/users/rin", +  "attachment": [], +  "attributedTo": "https://patch.cx/users/rin", +  "cc": [ +    "https://patch.cx/users/rin/followers" +  ], +  "content": "Oracle Corporation (NYSE: ORCL) today announced that it has signed a definitive merger agreement to acquire Pleroma AG (FRA: PLA), for $26.50 per share (approximately $10.3 billion). The transaction has been approved by the boards of directors of both companies and should close by early January.", +  "context": "https://patch.cx/contexts/spoof", +  "id": "https://patch.cx/objects/spoof", +  "published": "2020-10-23T18:02:06.038856Z", +  "sensitive": false, +  "summary": "Oracle buys Pleroma", +  "tag": [], +  "to": [ +    "https://www.w3.org/ns/activitystreams#Public" +  ], +  "type": "Note" +} diff --git a/test/pleroma/object/fetcher_test.exs b/test/pleroma/object/fetcher_test.exs index 14d2c645f..7df6af7fe 100644 --- a/test/pleroma/object/fetcher_test.exs +++ b/test/pleroma/object/fetcher_test.exs @@ -21,6 +21,17 @@ defmodule Pleroma.Object.FetcherTest do        %{method: :get, url: "https://mastodon.example.org/users/userisgone404"} ->          %Tesla.Env{status: 404} +      %{ +        method: :get, +        url: +          "https://patch.cx/media/03ca3c8b4ac3ddd08bf0f84be7885f2f88de0f709112131a22d83650819e36c2.json" +      } -> +        %Tesla.Env{ +          status: 200, +          headers: [{"content-type", "application/json"}], +          body: File.read!("test/fixtures/spoofed-object.json") +        } +        env ->          apply(HttpRequestMock, :request, [env])      end) @@ -34,19 +45,22 @@ defmodule Pleroma.Object.FetcherTest do          %{method: :get, url: "https://social.sakamoto.gq/notice/9wTkLEnuq47B25EehM"} ->            %Tesla.Env{              status: 200, -            body: File.read!("test/fixtures/fetch_mocks/9wTkLEnuq47B25EehM.json") +            body: File.read!("test/fixtures/fetch_mocks/9wTkLEnuq47B25EehM.json"), +            headers: HttpRequestMock.activitypub_object_headers()            }          %{method: :get, url: "https://social.sakamoto.gq/users/eal"} ->            %Tesla.Env{              status: 200, -            body: File.read!("test/fixtures/fetch_mocks/eal.json") +            body: File.read!("test/fixtures/fetch_mocks/eal.json"), +            headers: HttpRequestMock.activitypub_object_headers()            }          %{method: :get, url: "https://busshi.moe/users/tuxcrafting/statuses/104410921027210069"} ->            %Tesla.Env{              status: 200, -            body: File.read!("test/fixtures/fetch_mocks/104410921027210069.json") +            body: File.read!("test/fixtures/fetch_mocks/104410921027210069.json"), +            headers: HttpRequestMock.activitypub_object_headers()            }          %{method: :get, url: "https://busshi.moe/users/tuxcrafting"} -> @@ -132,6 +146,13 @@ defmodule Pleroma.Object.FetcherTest do                   "http://mastodon.example.org/@admin/99541947525187367"                 )      end + +    test "it does not fetch a spoofed object uploaded on an instance as an attachment" do +      assert {:error, _} = +               Fetcher.fetch_object_from_id( +                 "https://patch.cx/media/03ca3c8b4ac3ddd08bf0f84be7885f2f88de0f709112131a22d83650819e36c2.json" +               ) +    end    end    describe "implementation quirks" do diff --git a/test/pleroma/object_test.exs b/test/pleroma/object_test.exs index 99caba336..5d4e6fb84 100644 --- a/test/pleroma/object_test.exs +++ b/test/pleroma/object_test.exs @@ -281,7 +281,11 @@ defmodule Pleroma.ObjectTest do      setup do        mock(fn          %{method: :get, url: "https://patch.cx/objects/9a172665-2bc5-452d-8428-2361d4c33b1d"} -> -          %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/poll_original.json")} +          %Tesla.Env{ +            status: 200, +            body: File.read!("test/fixtures/tesla_mock/poll_original.json"), +            headers: HttpRequestMock.activitypub_object_headers() +          }          env ->            apply(HttpRequestMock, :request, [env]) @@ -315,7 +319,8 @@ defmodule Pleroma.ObjectTest do        mock_modified.(%Tesla.Env{          status: 200, -        body: File.read!("test/fixtures/tesla_mock/poll_modified.json") +        body: File.read!("test/fixtures/tesla_mock/poll_modified.json"), +        headers: HttpRequestMock.activitypub_object_headers()        })        updated_object = Object.get_by_id_and_maybe_refetch(object.id, interval: -1) @@ -359,7 +364,8 @@ defmodule Pleroma.ObjectTest do        mock_modified.(%Tesla.Env{          status: 200, -        body: File.read!("test/fixtures/tesla_mock/poll_modified.json") +        body: File.read!("test/fixtures/tesla_mock/poll_modified.json"), +        headers: HttpRequestMock.activitypub_object_headers()        })        updated_object = Object.get_by_id_and_maybe_refetch(object.id, interval: 100) @@ -387,7 +393,8 @@ defmodule Pleroma.ObjectTest do        mock_modified.(%Tesla.Env{          status: 200, -        body: File.read!("test/fixtures/tesla_mock/poll_modified.json") +        body: File.read!("test/fixtures/tesla_mock/poll_modified.json"), +        headers: HttpRequestMock.activitypub_object_headers()        })        updated_object = Object.get_by_id_and_maybe_refetch(object.id, interval: -1) diff --git a/test/pleroma/web/activity_pub/activity_pub_test.exs b/test/pleroma/web/activity_pub/activity_pub_test.exs index 43bd14ee6..3eeb0f735 100644 --- a/test/pleroma/web/activity_pub/activity_pub_test.exs +++ b/test/pleroma/web/activity_pub/activity_pub_test.exs @@ -1426,19 +1426,25 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do        mock(fn env ->          case env.url do            "http://localhost:4001/users/masto_hidden_counters/following" -> -            json(%{ -              "@context" => "https://www.w3.org/ns/activitystreams", -              "id" => "http://localhost:4001/users/masto_hidden_counters/followers" -            }) +            json( +              %{ +                "@context" => "https://www.w3.org/ns/activitystreams", +                "id" => "http://localhost:4001/users/masto_hidden_counters/followers" +              }, +              headers: HttpRequestMock.activitypub_object_headers() +            )            "http://localhost:4001/users/masto_hidden_counters/following?page=1" ->              %Tesla.Env{status: 403, body: ""}            "http://localhost:4001/users/masto_hidden_counters/followers" -> -            json(%{ -              "@context" => "https://www.w3.org/ns/activitystreams", -              "id" => "http://localhost:4001/users/masto_hidden_counters/following" -            }) +            json( +              %{ +                "@context" => "https://www.w3.org/ns/activitystreams", +                "id" => "http://localhost:4001/users/masto_hidden_counters/following" +              }, +              headers: HttpRequestMock.activitypub_object_headers() +            )            "http://localhost:4001/users/masto_hidden_counters/followers?page=1" ->              %Tesla.Env{status: 403, body: ""} @@ -2278,7 +2284,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do      Tesla.Mock.mock(fn        %{method: :get, url: "https://princess.cat/users/mewmew"} ->          file = File.read!("test/fixtures/mewmew_no_name.json") -        %Tesla.Env{status: 200, body: file} +        %Tesla.Env{status: 200, body: file, headers: HttpRequestMock.activitypub_object_headers()}      end)      {:ok, user} = ActivityPub.make_user_from_ap_id("https://princess.cat/users/mewmew") diff --git a/test/pleroma/web/activity_pub/transmogrifier/announce_handling_test.exs b/test/pleroma/web/activity_pub/transmogrifier/announce_handling_test.exs index 54335acdb..99c296c74 100644 --- a/test/pleroma/web/activity_pub/transmogrifier/announce_handling_test.exs +++ b/test/pleroma/web/activity_pub/transmogrifier/announce_handling_test.exs @@ -60,7 +60,11 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.AnnounceHandlingTest do      Tesla.Mock.mock(fn        %{method: :get} -> -        %Tesla.Env{status: 200, body: File.read!("test/fixtures/mastodon-note-object.json")} +        %Tesla.Env{ +          status: 200, +          body: File.read!("test/fixtures/mastodon-note-object.json"), +          headers: HttpRequestMock.activitypub_object_headers() +        }      end)      _user = insert(:user, local: false, ap_id: data["actor"]) diff --git a/test/pleroma/web/activity_pub/transmogrifier/article_handling_test.exs b/test/pleroma/web/activity_pub/transmogrifier/article_handling_test.exs index 9b12a470a..b0ae804c5 100644 --- a/test/pleroma/web/activity_pub/transmogrifier/article_handling_test.exs +++ b/test/pleroma/web/activity_pub/transmogrifier/article_handling_test.exs @@ -13,7 +13,11 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.ArticleHandlingTest do    test "Pterotype (Wordpress Plugin) Article" do      Tesla.Mock.mock(fn %{url: "https://wedistribute.org/wp-json/pterotype/v1/actor/-blog"} -> -      %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/wedistribute-user.json")} +      %Tesla.Env{ +        status: 200, +        body: File.read!("test/fixtures/tesla_mock/wedistribute-user.json"), +        headers: HttpRequestMock.activitypub_object_headers() +      }      end)      data = @@ -36,13 +40,15 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.ArticleHandlingTest do        %{url: "https://baptiste.gelez.xyz/~/PlumeDevelopment/this-month-in-plume-june-2018/"} ->          %Tesla.Env{            status: 200, -          body: File.read!("test/fixtures/tesla_mock/baptiste.gelex.xyz-article.json") +          body: File.read!("test/fixtures/tesla_mock/baptiste.gelex.xyz-article.json"), +          headers: HttpRequestMock.activitypub_object_headers()          }        %{url: "https://baptiste.gelez.xyz/@/BaptisteGelez"} ->          %Tesla.Env{            status: 200, -          body: File.read!("test/fixtures/tesla_mock/baptiste.gelex.xyz-user.json") +          body: File.read!("test/fixtures/tesla_mock/baptiste.gelex.xyz-user.json"), +          headers: HttpRequestMock.activitypub_object_headers()          }      end) @@ -61,7 +67,8 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.ArticleHandlingTest do      Tesla.Mock.mock(fn %{url: "https://prismo.news/@mxb"} ->        %Tesla.Env{          status: 200, -        body: File.read!("test/fixtures/tesla_mock/https___prismo.news__mxb.json") +        body: File.read!("test/fixtures/tesla_mock/https___prismo.news__mxb.json"), +        headers: HttpRequestMock.activitypub_object_headers()        }      end) diff --git a/test/pleroma/web/activity_pub/transmogrifier/audio_handling_test.exs b/test/pleroma/web/activity_pub/transmogrifier/audio_handling_test.exs index eef7ab4c6..6eeb1c863 100644 --- a/test/pleroma/web/activity_pub/transmogrifier/audio_handling_test.exs +++ b/test/pleroma/web/activity_pub/transmogrifier/audio_handling_test.exs @@ -48,7 +48,8 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.AudioHandlingTest do        %{url: "https://channels.tests.funkwhale.audio/federation/actors/compositions"} ->          %Tesla.Env{            status: 200, -          body: File.read!("test/fixtures/tesla_mock/funkwhale_channel.json") +          body: File.read!("test/fixtures/tesla_mock/funkwhale_channel.json"), +          headers: HttpRequestMock.activitypub_object_headers()          }      end) diff --git a/test/pleroma/web/activity_pub/transmogrifier/event_handling_test.exs b/test/pleroma/web/activity_pub/transmogrifier/event_handling_test.exs index 7f1ef2cbd..d7c55cfbe 100644 --- a/test/pleroma/web/activity_pub/transmogrifier/event_handling_test.exs +++ b/test/pleroma/web/activity_pub/transmogrifier/event_handling_test.exs @@ -13,13 +13,15 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.EventHandlingTest do        %{url: "https://mobilizon.org/events/252d5816-00a3-4a89-a66f-15bf65c33e39"} ->          %Tesla.Env{            status: 200, -          body: File.read!("test/fixtures/tesla_mock/mobilizon.org-event.json") +          body: File.read!("test/fixtures/tesla_mock/mobilizon.org-event.json"), +          headers: HttpRequestMock.activitypub_object_headers()          }        %{url: "https://mobilizon.org/@tcit"} ->          %Tesla.Env{            status: 200, -          body: File.read!("test/fixtures/tesla_mock/mobilizon.org-user.json") +          body: File.read!("test/fixtures/tesla_mock/mobilizon.org-user.json"), +          headers: HttpRequestMock.activitypub_object_headers()          }      end) diff --git a/test/support/http_request_mock.ex b/test/support/http_request_mock.ex index cb022333f..93464ebff 100644 --- a/test/support/http_request_mock.ex +++ b/test/support/http_request_mock.ex @@ -5,6 +5,8 @@  defmodule HttpRequestMock do    require Logger +  def activitypub_object_headers, do: [{"content-type", "application/activity+json"}] +    def request(          %Tesla.Env{            url: url, @@ -34,7 +36,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/https___osada.macgirvin.com_channel_mike.json") +       body: File.read!("test/fixtures/tesla_mock/https___osada.macgirvin.com_channel_mike.json"), +       headers: activitypub_object_headers()       }}    end @@ -42,7 +45,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/moonman@shitposter.club.json") +       body: File.read!("test/fixtures/tesla_mock/moonman@shitposter.club.json"), +       headers: activitypub_object_headers()       }}    end @@ -50,7 +54,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/status.emelie.json") +       body: File.read!("test/fixtures/tesla_mock/status.emelie.json"), +       headers: activitypub_object_headers()       }}    end @@ -66,7 +71,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/emelie.json") +       body: File.read!("test/fixtures/tesla_mock/emelie.json"), +       headers: activitypub_object_headers()       }}    end @@ -78,7 +84,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/rinpatch.json") +       body: File.read!("test/fixtures/tesla_mock/rinpatch.json"), +       headers: activitypub_object_headers()       }}    end @@ -86,7 +93,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/poll_attachment.json") +       body: File.read!("test/fixtures/tesla_mock/poll_attachment.json"), +       headers: activitypub_object_headers()       }}    end @@ -99,7 +107,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/webfinger_emelie.json") +       body: File.read!("test/fixtures/tesla_mock/webfinger_emelie.json"), +       headers: activitypub_object_headers()       }}    end @@ -112,7 +121,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/mike@osada.macgirvin.com.json") +       body: File.read!("test/fixtures/tesla_mock/mike@osada.macgirvin.com.json"), +       headers: activitypub_object_headers()       }}    end @@ -190,7 +200,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/lucifermysticus.json") +       body: File.read!("test/fixtures/tesla_mock/lucifermysticus.json"), +       headers: activitypub_object_headers()       }}    end @@ -198,7 +209,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/https___prismo.news__mxb.json") +       body: File.read!("test/fixtures/tesla_mock/https___prismo.news__mxb.json"), +       headers: activitypub_object_headers()       }}    end @@ -211,7 +223,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/kaniini@hubzilla.example.org.json") +       body: File.read!("test/fixtures/tesla_mock/kaniini@hubzilla.example.org.json"), +       headers: activitypub_object_headers()       }}    end @@ -219,7 +232,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/rye.json") +       body: File.read!("test/fixtures/tesla_mock/rye.json"), +       headers: activitypub_object_headers()       }}    end @@ -227,7 +241,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/rye.json") +       body: File.read!("test/fixtures/tesla_mock/rye.json"), +       headers: activitypub_object_headers()       }}    end @@ -246,7 +261,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/puckipedia.com.json") +       body: File.read!("test/fixtures/tesla_mock/puckipedia.com.json"), +       headers: activitypub_object_headers()       }}    end @@ -254,7 +270,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/7even.json") +       body: File.read!("test/fixtures/tesla_mock/7even.json"), +       headers: activitypub_object_headers()       }}    end @@ -262,7 +279,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/peertube.moe-vid.json") +       body: File.read!("test/fixtures/tesla_mock/peertube.moe-vid.json"), +       headers: activitypub_object_headers()       }}    end @@ -270,7 +288,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/https___framatube.org_accounts_framasoft.json") +       body: File.read!("test/fixtures/tesla_mock/https___framatube.org_accounts_framasoft.json"), +       headers: activitypub_object_headers()       }}    end @@ -278,7 +297,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/framatube.org-video.json") +       body: File.read!("test/fixtures/tesla_mock/framatube.org-video.json"), +       headers: activitypub_object_headers()       }}    end @@ -286,7 +306,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/craigmaloney.json") +       body: File.read!("test/fixtures/tesla_mock/craigmaloney.json"), +       headers: activitypub_object_headers()       }}    end @@ -294,7 +315,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/peertube-social.json") +       body: File.read!("test/fixtures/tesla_mock/peertube-social.json"), +       headers: activitypub_object_headers()       }}    end @@ -304,7 +326,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/mobilizon.org-event.json") +       body: File.read!("test/fixtures/tesla_mock/mobilizon.org-event.json"), +       headers: activitypub_object_headers()       }}    end @@ -312,7 +335,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/mobilizon.org-user.json") +       body: File.read!("test/fixtures/tesla_mock/mobilizon.org-user.json"), +       headers: activitypub_object_headers()       }}    end @@ -320,7 +344,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/baptiste.gelex.xyz-user.json") +       body: File.read!("test/fixtures/tesla_mock/baptiste.gelex.xyz-user.json"), +       headers: activitypub_object_headers()       }}    end @@ -328,7 +353,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/baptiste.gelex.xyz-article.json") +       body: File.read!("test/fixtures/tesla_mock/baptiste.gelex.xyz-article.json"), +       headers: activitypub_object_headers()       }}    end @@ -336,7 +362,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/wedistribute-article.json") +       body: File.read!("test/fixtures/tesla_mock/wedistribute-article.json"), +       headers: activitypub_object_headers()       }}    end @@ -344,7 +371,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/wedistribute-user.json") +       body: File.read!("test/fixtures/tesla_mock/wedistribute-user.json"), +       headers: activitypub_object_headers()       }}    end @@ -352,7 +380,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/admin@mastdon.example.org.json") +       body: File.read!("test/fixtures/tesla_mock/admin@mastdon.example.org.json"), +       headers: activitypub_object_headers()       }}    end @@ -362,7 +391,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/relay@mastdon.example.org.json") +       body: File.read!("test/fixtures/tesla_mock/relay@mastdon.example.org.json"), +       headers: activitypub_object_headers()       }}    end @@ -482,7 +512,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/pekorino@pawoo.net_host_meta.json") +       body: File.read!("test/fixtures/tesla_mock/pekorino@pawoo.net_host_meta.json"), +       headers: activitypub_object_headers()       }}    end @@ -543,7 +574,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/mastodon-note-object.json") +       body: File.read!("test/fixtures/mastodon-note-object.json"), +       headers: activitypub_object_headers()       }}    end @@ -567,7 +599,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/mayumayu.json") +       body: File.read!("test/fixtures/tesla_mock/mayumayu.json"), +       headers: activitypub_object_headers()       }}    end @@ -580,7 +613,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/mayumayupost.json") +       body: File.read!("test/fixtures/tesla_mock/mayumayupost.json"), +       headers: activitypub_object_headers()       }}    end @@ -795,7 +829,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/winterdienst_webfinger.json") +       body: File.read!("test/fixtures/tesla_mock/winterdienst_webfinger.json"), +       headers: activitypub_object_headers()       }}    end @@ -867,12 +902,21 @@ defmodule HttpRequestMock do    end    def get("https://mastodon.social/users/lambadalambda", _, _, _) do -    {:ok, %Tesla.Env{status: 200, body: File.read!("test/fixtures/lambadalambda.json")}} +    {:ok, +     %Tesla.Env{ +       status: 200, +       body: File.read!("test/fixtures/lambadalambda.json"), +       headers: activitypub_object_headers() +     }}    end    def get("https://apfed.club/channel/indio", _, _, _) do      {:ok, -     %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/osada-user-indio.json")}} +     %Tesla.Env{ +       status: 200, +       body: File.read!("test/fixtures/tesla_mock/osada-user-indio.json"), +       headers: activitypub_object_headers() +     }}    end    def get("https://social.heldscal.la/user/23211", _, _, [{"accept", "application/activity+json"}]) do @@ -895,7 +939,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/users_mock/masto_closed_followers.json") +       body: File.read!("test/fixtures/users_mock/masto_closed_followers.json"), +       headers: activitypub_object_headers()       }}    end @@ -903,7 +948,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/users_mock/masto_closed_followers_page.json") +       body: File.read!("test/fixtures/users_mock/masto_closed_followers_page.json"), +       headers: activitypub_object_headers()       }}    end @@ -911,7 +957,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/users_mock/masto_closed_following.json") +       body: File.read!("test/fixtures/users_mock/masto_closed_following.json"), +       headers: activitypub_object_headers()       }}    end @@ -919,7 +966,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/users_mock/masto_closed_following_page.json") +       body: File.read!("test/fixtures/users_mock/masto_closed_following_page.json"), +       headers: activitypub_object_headers()       }}    end @@ -927,7 +975,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/users_mock/friendica_followers.json") +       body: File.read!("test/fixtures/users_mock/friendica_followers.json"), +       headers: activitypub_object_headers()       }}    end @@ -935,7 +984,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/users_mock/friendica_following.json") +       body: File.read!("test/fixtures/users_mock/friendica_following.json"), +       headers: activitypub_object_headers()       }}    end @@ -943,7 +993,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/users_mock/pleroma_followers.json") +       body: File.read!("test/fixtures/users_mock/pleroma_followers.json"), +       headers: activitypub_object_headers()       }}    end @@ -951,7 +1002,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/users_mock/pleroma_following.json") +       body: File.read!("test/fixtures/users_mock/pleroma_following.json"), +       headers: activitypub_object_headers()       }}    end @@ -1049,7 +1101,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/https__info.pleroma.site_activity.json") +       body: File.read!("test/fixtures/tesla_mock/https__info.pleroma.site_activity.json"), +       headers: activitypub_object_headers()       }}    end @@ -1063,7 +1116,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/https__info.pleroma.site_activity2.json") +       body: File.read!("test/fixtures/tesla_mock/https__info.pleroma.site_activity2.json"), +       headers: activitypub_object_headers()       }}    end @@ -1077,7 +1131,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/https__info.pleroma.site_activity3.json") +       body: File.read!("test/fixtures/tesla_mock/https__info.pleroma.site_activity3.json"), +       headers: activitypub_object_headers()       }}    end @@ -1110,7 +1165,12 @@ defmodule HttpRequestMock do    end    def get("http://mastodon.example.org/@admin/99541947525187367", _, _, _) do -    {:ok, %Tesla.Env{status: 200, body: File.read!("test/fixtures/mastodon-post-activity.json")}} +    {:ok, +     %Tesla.Env{ +       status: 200, +       body: File.read!("test/fixtures/mastodon-post-activity.json"), +       headers: activitypub_object_headers() +     }}    end    def get("https://info.pleroma.site/activity4.json", _, _, _) do @@ -1137,7 +1197,8 @@ defmodule HttpRequestMock do      {:ok,       %Tesla.Env{         status: 200, -       body: File.read!("test/fixtures/tesla_mock/misskey_poll_no_end_date.json") +       body: File.read!("test/fixtures/tesla_mock/misskey_poll_no_end_date.json"), +       headers: activitypub_object_headers()       }}    end @@ -1146,11 +1207,21 @@ defmodule HttpRequestMock do    end    def get("https://skippers-bin.com/users/7v1w1r8ce6", _, _, _) do -    {:ok, %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/sjw.json")}} +    {:ok, +     %Tesla.Env{ +       status: 200, +       body: File.read!("test/fixtures/tesla_mock/sjw.json"), +       headers: activitypub_object_headers() +     }}    end    def get("https://patch.cx/users/rin", _, _, _) do -    {:ok, %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/rin.json")}} +    {:ok, +     %Tesla.Env{ +       status: 200, +       body: File.read!("test/fixtures/tesla_mock/rin.json"), +       headers: activitypub_object_headers() +     }}    end    def get( @@ -1160,12 +1231,20 @@ defmodule HttpRequestMock do          _        ) do      {:ok, -     %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/funkwhale_audio.json")}} +     %Tesla.Env{ +       status: 200, +       body: File.read!("test/fixtures/tesla_mock/funkwhale_audio.json"), +       headers: activitypub_object_headers() +     }}    end    def get("https://channels.tests.funkwhale.audio/federation/actors/compositions", _, _, _) do      {:ok, -     %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/funkwhale_channel.json")}} +     %Tesla.Env{ +       status: 200, +       body: File.read!("test/fixtures/tesla_mock/funkwhale_channel.json"), +       headers: activitypub_object_headers() +     }}    end    def get("http://example.com/rel_me/error", _, _, _) do @@ -1173,7 +1252,12 @@ defmodule HttpRequestMock do    end    def get("https://relay.mastodon.host/actor", _, _, _) do -    {:ok, %Tesla.Env{status: 200, body: File.read!("test/fixtures/relay/relay.json")}} +    {:ok, +     %Tesla.Env{ +       status: 200, +       body: File.read!("test/fixtures/relay/relay.json"), +       headers: activitypub_object_headers() +     }}    end    def get("http://localhost:4001/", _, "", [{"accept", "text/html"}]) do | 
