Merge branch 'fix/escape-reserved-chars-in-filenames' into 'develop'
Properly escape reserved URI charachters in upload urls Closes #700 See merge request pleroma/pleroma!905
This commit is contained in:
commit
96901b6554
|
@ -85,6 +85,10 @@ def store(upload, opts \\ []) do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def char_unescaped?(char) do
|
||||||
|
URI.char_unreserved?(char) or char == ?/
|
||||||
|
end
|
||||||
|
|
||||||
defp get_opts(opts) do
|
defp get_opts(opts) do
|
||||||
{size_limit, activity_type} =
|
{size_limit, activity_type} =
|
||||||
case Keyword.get(opts, :type) do
|
case Keyword.get(opts, :type) do
|
||||||
|
@ -218,9 +222,7 @@ defp tempfile_for_image(data) do
|
||||||
defp url_from_spec(base_url, {:file, path}) do
|
defp url_from_spec(base_url, {:file, path}) do
|
||||||
path =
|
path =
|
||||||
path
|
path
|
||||||
|> URI.encode()
|
|> URI.encode(&char_unescaped?/1)
|
||||||
|> String.replace("?", "%3F")
|
|
||||||
|> String.replace(":", "%3A")
|
|
||||||
|
|
||||||
[base_url, "media", path]
|
[base_url, "media", path]
|
||||||
|> Path.join()
|
|> Path.join()
|
||||||
|
|
|
@ -153,19 +153,20 @@ test "escapes invalid characters in url" do
|
||||||
assert Path.basename(attachment_url["href"]) == "an%E2%80%A6%20image.jpg"
|
assert Path.basename(attachment_url["href"]) == "an%E2%80%A6%20image.jpg"
|
||||||
end
|
end
|
||||||
|
|
||||||
test "replaces : (colon) and ? (question-mark) to %3A and %3F (respectively)" do
|
test "escapes reserved uri characters" do
|
||||||
File.cp!("test/fixtures/image.jpg", "test/fixtures/image_tmp.jpg")
|
File.cp!("test/fixtures/image.jpg", "test/fixtures/image_tmp.jpg")
|
||||||
|
|
||||||
file = %Plug.Upload{
|
file = %Plug.Upload{
|
||||||
content_type: "image/jpg",
|
content_type: "image/jpg",
|
||||||
path: Path.absname("test/fixtures/image_tmp.jpg"),
|
path: Path.absname("test/fixtures/image_tmp.jpg"),
|
||||||
filename: "is:an?image.jpg"
|
filename: ":?#[]@!$&\\'()*+,;=.jpg"
|
||||||
}
|
}
|
||||||
|
|
||||||
{:ok, data} = Upload.store(file)
|
{:ok, data} = Upload.store(file)
|
||||||
[attachment_url | _] = data["url"]
|
[attachment_url | _] = data["url"]
|
||||||
|
|
||||||
assert Path.basename(attachment_url["href"]) == "is%3Aan%3Fimage.jpg"
|
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"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue