aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrinpatch <rinpatch@sdf.org>2019-03-14 22:02:48 +0300
committerrinpatch <rinpatch@sdf.org>2019-03-14 22:02:48 +0300
commite2fe796c63f9df18d30810ad9daa1e7027da120f (patch)
tree442579a03ba1b4d034c80113babbd13f20ba69ac
parentfaf238c1b0b4d814ce3b2e041ed6b18b498233bf (diff)
downloadpleroma-e2fe796c63f9df18d30810ad9daa1e7027da120f.tar.gz
Add some tests
-rw-r--r--config/config.exs1
-rw-r--r--config/test.exs2
-rw-r--r--docs/config.md1
-rw-r--r--lib/pleroma/plugs/uploaded_media.ex2
-rw-r--r--lib/pleroma/upload.ex14
-rw-r--r--test/plugs/uploaded_media_plug_test.exs40
-rw-r--r--test/upload_test.exs6
7 files changed, 58 insertions, 8 deletions
diff --git a/config/config.exs b/config/config.exs
index cd4c8e562..f889e3259 100644
--- a/config/config.exs
+++ b/config/config.exs
@@ -35,6 +35,7 @@ config :pleroma, Pleroma.Captcha.Kocaptcha, endpoint: "https://captcha.kotobank.
config :pleroma, Pleroma.Upload,
uploader: Pleroma.Uploaders.Local,
filters: [],
+ link_name: true,
proxy_remote: false,
proxy_opts: [
redirect_on_failure: false,
diff --git a/config/test.exs b/config/test.exs
index 6dfa698c8..a3f36c9e1 100644
--- a/config/test.exs
+++ b/config/test.exs
@@ -17,6 +17,8 @@ config :pleroma, Pleroma.Captcha,
# Print only warnings and errors during test
config :logger, level: :warn
+config :pleroma, Pleroma.Upload, link_name: false
+
config :pleroma, Pleroma.Uploaders.Local, uploads: "test/uploads"
config :pleroma, Pleroma.Mailer, adapter: Swoosh.Adapters.Test
diff --git a/docs/config.md b/docs/config.md
index a09ea95f3..e34ffe980 100644
--- a/docs/config.md
+++ b/docs/config.md
@@ -6,6 +6,7 @@ If you run Pleroma with ``MIX_ENV=prod`` the file is ``prod.secret.exs``, otherw
## Pleroma.Upload
* `uploader`: Select which `Pleroma.Uploaders` to use
* `filters`: List of `Pleroma.Upload.Filter` to use.
+* `link_name`: When enabled Pleroma will add a `name` parameter to the url of the upload, for example `https://instance.tld/media/corndog.png?name=corndog.png`. This is needed to provide the correct filename in Content-Disposition headers when using filters like `Pleroma.Upload.Filter.Dedupe`
* `base_url`: The base URL to access a user-uploaded file. Useful when you want to proxy the media files via another host.
* `proxy_remote`: If you\'re using a remote uploader, Pleroma will proxy media requests instead of redirecting to it.
* `proxy_opts`: Proxy options, see `Pleroma.ReverseProxy` documentation.
diff --git a/lib/pleroma/plugs/uploaded_media.ex b/lib/pleroma/plugs/uploaded_media.ex
index bc913f408..fd77b8d8f 100644
--- a/lib/pleroma/plugs/uploaded_media.ex
+++ b/lib/pleroma/plugs/uploaded_media.ex
@@ -30,7 +30,7 @@ defmodule Pleroma.Plugs.UploadedMedia do
name = String.replace(name, "\"", "\\\"")
conn
- |> put_resp_header("Content-Disposition", "filename=\"#{name}\"")
+ |> put_resp_header("content-disposition", "filename=\"#{name}\"")
conn ->
conn
diff --git a/lib/pleroma/upload.ex b/lib/pleroma/upload.ex
index ae461d434..f72334930 100644
--- a/lib/pleroma/upload.ex
+++ b/lib/pleroma/upload.ex
@@ -70,7 +70,7 @@ defmodule Pleroma.Upload do
%{
"type" => "Link",
"mediaType" => upload.content_type,
- "href" => url_from_spec(opts.base_url, url_spec, upload.name)
+ "href" => url_from_spec(upload, opts.base_url, url_spec)
}
],
"name" => Map.get(opts, :description) || upload.name
@@ -219,12 +219,18 @@ defmodule Pleroma.Upload do
tmp_path
end
- defp url_from_spec(base_url, {:file, path}, name) do
- path = URI.encode(path, &char_unescaped?/1) <> "?name=#{URI.encode(name, &char_unescaped?/1)}"
+ defp url_from_spec(%__MODULE__{name: name}, base_url, {:file, path}) do
+ path =
+ URI.encode(path, &char_unescaped?/1) <>
+ if Pleroma.Config.get([__MODULE__, :link_name], false) do
+ "?name=#{URI.encode(name, &char_unescaped?/1)}"
+ else
+ ""
+ end
[base_url, "media", path]
|> Path.join()
end
- defp url_from_spec(_base_url, {:url, url}, _name), do: url
+ defp url_from_spec(_upload, _base_url, {:url, url}), do: url
end
diff --git a/test/plugs/uploaded_media_plug_test.exs b/test/plugs/uploaded_media_plug_test.exs
new file mode 100644
index 000000000..414cf9186
--- /dev/null
+++ b/test/plugs/uploaded_media_plug_test.exs
@@ -0,0 +1,40 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2018 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Web.UploadedMediaPlugTest do
+ use Pleroma.Web.ConnCase
+ alias Pleroma.Upload
+
+ setup_all do
+ File.cp!("test/fixtures/image.jpg", "test/fixtures/image_tmp.jpg")
+
+ file = %Plug.Upload{
+ content_type: "image/jpg",
+ path: Path.absname("test/fixtures/image_tmp.jpg"),
+ filename: "nice_tf.jpg"
+ }
+
+ {:ok, data} = Upload.store(file)
+ [%{"href" => attachment_url} | _] = data["url"]
+ [attachment_url: attachment_url]
+ end
+
+ test "does not send Content-Disposition header when name param is not set", %{
+ attachment_url: attachment_url
+ } do
+ conn = get(build_conn(), attachment_url)
+ refute Enum.any?(conn.resp_headers, &(elem(&1, 0) == "content-disposition"))
+ end
+
+ test "sends Content-Disposition header when name param is set", %{
+ attachment_url: attachment_url
+ } do
+ conn = get(build_conn(), attachment_url <> "?name=\"cofe\".gif")
+
+ assert Enum.any?(
+ conn.resp_headers,
+ &(&1 == {"content-disposition", "filename=\"\\\"cofe\\\".gif\""})
+ )
+ end
+end
diff --git a/test/upload_test.exs b/test/upload_test.exs
index c38280d4c..770226478 100644
--- a/test/upload_test.exs
+++ b/test/upload_test.exs
@@ -56,7 +56,7 @@ defmodule Pleroma.UploadTest do
assert List.first(data["url"])["href"] ==
Pleroma.Web.base_url() <>
- "/media/e7a6d0cf595bff76f14c9a98b6c199539559e8b844e02e51e5efcfd1f614a2df.jpg?name=an%20%5Bimage.jpg"
+ "/media/e7a6d0cf595bff76f14c9a98b6c199539559e8b844e02e51e5efcfd1f614a2df.jpg"
end
test "copies the file to the configured folder without deduping" do
@@ -151,7 +151,7 @@ defmodule Pleroma.UploadTest do
[attachment_url | _] = data["url"]
assert Path.basename(attachment_url["href"]) ==
- "an%E2%80%A6%20image.jpg?name=an%E2%80%A6%20image.jpg"
+ "an%E2%80%A6%20image.jpg"
end
test "escapes reserved uri characters" do
@@ -167,7 +167,7 @@ defmodule Pleroma.UploadTest do
[attachment_url | _] = data["url"]
assert Path.basename(attachment_url["href"]) ==
- "%3A%3F%23%5B%5D%40%21%24%26%5C%27%28%29%2A%2B%2C%3B%3D.jpg?name=%3A%3F%23%5B%5D%40%21%24%26%5C%27%28%29%2A%2B%2C%3B%3D.jpg"
+ "%3A%3F%23%5B%5D%40%21%24%26%5C%27%28%29%2A%2B%2C%3B%3D.jpg"
end
end
end