Upload filter: anonymize filename

It replaces the original filename with a randomly generated string.
This commit is contained in:
href 2018-11-30 19:33:34 +01:00
parent ca24ad2a2b
commit e9982c521b
No known key found for this signature in database
GPG Key ID: EE8296C1A152C325
2 changed files with 24 additions and 0 deletions

View File

@ -0,0 +1,10 @@
defmodule Pleroma.Upload.Filter.AnonymizeFilename do
@moduledoc "Replaces the original filename with a randomly generated string."
@behaviour Pleroma.Upload.Filter
def filter(upload) do
extension = List.last(String.split(upload.name, "."))
string = Base.url_encode64(:crypto.strong_rand_bytes(10), padding: false)
{:ok, %Pleroma.Upload{upload | name: string <> "." <> extension}}
end
end

View File

@ -134,5 +134,19 @@ defmodule Pleroma.UploadTest do
{:ok, data} = Upload.store(file) {:ok, data} = Upload.store(file)
assert data["name"] == "test.txt" assert data["name"] == "test.txt"
end end
test "copies the file to the configured folder with anonymizing filename" 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: "an [image.jpg"
}
{:ok, data} = Upload.store(file, filters: [Pleroma.Upload.Filter.AnonymizeFilename])
refute data["name"] == "an [image.jpg"
end
end end
end end