Fetch preview requests through the MediaProxy. Separate connection options are not needed.

Use a separate pool for preview requests
This commit is contained in:
Mark Felder 2020-09-03 12:40:42 -05:00
parent 85446cc30c
commit 6141eb94ab
3 changed files with 8 additions and 40 deletions

View file

@ -445,10 +445,7 @@
enabled: false, enabled: false,
thumbnail_max_width: 600, thumbnail_max_width: 600,
thumbnail_max_height: 600, thumbnail_max_height: 600,
image_quality: 85, image_quality: 85
proxy_opts: [
head_request_max_read_duration: 5_000
]
config :pleroma, :chat, enabled: true config :pleroma, :chat, enabled: true
@ -761,6 +758,11 @@
max_waiting: 10, max_waiting: 10,
timeout: 10_000 timeout: 10_000
], ],
preview: [
size: 50,
max_waiting: 10,
timeout: 10_000
],
upload: [ upload: [
size: 25, size: 25,
max_waiting: 5, max_waiting: 5,

View file

@ -1978,27 +1978,6 @@
key: :image_quality, key: :image_quality,
type: :integer, type: :integer,
description: "Quality of the output. Ranges from 0 (min quality) to 100 (max quality)." description: "Quality of the output. Ranges from 0 (min quality) to 100 (max quality)."
},
%{
key: :proxy_opts,
type: :keyword,
description: "Media proxy options",
suggestions: [
head_request_max_read_duration: 5_000
],
children: [
%{
key: :head_request_max_read_duration,
type: :integer,
description: "Timeout (in milliseconds) of HEAD request to remote URI."
}
]
},
%{
key: :whitelist,
type: {:list, :string},
description: "List of hosts with scheme to bypass the mediaproxy",
suggestions: ["http://example.com"]
} }
] ]
}, },

View file

@ -33,8 +33,7 @@ def remote(conn, %{"sig" => sig64, "url" => url64}) do
def preview(conn, %{"sig" => sig64, "url" => url64}) do def preview(conn, %{"sig" => sig64, "url" => url64}) do
with {_, true} <- {:enabled, MediaProxy.preview_enabled?()}, with {_, true} <- {:enabled, MediaProxy.preview_enabled?()},
{:ok, url} <- MediaProxy.decode_url(sig64, url64), {:ok, url} <- MediaProxy.decode_url(sig64, url64) do
:ok <- MediaProxy.verify_request_path_and_url(conn, url) do
handle_preview(conn, url) handle_preview(conn, url)
else else
{:enabled, false} -> {:enabled, false} ->
@ -50,9 +49,7 @@ def preview(conn, %{"sig" => sig64, "url" => url64}) do
defp handle_preview(conn, url) do defp handle_preview(conn, url) do
with {:ok, %{status: status} = head_response} when status in 200..299 <- with {:ok, %{status: status} = head_response} when status in 200..299 <-
Tesla.head(url, Pleroma.HTTP.request("head", MediaProxy.url(url), [], [], [adapter: [pool: :preview]]) do
opts: [adapter: [timeout: preview_head_request_timeout(), follow_redirect: true]]
) do
content_type = Tesla.get_header(head_response, "content-type") content_type = Tesla.get_header(head_response, "content-type")
handle_preview(content_type, conn, url) handle_preview(content_type, conn, url)
else else
@ -172,17 +169,7 @@ defp thumbnail_max_dimensions(params) do
{thumbnail_max_width, thumbnail_max_height} {thumbnail_max_width, thumbnail_max_height}
end end
defp preview_head_request_timeout do
Keyword.get(media_preview_proxy_opts(), :head_request_max_read_duration) ||
Keyword.get(media_proxy_opts(), :max_read_duration) ||
ReverseProxy.max_read_duration_default()
end
defp media_proxy_opts do defp media_proxy_opts do
Config.get([:media_proxy, :proxy_opts], []) Config.get([:media_proxy, :proxy_opts], [])
end end
defp media_preview_proxy_opts do
Config.get([:media_preview_proxy, :proxy_opts], [])
end
end end