diff options
| -rw-r--r-- | lib/pleroma/config/loader.ex | 8 | ||||
| -rw-r--r-- | lib/pleroma/plugs/static_fe_plug.ex | 9 | ||||
| -rw-r--r-- | lib/pleroma/web/streamer/streamer.ex | 12 | ||||
| -rw-r--r-- | priv/repo/migrations/20200706060258_remove_tesla_from_config.exs | 10 | ||||
| -rw-r--r-- | test/config/holder_test.exs | 5 | ||||
| -rw-r--r-- | test/web/static_fe/static_fe_controller_test.exs | 14 | ||||
| -rw-r--r-- | test/web/streamer/streamer_test.exs | 17 | 
7 files changed, 60 insertions, 15 deletions
| diff --git a/lib/pleroma/config/loader.ex b/lib/pleroma/config/loader.ex index 0f3ecf1ed..64e7de6df 100644 --- a/lib/pleroma/config/loader.ex +++ b/lib/pleroma/config/loader.ex @@ -12,6 +12,11 @@ defmodule Pleroma.Config.Loader do      :swarm    ] +  @reject_groups [ +    :postgrex, +    :tesla +  ] +    if Code.ensure_loaded?(Config.Reader) do      @reader Config.Reader @@ -47,7 +52,8 @@ defmodule Pleroma.Config.Loader do    @spec filter_group(atom(), keyword()) :: keyword()    def filter_group(group, configs) do      Enum.reject(configs[group], fn {key, _v} -> -      key in @reject_keys or (group == :phoenix and key == :serve_endpoints) or group == :postgrex +      key in @reject_keys or group in @reject_groups or +        (group == :phoenix and key == :serve_endpoints)      end)    end  end diff --git a/lib/pleroma/plugs/static_fe_plug.ex b/lib/pleroma/plugs/static_fe_plug.ex index 156e6788e..143665c71 100644 --- a/lib/pleroma/plugs/static_fe_plug.ex +++ b/lib/pleroma/plugs/static_fe_plug.ex @@ -9,7 +9,7 @@ defmodule Pleroma.Plugs.StaticFEPlug do    def init(options), do: options    def call(conn, _) do -    if enabled?() and accepts_html?(conn) do +    if enabled?() and requires_html?(conn) do        conn        |> StaticFEController.call(:show)        |> halt() @@ -20,10 +20,7 @@ defmodule Pleroma.Plugs.StaticFEPlug do    defp enabled?, do: Pleroma.Config.get([:static_fe, :enabled], false) -  defp accepts_html?(conn) do -    case get_req_header(conn, "accept") do -      [accept | _] -> String.contains?(accept, "text/html") -      _ -> false -    end +  defp requires_html?(conn) do +    Phoenix.Controller.get_format(conn) == "html"    end  end diff --git a/lib/pleroma/web/streamer/streamer.ex b/lib/pleroma/web/streamer/streamer.ex index 73ee3e1e1..d1d70e556 100644 --- a/lib/pleroma/web/streamer/streamer.ex +++ b/lib/pleroma/web/streamer/streamer.ex @@ -104,7 +104,9 @@ defmodule Pleroma.Web.Streamer do      :ok    end -  def filtered_by_user?(%User{} = user, %Activity{} = item) do +  def filtered_by_user?(user, item, streamed_type \\ :activity) + +  def filtered_by_user?(%User{} = user, %Activity{} = item, streamed_type) do      %{block: blocked_ap_ids, mute: muted_ap_ids, reblog_mute: reblog_muted_ap_ids} =        User.outgoing_relationships_ap_ids(user, [:block, :mute, :reblog_mute]) @@ -116,7 +118,9 @@ defmodule Pleroma.Web.Streamer do           true <-             Enum.all?([blocked_ap_ids, muted_ap_ids], &(item.actor not in &1)),           true <- item.data["type"] != "Announce" || item.actor not in reblog_muted_ap_ids, -         true <- !(item.data["type"] == "Announce" && parent.data["actor"] == user.ap_id), +         true <- +           !(streamed_type == :activity && item.data["type"] == "Announce" && +               parent.data["actor"] == user.ap_id),           true <- Enum.all?([blocked_ap_ids, muted_ap_ids], &(parent.data["actor"] not in &1)),           true <- MapSet.disjoint?(recipients, recipient_blocks),           %{host: item_host} <- URI.parse(item.actor), @@ -131,8 +135,8 @@ defmodule Pleroma.Web.Streamer do      end    end -  def filtered_by_user?(%User{} = user, %Notification{activity: activity}) do -    filtered_by_user?(user, activity) +  def filtered_by_user?(%User{} = user, %Notification{activity: activity}, _) do +    filtered_by_user?(user, activity, :notification)    end    defp do_stream("direct", item) do diff --git a/priv/repo/migrations/20200706060258_remove_tesla_from_config.exs b/priv/repo/migrations/20200706060258_remove_tesla_from_config.exs new file mode 100644 index 000000000..798687f8a --- /dev/null +++ b/priv/repo/migrations/20200706060258_remove_tesla_from_config.exs @@ -0,0 +1,10 @@ +defmodule Pleroma.Repo.Migrations.RemoveTeslaFromConfig do +  use Ecto.Migration + +  def up do +    execute("DELETE FROM config WHERE config.group = ':tesla'") +  end + +  def down do +  end +end diff --git a/test/config/holder_test.exs b/test/config/holder_test.exs index 15d48b5c7..abcaa27dd 100644 --- a/test/config/holder_test.exs +++ b/test/config/holder_test.exs @@ -10,7 +10,6 @@ defmodule Pleroma.Config.HolderTest do    test "default_config/0" do      config = Holder.default_config()      assert config[:pleroma][Pleroma.Uploaders.Local][:uploads] == "test/uploads" -    assert config[:tesla][:adapter] == Tesla.Mock      refute config[:pleroma][Pleroma.Repo]      refute config[:pleroma][Pleroma.Web.Endpoint] @@ -18,17 +17,15 @@ defmodule Pleroma.Config.HolderTest do      refute config[:pleroma][:configurable_from_database]      refute config[:pleroma][:database]      refute config[:phoenix][:serve_endpoints] +    refute config[:tesla][:adapter]    end    test "default_config/1" do      pleroma_config = Holder.default_config(:pleroma)      assert pleroma_config[Pleroma.Uploaders.Local][:uploads] == "test/uploads" -    tesla_config = Holder.default_config(:tesla) -    assert tesla_config[:adapter] == Tesla.Mock    end    test "default_config/2" do      assert Holder.default_config(:pleroma, Pleroma.Uploaders.Local) == [uploads: "test/uploads"] -    assert Holder.default_config(:tesla, :adapter) == Tesla.Mock    end  end diff --git a/test/web/static_fe/static_fe_controller_test.exs b/test/web/static_fe/static_fe_controller_test.exs index a49ab002f..1598bf675 100644 --- a/test/web/static_fe/static_fe_controller_test.exs +++ b/test/web/static_fe/static_fe_controller_test.exs @@ -87,6 +87,20 @@ defmodule Pleroma.Web.StaticFE.StaticFEControllerTest do        assert html =~ "testing a thing!"      end +    test "redirects to json if requested", %{conn: conn, user: user} do +      {:ok, activity} = CommonAPI.post(user, %{status: "testing a thing!"}) + +      conn = +        conn +        |> put_req_header( +          "accept", +          "Accept: application/activity+json, application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\", text/html" +        ) +        |> get("/notice/#{activity.id}") + +      assert redirected_to(conn, 302) =~ activity.data["object"] +    end +      test "filters HTML tags", %{conn: conn} do        user = insert(:user)        {:ok, activity} = CommonAPI.post(user, %{status: "<script>alert('xss')</script>"}) diff --git a/test/web/streamer/streamer_test.exs b/test/web/streamer/streamer_test.exs index dfe341b34..d56d74464 100644 --- a/test/web/streamer/streamer_test.exs +++ b/test/web/streamer/streamer_test.exs @@ -128,6 +128,23 @@ defmodule Pleroma.Web.StreamerTest do        assert Streamer.filtered_by_user?(user, announce)      end +    test "it does stream notifications announces of the user's own posts in the 'user' stream", %{ +      user: user +    } do +      Streamer.get_topic_and_add_socket("user", user) + +      other_user = insert(:user) +      {:ok, activity} = CommonAPI.post(user, %{status: "hey"}) +      {:ok, announce} = CommonAPI.repeat(activity.id, other_user) + +      notification = +        Pleroma.Notification +        |> Repo.get_by(%{user_id: user.id, activity_id: announce.id}) +        |> Repo.preload(:activity) + +      refute Streamer.filtered_by_user?(user, notification) +    end +      test "it streams boosts of mastodon user in the 'user' stream", %{user: user} do        Streamer.get_topic_and_add_socket("user", user) | 
