diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/pleroma/web/activity_pub/activity_pub_controller_test.exs | 50 | 
1 files changed, 49 insertions, 1 deletions
| diff --git a/test/pleroma/web/activity_pub/activity_pub_controller_test.exs b/test/pleroma/web/activity_pub/activity_pub_controller_test.exs index af1a32fed..3bd589f49 100644 --- a/test/pleroma/web/activity_pub/activity_pub_controller_test.exs +++ b/test/pleroma/web/activity_pub/activity_pub_controller_test.exs @@ -657,7 +657,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do      end      test "without valid signature, " <> -           "it only accepts Create activities and requires enabled federation", +           "it accepts Create activities and requires enabled federation",           %{conn: conn} do        data = File.read!("test/fixtures/mastodon-post-activity.json") |> Jason.decode!()        non_create_data = File.read!("test/fixtures/mastodon-announce.json") |> Jason.decode!() @@ -684,6 +684,54 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do        |> json_response(400)      end +    # When activity is delivered to the inbox and we cannot immediately verify signature +    # we capture all the params and process it later in the Oban job. +    # Once we begin processing it through Oban we risk fetching the actor to validate the +    # activity which just leads to inserting a new user to process a Delete not relevant to us. +    test "Activities of certain types from an unknown actor are discarded", %{conn: conn} do +      example_bad_types = +        Pleroma.Constants.activity_types() -- +          Pleroma.Constants.allowed_activity_types_from_strangers() + +      Enum.each(example_bad_types, fn bad_type -> +        params = +          %{ +            "type" => bad_type, +            "actor" => "https://unknown.mastodon.instance/users/somebody" +          } +          |> Jason.encode!() + +        conn +        |> assign(:valid_signature, false) +        |> put_req_header("content-type", "application/activity+json") +        |> post("/inbox", params) +        |> json_response(400) + +        assert all_enqueued() == [] +      end) +    end + +    test "Unknown activity types are discarded", %{conn: conn} do +      unknown_types = ["Poke", "Read", "Dazzle"] + +      Enum.each(unknown_types, fn bad_type -> +        params = +          %{ +            "type" => bad_type, +            "actor" => "https://unknown.mastodon.instance/users/somebody" +          } +          |> Jason.encode!() + +        conn +        |> assign(:valid_signature, true) +        |> put_req_header("content-type", "application/activity+json") +        |> post("/inbox", params) +        |> json_response(400) + +        assert all_enqueued() == [] +      end) +    end +      test "accepts Add/Remove activities", %{conn: conn} do        object_id = "c61d6733-e256-4fe1-ab13-1e369789423f" | 
