From: Alex Gleason Date: Wed, 14 Oct 2020 00:26:04 +0000 (-0500) Subject: Merge remote-tracking branch 'upstream/develop' into restrict-domain X-Git-Url: http://git.squeep.com/?a=commitdiff_plain;h=755f58168bb2b6b979c6f5d36f7eff56d2305911;hp=-c;p=akkoma Merge remote-tracking branch 'upstream/develop' into restrict-domain --- 755f58168bb2b6b979c6f5d36f7eff56d2305911 diff --combined lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex index 701d69fd1,7a5c80e01..ac96520a3 --- a/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex @@@ -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]) @@@ -111,7 -111,6 +111,7 @@@ |> 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 diff --combined lib/pleroma/web/streamer.ex index d774f0dd9,d618dfe54..71fe27c89 --- a/lib/pleroma/web/streamer.ex +++ b/lib/pleroma/web/streamer.ex @@@ -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() @@@ -57,15 -57,6 +57,15 @@@ {: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, diff --combined test/pleroma/activity/ir/topics_test.exs index c8dcb28cc,4ddcea1ec..2e5655334 --- a/test/pleroma/activity/ir/topics_test.exs +++ b/test/pleroma/activity/ir/topics_test.exs @@@ -1,3 -1,7 +1,7 @@@ + # Pleroma: A lightweight social networking server + # Copyright © 2017-2020 Pleroma Authors + # SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Activity.Ir.TopicsTest do use Pleroma.DataCase @@@ -93,13 -97,6 +97,13 @@@ 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 @@@ -131,13 -128,6 +135,13 @@@ 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 diff --combined test/pleroma/integration/mastodon_websocket_test.exs index bb8e795b7,0f2e6cc2b..bb8e795b7 --- a/test/pleroma/integration/mastodon_websocket_test.exs +++ b/test/pleroma/integration/mastodon_websocket_test.exs @@@ -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 diff --combined test/pleroma/web/admin_api/controllers/admin_api_controller_test.exs index a0808c347,cba6b43d3..a0808c347 --- a/test/pleroma/web/admin_api/controllers/admin_api_controller_test.exs +++ b/test/pleroma/web/admin_api/controllers/admin_api_controller_test.exs @@@ -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) diff --combined test/pleroma/web/mastodon_api/controllers/timeline_controller_test.exs index 8a70cfd64,c6e0268fd..8a70cfd64 --- a/test/pleroma/web/mastodon_api/controllers/timeline_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/timeline_controller_test.exs @@@ -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 diff --combined test/pleroma/web/streamer_test.exs index 1495ed124,185724a9f..1495ed124 --- a/test/pleroma/web/streamer_test.exs +++ b/test/pleroma/web/streamer_test.exs @@@ -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