aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrinpatch <rinpatch@sdf.org>2019-03-15 01:36:29 +0300
committerrinpatch <rinpatch@sdf.org>2019-03-15 01:36:29 +0300
commit958227d5563d76f4f983b7cabb6948897d93bd4b (patch)
tree00e9fca96e59b6a37a0b0deb9c571e22144eb469
parent7ecc201029a8c90cf5dc3313ff78d56eb0a2445c (diff)
downloadpleroma-958227d5563d76f4f983b7cabb6948897d93bd4b.tar.gz
MediaProxy: parse filename from content-disposition for non-whitelisted types
-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..39ede8619 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