[#2497] Media preview proxy config refactoring & documentation.
This commit is contained in:
parent
da116d81fb
commit
4ee15e991e
|
@ -444,8 +444,7 @@
|
||||||
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
|
||||||
|
|
|
@ -1831,6 +1831,7 @@
|
||||||
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 @@
|
||||||
"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 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
%{
|
||||||
|
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,
|
||||||
|
|
|
@ -15,8 +15,7 @@ def remote(conn, %{"sig" => sig64, "url" => url64}) 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 @@ defp thumbnail_max_dimensions(params) 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
|
||||||
|
|
Loading…
Reference in a new issue