- {:ok, url} = Pleroma.MediaProxy.decode_url(sig, url)
- url = url |> URI.encode()
- case proxy_request(url) do
- {:ok, content_type, body} ->
- conn
- |> put_resp_content_type(content_type)
- |> set_cache_header(:default)
- |> send_resp(200, body)
- other ->
- conn
- |> set_cache_header(:error)
- |> redirect(external: url)
+ config = Application.get_env(:pleroma, :media_proxy, [])
+
+ with true <- Keyword.get(config, :enabled, false),
+ {:ok, url} <- Pleroma.Web.MediaProxy.decode_url(sig, url),
+ {:ok, content_type, body} <- proxy_request(url) do
+ conn
+ |> put_resp_content_type(content_type)
+ |> set_cache_header(:default)
+ |> send_resp(200, body)
+ else
+ false ->
+ send_error(conn, 404)
+
+ {:error, :invalid_signature} ->
+ send_error(conn, 403)
+
+ {:error, {:http, _, url}} ->
+ redirect_or_error(conn, url, Keyword.get(config, :redirect_on_failure, true))