aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkaniini <nenolod@gmail.com>2019-03-15 20:06:08 +0000
committerkaniini <nenolod@gmail.com>2019-03-15 20:06:08 +0000
commit4b3c86c1a61a029202a262229c713cc3737b2a1b (patch)
treee95fdbd7f6fb5b7fa0e242aa52bdf213d24e2853
parent8b352af4dd4f79432e3e9c48593380292e4002d7 (diff)
parentd02f1120f9fe8e048bac6665e95e51648a50c53b (diff)
downloadpleroma-4b3c86c1a61a029202a262229c713cc3737b2a1b.tar.gz
Merge branch 'fix/mediaproxy-capture-content-disposition-filename' into 'develop'
MediaProxy: parse filename from content-disposition for non-whitelisted types See merge request pleroma/pleroma!936
-rw-r--r--lib/pleroma/reverse_proxy.ex20
1 files changed, 19 insertions, 1 deletions
diff --git a/lib/pleroma/reverse_proxy.ex b/lib/pleroma/reverse_proxy.ex
index 6298b92f4..a3f177fec 100644
--- a/lib/pleroma/reverse_proxy.ex
+++ b/lib/pleroma/reverse_proxy.ex
@@ -311,7 +311,25 @@ defmodule Pleroma.ReverseProxy do
end
if attachment? do
- disposition = "attachment; filename=" <> Keyword.get(opts, :attachment_name, "attachment")
+ name =
+ try do
+ {{"content-disposition", content_disposition_string}, _} =
+ List.keytake(headers, "content-disposition", 0)
+
+ [name | _] =
+ Regex.run(
+ ~r/filename="((?:[^"\\]|\\.)*)"/u,
+ content_disposition_string || "",
+ capture: :all_but_first
+ )
+
+ name
+ rescue
+ MatchError -> Keyword.get(opts, :attachment_name, "attachment")
+ end
+
+ disposition = "attachment; filename=\"#{name}\""
+
List.keystore(headers, "content-disposition", 0, {"content-disposition", disposition})
else
headers