diff options
author | kaniini <nenolod@gmail.com> | 2019-03-15 20:06:08 +0000 |
---|---|---|
committer | kaniini <nenolod@gmail.com> | 2019-03-15 20:06:08 +0000 |
commit | 4b3c86c1a61a029202a262229c713cc3737b2a1b (patch) | |
tree | e95fdbd7f6fb5b7fa0e242aa52bdf213d24e2853 | |
parent | 8b352af4dd4f79432e3e9c48593380292e4002d7 (diff) | |
parent | d02f1120f9fe8e048bac6665e95e51648a50c53b (diff) | |
download | pleroma-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.ex | 20 |
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 |