[#1026] Filter.AnonymizeFilename added ability to retain file extension with custom text
This commit is contained in:
parent
4a1c36e18f
commit
acd20f166b
5 changed files with 58 additions and 6 deletions
|
@ -9,6 +9,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
### Fixed
|
### Fixed
|
||||||
- Not being able to pin unlisted posts
|
- Not being able to pin unlisted posts
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Configuration: Filter.AnonymizeFilename added ability to retain file extension with custom text
|
||||||
|
|
||||||
## [1.0.0] - 2019-06-29
|
## [1.0.0] - 2019-06-29
|
||||||
### Security
|
### Security
|
||||||
- Mastodon API: Fix display names not being sanitized
|
- Mastodon API: Fix display names not being sanitized
|
||||||
|
|
|
@ -36,7 +36,7 @@ No specific configuration.
|
||||||
This filter replaces the filename (not the path) of an upload. For complete obfuscation, add
|
This filter replaces the filename (not the path) of an upload. For complete obfuscation, add
|
||||||
`Pleroma.Upload.Filter.Dedupe` before AnonymizeFilename.
|
`Pleroma.Upload.Filter.Dedupe` before AnonymizeFilename.
|
||||||
|
|
||||||
* `text`: Text to replace filenames in links. If empty, `{random}.extension` will be used.
|
* `text`: Text to replace filenames in links. If empty, `{random}.extension` will be used. You can get the original filename extension by using `{extension}`, for example `custom-file-name.{extension}`.
|
||||||
|
|
||||||
## Pleroma.Emails.Mailer
|
## Pleroma.Emails.Mailer
|
||||||
* `adapter`: one of the mail adapters listed in [Swoosh readme](https://github.com/swoosh/swoosh#adapters), or `Swoosh.Adapters.Local` for in-memory mailbox.
|
* `adapter`: one of the mail adapters listed in [Swoosh readme](https://github.com/swoosh/swoosh#adapters), or `Swoosh.Adapters.Local` for in-memory mailbox.
|
||||||
|
|
|
@ -38,7 +38,7 @@ def put([key], value), do: put(key, value)
|
||||||
|
|
||||||
def put([parent_key | keys], value) do
|
def put([parent_key | keys], value) do
|
||||||
parent =
|
parent =
|
||||||
Application.get_env(:pleroma, parent_key)
|
Application.get_env(:pleroma, parent_key, [])
|
||||||
|> put_in(keys, value)
|
|> put_in(keys, value)
|
||||||
|
|
||||||
Application.put_env(:pleroma, parent_key, parent)
|
Application.put_env(:pleroma, parent_key, parent)
|
||||||
|
|
|
@ -10,10 +10,19 @@ defmodule Pleroma.Upload.Filter.AnonymizeFilename do
|
||||||
"""
|
"""
|
||||||
@behaviour Pleroma.Upload.Filter
|
@behaviour Pleroma.Upload.Filter
|
||||||
|
|
||||||
def filter(upload) do
|
alias Pleroma.Config
|
||||||
extension = List.last(String.split(upload.name, "."))
|
alias Pleroma.Upload
|
||||||
name = Pleroma.Config.get([__MODULE__, :text], random(extension))
|
|
||||||
{:ok, %Pleroma.Upload{upload | name: name}}
|
def filter(%Upload{name: name} = upload) do
|
||||||
|
extension = List.last(String.split(name, "."))
|
||||||
|
name = predefined_name(extension) || random(extension)
|
||||||
|
{:ok, %Upload{upload | name: name}}
|
||||||
|
end
|
||||||
|
|
||||||
|
@spec predefined_name(String.t()) :: String.t() | nil
|
||||||
|
defp predefined_name(extension) do
|
||||||
|
with name when not is_nil(name) <- Config.get([__MODULE__, :text]),
|
||||||
|
do: String.replace(name, "{extension}", extension)
|
||||||
end
|
end
|
||||||
|
|
||||||
defp random(extension) do
|
defp random(extension) do
|
||||||
|
|
40
test/upload/filter/anonymize_filename_test.exs
Normal file
40
test/upload/filter/anonymize_filename_test.exs
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
defmodule Pleroma.Upload.Filter.AnonymizeFilenameTest do
|
||||||
|
use Pleroma.DataCase
|
||||||
|
|
||||||
|
alias Pleroma.Config
|
||||||
|
alias Pleroma.Upload
|
||||||
|
|
||||||
|
setup do
|
||||||
|
custom_filename = Config.get([Upload.Filter.AnonymizeFilename, :text])
|
||||||
|
|
||||||
|
on_exit(fn ->
|
||||||
|
Config.put([Upload.Filter.AnonymizeFilename, :text], custom_filename)
|
||||||
|
end)
|
||||||
|
|
||||||
|
upload_file = %Upload{
|
||||||
|
name: "an… image.jpg",
|
||||||
|
content_type: "image/jpg",
|
||||||
|
path: Path.absname("test/fixtures/image_tmp.jpg")
|
||||||
|
}
|
||||||
|
|
||||||
|
%{upload_file: upload_file}
|
||||||
|
end
|
||||||
|
|
||||||
|
test "it replaces filename on pre-defined text", %{upload_file: upload_file} do
|
||||||
|
Config.put([Upload.Filter.AnonymizeFilename, :text], "custom-file.png")
|
||||||
|
{:ok, %Upload{name: name}} = Upload.Filter.AnonymizeFilename.filter(upload_file)
|
||||||
|
assert name == "custom-file.png"
|
||||||
|
end
|
||||||
|
|
||||||
|
test "it replaces filename on pre-defined text expression", %{upload_file: upload_file} do
|
||||||
|
Config.put([Upload.Filter.AnonymizeFilename, :text], "custom-file.{extension}")
|
||||||
|
{:ok, %Upload{name: name}} = Upload.Filter.AnonymizeFilename.filter(upload_file)
|
||||||
|
assert name == "custom-file.jpg"
|
||||||
|
end
|
||||||
|
|
||||||
|
test "it replaces filename on random text", %{upload_file: upload_file} do
|
||||||
|
{:ok, %Upload{name: name}} = Upload.Filter.AnonymizeFilename.filter(upload_file)
|
||||||
|
assert <<_::bytes-size(14)>> <> ".jpg" = name
|
||||||
|
refute name == "an… image.jpg"
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue