[#2497] Media preview proxy config refactoring & documentation.

This commit is contained in:
Ivan Tashkinov 2020-08-19 21:36:26 +03:00
parent da116d81fb
commit 4ee15e991e
3 changed files with 63 additions and 11 deletions

View file

@ -444,8 +444,7 @@ config :pleroma, :media_preview_proxy,
thumbnail_max_width: 400, thumbnail_max_width: 400,
thumbnail_max_height: 200, thumbnail_max_height: 200,
proxy_opts: [ proxy_opts: [
head_request_max_read_duration: 5_000, head_request_max_read_duration: 5_000
max_read_duration: 10_000
] ]
config :pleroma, :chat, enabled: true config :pleroma, :chat, enabled: true

View file

@ -1831,6 +1831,7 @@ config :pleroma, :config_description, [
suggestions: [ suggestions: [
redirect_on_failure: false, redirect_on_failure: false,
max_body_length: 25 * 1_048_576, max_body_length: 25 * 1_048_576,
max_read_duration: 30_000,
http: [ http: [
follow_redirect: true, follow_redirect: true,
pool: :media pool: :media
@ -1851,6 +1852,11 @@ config :pleroma, :config_description, [
"Limits the content length to be approximately the " <> "Limits the content length to be approximately the " <>
"specified length. It is validated with the `content-length` header and also verified when proxying." "specified length. It is validated with the `content-length` header and also verified when proxying."
}, },
%{
key: :max_read_duration,
type: :integer,
description: "Timeout (in milliseconds) of GET request to remote URI."
},
%{ %{
key: :http, key: :http,
label: "HTTP", label: "HTTP",
@ -1897,6 +1903,51 @@ config :pleroma, :config_description, [
} }
] ]
}, },
%{
group: :pleroma,
key: :media_preview_proxy,
type: :group,
description: "Media preview proxy",
children: [
%{
key: :enabled,
type: :boolean,
description:
"Enables proxying of remote media preview to the instance's proxy. Requires enabled media proxy."
},
%{
key: :thumbnail_max_width,
type: :integer,
description: "Max width of preview thumbnail."
},
%{
key: :thumbnail_max_height,
type: :integer,
description: "Max height of preview thumbnail."
},
%{
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"]
}
]
},
%{ %{
group: :pleroma, group: :pleroma,
key: Pleroma.Web.MediaProxy.Invalidation.Http, key: Pleroma.Web.MediaProxy.Invalidation.Http,

View file

@ -15,8 +15,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do
{:ok, url} <- MediaProxy.decode_url(sig64, url64), {:ok, url} <- MediaProxy.decode_url(sig64, url64),
{_, false} <- {:in_banned_urls, MediaProxy.in_banned_urls(url)}, {_, false} <- {:in_banned_urls, MediaProxy.in_banned_urls(url)},
:ok <- MediaProxy.verify_request_path_and_url(conn, url) do :ok <- MediaProxy.verify_request_path_and_url(conn, url) do
proxy_opts = Config.get([:media_proxy, :proxy_opts], []) ReverseProxy.call(conn, url, media_proxy_opts())
ReverseProxy.call(conn, url, proxy_opts)
else else
{:enabled, false} -> {:enabled, false} ->
send_resp(conn, 404, Plug.Conn.Status.reason_phrase(404)) send_resp(conn, 404, Plug.Conn.Status.reason_phrase(404))
@ -116,13 +115,16 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do
end end
defp preview_head_request_timeout do defp preview_head_request_timeout do
Config.get([:media_preview_proxy, :proxy_opts, :head_request_max_read_duration]) || Keyword.get(media_preview_proxy_opts(), :head_request_max_read_duration) ||
preview_timeout() Keyword.get(media_proxy_opts(), :max_read_duration) ||
end
defp preview_timeout do
Config.get([:media_preview_proxy, :proxy_opts, :max_read_duration]) ||
Config.get([:media_proxy, :proxy_opts, :max_read_duration]) ||
ReverseProxy.max_read_duration_default() ReverseProxy.max_read_duration_default()
end 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 end