Merge remote-tracking branch 'upstream/develop' into restrict-domain
authorAlex Gleason <alex@alexgleason.me>
Wed, 14 Oct 2020 00:26:04 +0000 (19:26 -0500)
committerAlex Gleason <alex@alexgleason.me>
Wed, 14 Oct 2020 00:26:04 +0000 (19:26 -0500)
1  2 
lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex
lib/pleroma/web/streamer.ex
test/pleroma/activity/ir/topics_test.exs
test/pleroma/integration/mastodon_websocket_test.exs
test/pleroma/web/admin_api/controllers/admin_api_controller_test.exs
test/pleroma/web/mastodon_api/controllers/timeline_controller_test.exs
test/pleroma/web/streamer_test.exs

index 701d69fd1576bbf7ecb11943e4d8529616f89044,7a5c80e013e288b6e250c5340de7f4e540532c85..ac96520a3749cf2c8c96536337d93bda5c5e489a
@@@ -10,11 -10,11 +10,11 @@@ defmodule Pleroma.Web.MastodonAPI.Timel
  
    alias Pleroma.Config
    alias Pleroma.Pagination
-   alias Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug
-   alias Pleroma.Plugs.OAuthScopesPlug
-   alias Pleroma.Plugs.RateLimiter
    alias Pleroma.User
    alias Pleroma.Web.ActivityPub.ActivityPub
+   alias Pleroma.Web.Plugs.EnsurePublicOrAuthenticatedPlug
+   alias Pleroma.Web.Plugs.OAuthScopesPlug
+   alias Pleroma.Web.Plugs.RateLimiter
  
    plug(Pleroma.Web.ApiSpec.CastAndValidate)
    plug(:skip_plug, EnsurePublicOrAuthenticatedPlug when action in [:public, :hashtag])
          |> Map.put(:blocking_user, user)
          |> Map.put(:muting_user, user)
          |> Map.put(:reply_filtering_user, user)
 +        |> Map.put(:instance, params[:instance])
          |> ActivityPub.fetch_public_activities()
  
        conn
index d774f0dd9ecd21a8c6d9491c04856c0501e6e33a,d618dfe54a93b74bf6fd9bb81b7151893b591500..71fe27c894db72f86641e41d401851c6762b3d68
@@@ -11,12 -11,12 +11,12 @@@ defmodule Pleroma.Web.Streamer d
    alias Pleroma.Conversation.Participation
    alias Pleroma.Notification
    alias Pleroma.Object
-   alias Pleroma.Plugs.OAuthScopesPlug
    alias Pleroma.User
    alias Pleroma.Web.ActivityPub.ActivityPub
    alias Pleroma.Web.ActivityPub.Visibility
    alias Pleroma.Web.CommonAPI
    alias Pleroma.Web.OAuth.Token
+   alias Pleroma.Web.Plugs.OAuthScopesPlug
    alias Pleroma.Web.StreamerView
  
    @mix_env Mix.env()
      {:ok, "hashtag:" <> tag}
    end
  
 +  # Allow remote instance streams.
 +  def get_topic("public:remote", _user, _oauth_token, %{"instance" => instance} = _params) do
 +    {:ok, "public:remote:" <> instance}
 +  end
 +
 +  def get_topic("public:remote:media", _user, _oauth_token, %{"instance" => instance} = _params) do
 +    {:ok, "public:remote:media:" <> instance}
 +  end
 +
    # Expand user streams.
    def get_topic(
          stream,
index c8dcb28cccbd52b118e5cd6c2aeb5b0e5b608b99,4ddcea1ec04f39a81b2598f3041379ad3d840da5..2e5655334d57951a7ca8b2171915ef18715b59c4
@@@ -1,3 -1,7 +1,7 @@@
+ # Pleroma: A lightweight social networking server
+ # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
+ # SPDX-License-Identifier: AGPL-3.0-only
  defmodule Pleroma.Activity.Ir.TopicsTest do
    use Pleroma.DataCase
  
  
        refute Enum.member?(topics, "hashtag:2")
      end
 +
 +    test "non-local action produces public:remote topic", %{activity: activity} do
 +      activity = %{activity | local: false, actor: "https://lain.com/users/lain"}
 +      topics = Topics.get_activity_topics(activity)
 +
 +      assert Enum.member?(topics, "public:remote:lain.com")
 +    end
    end
  
    describe "public visibility create events with attachments" do
  
        refute Enum.member?(topics, "public:local:media")
      end
 +
 +    test "non-local action produces public:remote:media topic", %{activity: activity} do
 +      activity = %{activity | local: false, actor: "https://lain.com/users/lain"}
 +      topics = Topics.get_activity_topics(activity)
 +
 +      assert Enum.member?(topics, "public:remote:media:lain.com")
 +    end
    end
  
    describe "non-public visibility" do
index bb8e795b723c5f1bf7e31aeee47a901e8cbe9e03,0f2e6cc2b0a1169e84cdb62fc55523133dc0013d..bb8e795b723c5f1bf7e31aeee47a901e8cbe9e03
@@@ -49,7 -49,6 +49,7 @@@ defmodule Pleroma.Integration.MastodonW
    test "allows public streams without authentication" do
      assert {:ok, _} = start_socket("?stream=public")
      assert {:ok, _} = start_socket("?stream=public:local")
 +    assert {:ok, _} = start_socket("?stream=public:remote&instance=lain.com")
      assert {:ok, _} = start_socket("?stream=hashtag&tag=lain")
    end
  
index a0808c347171ae43e9a8b27bf575e336bd7ad30e,cba6b43d32a7d1a3e8519d5ebcc74d55e025256b..a0808c347171ae43e9a8b27bf575e336bd7ad30e
@@@ -1891,8 -1891,8 +1891,8 @@@ defmodule Pleroma.Web.AdminAPI.AdminAPI
  
    describe "instances" do
      test "GET /instances/:instance/statuses", %{conn: conn} do
 -      user = insert(:user, local: false, nickname: "archaeme@archae.me")
 -      user2 = insert(:user, local: false, nickname: "test@test.com")
 +      user = insert(:user, local: false, ap_id: "https://archae.me/users/archaeme")
 +      user2 = insert(:user, local: false, ap_id: "https://test.com/users/test")
        insert_pair(:note_activity, user: user)
        activity = insert(:note_activity, user: user2)
  
index 8a70cfd64bdd02c67ae751b89e33bb492c82d9c1,c6e0268fdbdaa80fd885a93976d27f704a98260e..8a70cfd64bdd02c67ae751b89e33bb492c82d9c1
@@@ -148,18 -148,6 +148,18 @@@ defmodule Pleroma.Web.MastodonAPI.Timel
        activities = json_response_and_validate_schema(res_conn, 200)
        [%{"id" => ^activity_id}] = activities
      end
 +
 +    test "can be filtered by instance", %{conn: conn} do
 +      user = insert(:user, ap_id: "https://lain.com/users/lain")
 +      insert(:note_activity, local: false)
 +      insert(:note_activity, local: false)
 +
 +      {:ok, _} = CommonAPI.post(user, %{status: "test"})
 +
 +      conn = get(conn, "/api/v1/timelines/public?instance=lain.com")
 +
 +      assert length(json_response_and_validate_schema(conn, :ok)) == 1
 +    end
    end
  
    defp local_and_remote_activities do
index 1495ed1245544aa1cf4d7aef7fe55efc2b9f0779,185724a9fce49d1b197466f6e4c85b3e1b5ee431..1495ed1245544aa1cf4d7aef7fe55efc2b9f0779
@@@ -29,14 -29,6 +29,14 @@@ defmodule Pleroma.Web.StreamerTest d
        assert {:ok, "public:local:media"} = Streamer.get_topic("public:local:media", nil, nil)
      end
  
 +    test "allows instance streams" do
 +      assert {:ok, "public:remote:lain.com"} =
 +               Streamer.get_topic("public:remote", nil, nil, %{"instance" => "lain.com"})
 +
 +      assert {:ok, "public:remote:media:lain.com"} =
 +               Streamer.get_topic("public:remote:media", nil, nil, %{"instance" => "lain.com"})
 +    end
 +
      test "allows hashtag streams" do
        assert {:ok, "hashtag:cofe"} = Streamer.get_topic("hashtag", nil, nil, %{"tag" => "cofe"})
      end