diff options
| -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  | 
