Skip to content
Snippets Groups Projects
Commit e2fe796c authored by rinpatch's avatar rinpatch
Browse files

Add some tests

parent faf238c1
No related branches found
No related tags found
No related merge requests found
...@@ -35,6 +35,7 @@ config :pleroma, Pleroma.Captcha.Kocaptcha, endpoint: "https://captcha.kotobank. ...@@ -35,6 +35,7 @@ config :pleroma, Pleroma.Captcha.Kocaptcha, endpoint: "https://captcha.kotobank.
config :pleroma, Pleroma.Upload, config :pleroma, Pleroma.Upload,
uploader: Pleroma.Uploaders.Local, uploader: Pleroma.Uploaders.Local,
filters: [], filters: [],
link_name: true,
proxy_remote: false, proxy_remote: false,
proxy_opts: [ proxy_opts: [
redirect_on_failure: false, redirect_on_failure: false,
......
...@@ -17,6 +17,8 @@ config :pleroma, Pleroma.Captcha, ...@@ -17,6 +17,8 @@ config :pleroma, Pleroma.Captcha,
# Print only warnings and errors during test # Print only warnings and errors during test
config :logger, level: :warn config :logger, level: :warn
config :pleroma, Pleroma.Upload, link_name: false
config :pleroma, Pleroma.Uploaders.Local, uploads: "test/uploads" config :pleroma, Pleroma.Uploaders.Local, uploads: "test/uploads"
config :pleroma, Pleroma.Mailer, adapter: Swoosh.Adapters.Test config :pleroma, Pleroma.Mailer, adapter: Swoosh.Adapters.Test
......
...@@ -6,6 +6,7 @@ If you run Pleroma with ``MIX_ENV=prod`` the file is ``prod.secret.exs``, otherw ...@@ -6,6 +6,7 @@ If you run Pleroma with ``MIX_ENV=prod`` the file is ``prod.secret.exs``, otherw
## Pleroma.Upload ## Pleroma.Upload
* `uploader`: Select which `Pleroma.Uploaders` to use * `uploader`: Select which `Pleroma.Uploaders` to use
* `filters`: List of `Pleroma.Upload.Filter` 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. * `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_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. * `proxy_opts`: Proxy options, see `Pleroma.ReverseProxy` documentation.
......
...@@ -30,7 +30,7 @@ defmodule Pleroma.Plugs.UploadedMedia do ...@@ -30,7 +30,7 @@ defmodule Pleroma.Plugs.UploadedMedia do
name = String.replace(name, "\"", "\\\"") name = String.replace(name, "\"", "\\\"")
conn conn
|> put_resp_header("Content-Disposition", "filename=\"#{name}\"") |> put_resp_header("content-disposition", "filename=\"#{name}\"")
conn -> conn ->
conn conn
......
...@@ -70,7 +70,7 @@ defmodule Pleroma.Upload do ...@@ -70,7 +70,7 @@ defmodule Pleroma.Upload do
%{ %{
"type" => "Link", "type" => "Link",
"mediaType" => upload.content_type, "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 "name" => Map.get(opts, :description) || upload.name
...@@ -219,12 +219,18 @@ defmodule Pleroma.Upload do ...@@ -219,12 +219,18 @@ defmodule Pleroma.Upload do
tmp_path tmp_path
end end
defp url_from_spec(base_url, {:file, path}, name) do defp url_from_spec(%__MODULE__{name: name}, base_url, {:file, path}) do
path = URI.encode(path, &char_unescaped?/1) <> "?name=#{URI.encode(name, &char_unescaped?/1)}" 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] [base_url, "media", path]
|> Path.join() |> Path.join()
end end
defp url_from_spec(_base_url, {:url, url}, _name), do: url defp url_from_spec(_upload, _base_url, {:url, url}), do: url
end end
# 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
...@@ -56,7 +56,7 @@ defmodule Pleroma.UploadTest do ...@@ -56,7 +56,7 @@ defmodule Pleroma.UploadTest do
assert List.first(data["url"])["href"] == assert List.first(data["url"])["href"] ==
Pleroma.Web.base_url() <> Pleroma.Web.base_url() <>
"/media/e7a6d0cf595bff76f14c9a98b6c199539559e8b844e02e51e5efcfd1f614a2df.jpg?name=an%20%5Bimage.jpg" "/media/e7a6d0cf595bff76f14c9a98b6c199539559e8b844e02e51e5efcfd1f614a2df.jpg"
end end
test "copies the file to the configured folder without deduping" do test "copies the file to the configured folder without deduping" do
...@@ -151,7 +151,7 @@ defmodule Pleroma.UploadTest do ...@@ -151,7 +151,7 @@ defmodule Pleroma.UploadTest do
[attachment_url | _] = data["url"] [attachment_url | _] = data["url"]
assert Path.basename(attachment_url["href"]) == 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 end
test "escapes reserved uri characters" do test "escapes reserved uri characters" do
...@@ -167,7 +167,7 @@ defmodule Pleroma.UploadTest do ...@@ -167,7 +167,7 @@ defmodule Pleroma.UploadTest do
[attachment_url | _] = data["url"] [attachment_url | _] = data["url"]
assert Path.basename(attachment_url["href"]) == 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 end
end end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment