Просмотр исходного кода

Merge branch 'issues/1026' into 'develop'

[#1026] Filter.AnonymizeFilename added ability to retain file extension with custom text

Closes #1026

See merge request pleroma/pleroma!1363
tags/v1.1.4
rinpatch 5 лет назад
Родитель
Сommit
e5df6487c8
5 измененных файлов: 58 добавлений и 6 удалений
  1. +3
    -0
      CHANGELOG.md
  2. +1
    -1
      docs/config.md
  3. +1
    -1
      lib/pleroma/config.ex
  4. +13
    -4
      lib/pleroma/upload/filter/anonymize_filename.ex
  5. +40
    -0
      test/upload/filter/anonymize_filename_test.exs

+ 3
- 0
CHANGELOG.md Просмотреть файл

@@ -9,6 +9,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
### Fixed
- 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
### Security
- Mastodon API: Fix display names not being sanitized


+ 1
- 1
docs/config.md Просмотреть файл

@@ -36,7 +36,7 @@ No specific configuration.
This filter replaces the filename (not the path) of an upload. For complete obfuscation, add
`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
* `adapter`: one of the mail adapters listed in [Swoosh readme](https://github.com/swoosh/swoosh#adapters), or `Swoosh.Adapters.Local` for in-memory mailbox.


+ 1
- 1
lib/pleroma/config.ex Просмотреть файл

@@ -38,7 +38,7 @@ defmodule Pleroma.Config do

def put([parent_key | keys], value) do
parent =
Application.get_env(:pleroma, parent_key)
Application.get_env(:pleroma, parent_key, [])
|> put_in(keys, value)

Application.put_env(:pleroma, parent_key, parent)


+ 13
- 4
lib/pleroma/upload/filter/anonymize_filename.ex Просмотреть файл

@@ -10,10 +10,19 @@ defmodule Pleroma.Upload.Filter.AnonymizeFilename do
"""
@behaviour Pleroma.Upload.Filter

def filter(upload) do
extension = List.last(String.split(upload.name, "."))
name = Pleroma.Config.get([__MODULE__, :text], random(extension))
{:ok, %Pleroma.Upload{upload | name: name}}
alias Pleroma.Config
alias Pleroma.Upload

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

defp random(extension) do


+ 40
- 0
test/upload/filter/anonymize_filename_test.exs Просмотреть файл

@@ -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

Загрузка…
Отмена
Сохранить