diff options
Diffstat (limited to 'test/web/media_proxy')
| -rw-r--r-- | test/web/media_proxy/media_proxy_controller_test.exs | 39 | ||||
| -rw-r--r-- | test/web/media_proxy/media_proxy_test.exs | 73 | 
2 files changed, 66 insertions, 46 deletions
| diff --git a/test/web/media_proxy/media_proxy_controller_test.exs b/test/web/media_proxy/media_proxy_controller_test.exs index d4db44c63..0cda1e0b0 100644 --- a/test/web/media_proxy/media_proxy_controller_test.exs +++ b/test/web/media_proxy/media_proxy_controller_test.exs @@ -79,43 +79,4 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyControllerTest do        end      end    end - -  describe "filename_matches/3" do -    test "preserves the encoded or decoded path" do -      assert MediaProxyController.filename_matches( -               %{"filename" => "/Hello world.jpg"}, -               "/Hello world.jpg", -               "http://pleroma.social/Hello world.jpg" -             ) == :ok - -      assert MediaProxyController.filename_matches( -               %{"filename" => "/Hello%20world.jpg"}, -               "/Hello%20world.jpg", -               "http://pleroma.social/Hello%20world.jpg" -             ) == :ok - -      assert MediaProxyController.filename_matches( -               %{"filename" => "/my%2Flong%2Furl%2F2019%2F07%2FS.jpg"}, -               "/my%2Flong%2Furl%2F2019%2F07%2FS.jpg", -               "http://pleroma.social/my%2Flong%2Furl%2F2019%2F07%2FS.jpg" -             ) == :ok - -      assert MediaProxyController.filename_matches( -               %{"filename" => "/my%2Flong%2Furl%2F2019%2F07%2FS.jp"}, -               "/my%2Flong%2Furl%2F2019%2F07%2FS.jp", -               "http://pleroma.social/my%2Flong%2Furl%2F2019%2F07%2FS.jpg" -             ) == {:wrong_filename, "my%2Flong%2Furl%2F2019%2F07%2FS.jpg"} -    end - -    test "encoded url are tried to match for proxy as `conn.request_path` encodes the url" do -      # conn.request_path will return encoded url -      request_path = "/ANALYSE-DAI-_-LE-STABLECOIN-100-D%C3%89CENTRALIS%C3%89-BQ.jpg" - -      assert MediaProxyController.filename_matches( -               true, -               request_path, -               "https://mydomain.com/uploads/2019/07/ANALYSE-DAI-_-LE-STABLECOIN-100-DÉCENTRALISÉ-BQ.jpg" -             ) == :ok -    end -  end  end diff --git a/test/web/media_proxy/media_proxy_test.exs b/test/web/media_proxy/media_proxy_test.exs index 72885cfdd..0e6df826c 100644 --- a/test/web/media_proxy/media_proxy_test.exs +++ b/test/web/media_proxy/media_proxy_test.exs @@ -6,9 +6,16 @@ defmodule Pleroma.Web.MediaProxyTest do    use ExUnit.Case    use Pleroma.Tests.Helpers +  alias Pleroma.Config    alias Pleroma.Web.Endpoint    alias Pleroma.Web.MediaProxy +  defp decode_result(encoded) do +    [_, "proxy", sig, base64 | _] = URI.parse(encoded).path |> String.split("/") +    {:ok, decoded} = MediaProxy.decode_url(sig, base64) +    decoded +  end +    describe "when enabled" do      setup do: clear_config([:media_proxy, :enabled], true) @@ -35,7 +42,7 @@ defmodule Pleroma.Web.MediaProxyTest do        assert String.starts_with?(                 encoded, -               Pleroma.Config.get([:media_proxy, :base_url], Pleroma.Web.base_url()) +               Config.get([:media_proxy, :base_url], Pleroma.Web.base_url())               )        assert String.ends_with?(encoded, "/logo.png") @@ -75,6 +82,64 @@ defmodule Pleroma.Web.MediaProxyTest do        assert MediaProxy.decode_url(sig, base64) == {:error, :invalid_signature}      end +    def test_verify_request_path_and_url(request_path, url, expected_result) do +      assert MediaProxy.verify_request_path_and_url(request_path, url) == expected_result + +      assert MediaProxy.verify_request_path_and_url( +               %Plug.Conn{ +                 params: %{"filename" => Path.basename(request_path)}, +                 request_path: request_path +               }, +               url +             ) == expected_result +    end + +    test "if first arg of `verify_request_path_and_url/2` is a Plug.Conn without \"filename\" " <> +           "parameter, `verify_request_path_and_url/2` returns :ok " do +      assert MediaProxy.verify_request_path_and_url( +               %Plug.Conn{params: %{}, request_path: "/some/path"}, +               "https://instance.com/file.jpg" +             ) == :ok + +      assert MediaProxy.verify_request_path_and_url( +               %Plug.Conn{params: %{}, request_path: "/path/to/file.jpg"}, +               "https://instance.com/file.jpg" +             ) == :ok +    end + +    test "`verify_request_path_and_url/2` preserves the encoded or decoded path" do +      test_verify_request_path_and_url( +        "/Hello world.jpg", +        "http://pleroma.social/Hello world.jpg", +        :ok +      ) + +      test_verify_request_path_and_url( +        "/Hello%20world.jpg", +        "http://pleroma.social/Hello%20world.jpg", +        :ok +      ) + +      test_verify_request_path_and_url( +        "/my%2Flong%2Furl%2F2019%2F07%2FS.jpg", +        "http://pleroma.social/my%2Flong%2Furl%2F2019%2F07%2FS.jpg", +        :ok +      ) + +      test_verify_request_path_and_url( +        # Note: `conn.request_path` returns encoded url +        "/ANALYSE-DAI-_-LE-STABLECOIN-100-D%C3%89CENTRALIS%C3%89-BQ.jpg", +        "https://mydomain.com/uploads/2019/07/ANALYSE-DAI-_-LE-STABLECOIN-100-DÉCENTRALISÉ-BQ.jpg", +        :ok +      ) + +      test_verify_request_path_and_url( +        "/my%2Flong%2Furl%2F2019%2F07%2FS", +        "http://pleroma.social/my%2Flong%2Furl%2F2019%2F07%2FS.jpg", +        {:wrong_filename, "my%2Flong%2Furl%2F2019%2F07%2FS.jpg"} +      ) +    end +      test "uses the configured base_url" do        base_url = "https://cache.pleroma.social"        clear_config([:media_proxy, :base_url], base_url) @@ -124,12 +189,6 @@ defmodule Pleroma.Web.MediaProxyTest do      end    end -  defp decode_result(encoded) do -    [_, "proxy", sig, base64 | _] = URI.parse(encoded).path |> String.split("/") -    {:ok, decoded} = MediaProxy.decode_url(sig, base64) -    decoded -  end -    describe "whitelist" do      setup do: clear_config([:media_proxy, :enabled], true) | 
