Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F85825088
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Authored By
Unknown
Size
4 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/lib/pleroma/web/media_proxy.ex b/lib/pleroma/web/media_proxy.ex
index f9376b508..82a070767 100644
--- a/lib/pleroma/web/media_proxy.ex
+++ b/lib/pleroma/web/media_proxy.ex
@@ -41,6 +41,7 @@ defmodule Pleroma.Web.MediaProxy do
end
def url(url) when is_nil(url) or url == "", do: nil
+ def url("//" <> _ = url), do: url("https:" <> url)
def url("/" <> _ = url), do: url
def url(url) do
@@ -56,7 +57,10 @@ defmodule Pleroma.Web.MediaProxy do
not local?(url) and not whitelisted?(url)
end
- def preview_url(url, preview_params \\ []) do
+ def preview_url(url, preview_params \\ [])
+ def preview_url("//" <> _ = url, pparams), do: preview_url("https:" <> url, pparams)
+
+ def preview_url(url, preview_params) do
if preview_enabled?() do
encode_preview_url(url, preview_params)
else
diff --git a/priv/scrubbers/media_proxy.ex b/priv/scrubbers/media_proxy.ex
index 9935b3829..8a73e8d9b 100644
--- a/priv/scrubbers/media_proxy.ex
+++ b/priv/scrubbers/media_proxy.ex
@@ -17,6 +17,10 @@ defmodule Pleroma.HTML.Transform.MediaProxy do
{"src", media_url}
end
+ def scrub_attribute(:img, {"src", "//" <> target}) do
+ scrub_attribute(:img, {"src", "https://" <> target})
+ end
+
def scrub_attribute(_tag, attribute), do: attribute
def scrub({:img, attributes, children}) do
diff --git a/test/pleroma/web/mastodon_api/views/status_view_test.exs b/test/pleroma/web/mastodon_api/views/status_view_test.exs
index f7b815ed7..ca40f4946 100644
--- a/test/pleroma/web/mastodon_api/views/status_view_test.exs
+++ b/test/pleroma/web/mastodon_api/views/status_view_test.exs
@@ -559,6 +559,46 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do
assert mention.url == recipient_ap_id
end
+ test "inlined images are media proxied" do
+ ConfigMock |> stub_with(Pleroma.Test.StaticConfig)
+ clear_config([:media_proxy, :enabled], true)
+ user = insert(:user)
+
+ {:ok, activity} =
+ CommonAPI.post(user, %{
+ content_type: "text/html",
+ status: "hii <img src=\"https://example.org/a.png\" />"
+ })
+
+ activity = Repo.get(Activity, activity.id)
+ status = StatusView.render("show.json", activity: activity)
+
+ assert_schema(status, "Status", Pleroma.Web.ApiSpec.spec())
+
+ assert status[:content] =~
+ ~r/^hii <img src="https?:\/\/[^\/]+\/proxy\/[^\/]+\/aHR0cHM6Ly9leGFtcGxlLm9yZy9hLnBuZw\/a.png"/
+ end
+
+ test "inlined images using network-path ref are media proxied" do
+ ConfigMock |> stub_with(Pleroma.Test.StaticConfig)
+ clear_config([:media_proxy, :enabled], true)
+ user = insert(:user)
+
+ {:ok, activity} =
+ CommonAPI.post(user, %{
+ content_type: "text/html",
+ status: "hii <img src=\"//example.org/a.png\" />"
+ })
+
+ activity = Repo.get(Activity, activity.id)
+ status = StatusView.render("show.json", activity: activity)
+
+ assert_schema(status, "Status", Pleroma.Web.ApiSpec.spec())
+
+ assert status[:content] =~
+ ~r/^hii <img src="https?:\/\/[^\/]+\/proxy\/[^\/]+\/aHR0cHM6Ly9leGFtcGxlLm9yZy9hLnBuZw\/a.png"/
+ end
+
test "create mentions from the 'tag' field" do
recipient = insert(:user)
cc = insert_pair(:user) |> Enum.map(& &1.ap_id)
diff --git a/test/pleroma/web/media_proxy_test.exs b/test/pleroma/web/media_proxy_test.exs
index 86d30c04c..ab707a061 100644
--- a/test/pleroma/web/media_proxy_test.exs
+++ b/test/pleroma/web/media_proxy_test.exs
@@ -59,6 +59,20 @@ defmodule Pleroma.Web.MediaProxyTest do
assert decode_result(encoded) == url
end
+ test "encodes and decodes a network-path reference URL as HTTPS" do
+ url = "//example.org/static/logo.png"
+ encoded = MediaProxy.url(url)
+
+ assert String.starts_with?(
+ encoded,
+ Config.get([:media_proxy, :base_url], Pleroma.Web.Endpoint.url())
+ )
+
+ assert String.ends_with?(encoded, "/logo.png")
+
+ assert decode_result(encoded) == "https:" <> url
+ end
+
test "encodes and decodes URL without a path" do
url = "https://pleroma.soykaf.com"
encoded = MediaProxy.url(url)
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Thu, Oct 29, 10:03 PM (1 d, 17 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1798749
Default Alt Text
(4 KB)
Attached To
Mode
rPUBE pleroma-upstream
Attached
Detach File
Event Timeline