diff --git a/changelog.d/media-proxy-static-redirect.fix b/changelog.d/media-proxy-static-redirect.fix new file mode 100644 index 000000000..4408278ba --- /dev/null +++ b/changelog.d/media-proxy-static-redirect.fix @@ -0,0 +1 @@ +Media proxy: serve a preview for static=true on non-GIF files instead of redirecting to the main endpoint host diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index a0aafc32e..04e8ffd52 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -7,7 +7,6 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do alias Pleroma.Config alias Pleroma.Helpers.MediaHelper - alias Pleroma.Helpers.UriHelper alias Pleroma.ReverseProxy alias Pleroma.Web.MediaProxy alias Plug.Conn @@ -67,9 +66,6 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do static and content_type == "image/gif" -> handle_jpeg_preview(conn, media_proxy_url) - static -> - drop_static_param_and_redirect(conn) - content_type == "image/gif" -> conn |> put_status(301) @@ -166,15 +162,6 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do end end - defp drop_static_param_and_redirect(conn) do - uri_without_static_param = - conn - |> current_url() - |> UriHelper.modify_uri_params(%{}, ["static"]) - - redirect(conn, external: uri_without_static_param) - end - defp fallback_on_preview_error(conn, media_proxy_url) do redirect(conn, external: media_proxy_url) end diff --git a/test/pleroma/web/media_proxy/media_proxy_controller_test.exs b/test/pleroma/web/media_proxy/media_proxy_controller_test.exs index f7e52483c..71ad19c09 100644 --- a/test/pleroma/web/media_proxy/media_proxy_controller_test.exs +++ b/test/pleroma/web/media_proxy/media_proxy_controller_test.exs @@ -252,22 +252,27 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyControllerTest do assert redirected_to(response, 301) == media_proxy_url end - test "with `static` param and non-GIF image preview requested, " <> - "redirects to media preview proxy URI without `static` param", + test "with `static` param and non-GIF image preview requested, responds with a preview", %{ conn: conn, url: url, media_proxy_url: media_proxy_url } do + assert_dependencies_installed() + Tesla.Mock.mock(fn %{method: :head, url: ^media_proxy_url} -> %Tesla.Env{status: 200, body: "", headers: [{"content-type", "image/jpeg"}]} + + %{method: :get, url: ^media_proxy_url} -> + %Tesla.Env{status: 200, body: File.read!("test/fixtures/image.jpg")} end) response = get(conn, url <> "?static=true") - assert response.status == 302 - assert redirected_to(response) == url + assert response.status == 200 + assert Conn.get_resp_header(response, "content-type") == ["image/jpeg"] + assert response.resp_body != "" end test "with :min_content_length setting not matched by Content-Length header, " <>