summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Tashkinov <ivantashkinov@gmail.com>2020-08-19 21:36:26 +0300
committerIvan Tashkinov <ivantashkinov@gmail.com>2020-08-19 21:36:26 +0300
commit4ee15e991efb5bd5bf69d84d27dbbee81443d1dc (patch)
tree3cb4b0c5142c5687f0f8a4d3b689828f8e5008c5
parentda116d81fb0028913c2a0f30ac35532fb500e8fc (diff)
[#2497] Media preview proxy config refactoring & documentation.
-rw-r--r--config/config.exs3
-rw-r--r--config/description.exs51
-rw-r--r--lib/pleroma/web/media_proxy/media_proxy_controller.ex18
3 files changed, 62 insertions, 10 deletions
diff --git a/config/config.exs b/config/config.exs
index 029f8ec20..6e6231cf8 100644
--- a/config/config.exs
+++ b/config/config.exs
@@ -444,8 +444,7 @@ config :pleroma, :media_preview_proxy,
thumbnail_max_width: 400,
thumbnail_max_height: 200,
proxy_opts: [
- head_request_max_read_duration: 5_000,
- max_read_duration: 10_000
+ head_request_max_read_duration: 5_000
]
config :pleroma, :chat, enabled: true
diff --git a/config/description.exs b/config/description.exs
index e27abf40f..90d8eca65 100644
--- a/config/description.exs
+++ b/config/description.exs
@@ -1831,6 +1831,7 @@ config :pleroma, :config_description, [
suggestions: [
redirect_on_failure: false,
max_body_length: 25 * 1_048_576,
+ max_read_duration: 30_000,
http: [
follow_redirect: true,
pool: :media
@@ -1852,6 +1853,11 @@ config :pleroma, :config_description, [
"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,
label: "HTTP",
type: :keyword,
@@ -1899,6 +1905,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,
key: Pleroma.Web.MediaProxy.Invalidation.Http,
type: :group,
description: "HTTP invalidate settings",
diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex
index 8861398dd..31d18c119 100644
--- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex
+++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex
@@ -15,8 +15,7 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do
{:ok, url} <- MediaProxy.decode_url(sig64, url64),
{_, false} <- {:in_banned_urls, MediaProxy.in_banned_urls(url)},
:ok <- MediaProxy.verify_request_path_and_url(conn, url) do
- proxy_opts = Config.get([:media_proxy, :proxy_opts], [])
- ReverseProxy.call(conn, url, proxy_opts)
+ ReverseProxy.call(conn, url, media_proxy_opts())
else
{:enabled, false} ->
send_resp(conn, 404, Plug.Conn.Status.reason_phrase(404))
@@ -116,13 +115,16 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do
end
defp preview_head_request_timeout do
- Config.get([:media_preview_proxy, :proxy_opts, :head_request_max_read_duration]) ||
- preview_timeout()
+ 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 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()
+ 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