Upload filter: anonymize filename
It replaces the original filename with a randomly generated string.
This commit is contained in:
parent
ca24ad2a2b
commit
e9982c521b
10
lib/pleroma/upload/filter/anonymize_filename.ex
Normal file
10
lib/pleroma/upload/filter/anonymize_filename.ex
Normal 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
|
|
@ -134,5 +134,19 @@ test "don't modify filename of an unknown type" 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
|
||||||
|
|
Loading…
Reference in a new issue