enabled: false,
thumbnail_max_width: 600,
thumbnail_max_height: 600,
- image_quality: 85,
- proxy_opts: [
- head_request_max_read_duration: 5_000
- ]
+ image_quality: 85
config :pleroma, :chat, enabled: true
max_waiting: 10,
timeout: 10_000
],
+ preview: [
+ size: 50,
+ max_waiting: 10,
+ timeout: 10_000
+ ],
upload: [
size: 25,
max_waiting: 5,
key: :image_quality,
type: :integer,
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"]
}
]
},
def preview(conn, %{"sig" => sig64, "url" => url64}) do
with {_, true} <- {:enabled, MediaProxy.preview_enabled?()},
- {:ok, url} <- MediaProxy.decode_url(sig64, url64),
- :ok <- MediaProxy.verify_request_path_and_url(conn, url) do
+ {:ok, url} <- MediaProxy.decode_url(sig64, url64) do
handle_preview(conn, url)
else
{:enabled, false} ->
defp handle_preview(conn, url) do
with {:ok, %{status: status} = head_response} when status in 200..299 <-
- Tesla.head(url,
- opts: [adapter: [timeout: preview_head_request_timeout(), follow_redirect: true]]
- ) do
+ Pleroma.HTTP.request("head", MediaProxy.url(url), [], [], [adapter: [pool: :preview]]) do
content_type = Tesla.get_header(head_response, "content-type")
handle_preview(content_type, conn, url)
else
{thumbnail_max_width, thumbnail_max_height}
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
Config.get([:media_proxy, :proxy_opts], [])
end
-
- defp media_preview_proxy_opts do
- Config.get([:media_preview_proxy, :proxy_opts], [])
- end
end