Add OnlyMedia Upload Filter to simplify restricting uploads to audio, image, and video types
This commit is contained in:
parent
31ec5cd35e
commit
9caa0b0be1
1
changelog.d/3897.add
Normal file
1
changelog.d/3897.add
Normal file
@ -0,0 +1 @@
|
|||||||
|
OnlyMedia Upload Filter
|
@ -671,6 +671,12 @@ This filter reads the ImageDescription and iptc:Caption-Abstract fields with Exi
|
|||||||
|
|
||||||
No specific configuration.
|
No specific configuration.
|
||||||
|
|
||||||
|
#### Pleroma.Upload.Filter.OnlyMedia
|
||||||
|
|
||||||
|
This filter rejects uploads that are not identified with Content-Type matching audio/*, image/*, or video/*
|
||||||
|
|
||||||
|
No specific configuration.
|
||||||
|
|
||||||
#### Pleroma.Upload.Filter.Mogrify
|
#### Pleroma.Upload.Filter.Mogrify
|
||||||
|
|
||||||
* `args`: List of actions for the `mogrify` command like `"strip"` or `["strip", "auto-orient", {"implode", "1"}]`.
|
* `args`: List of actions for the `mogrify` command like `"strip"` or `["strip", "auto-orient", {"implode", "1"}]`.
|
||||||
|
@ -38,9 +38,9 @@ defmodule Pleroma.Upload.Filter do
|
|||||||
{:ok, :noop} ->
|
{:ok, :noop} ->
|
||||||
filter(rest, upload)
|
filter(rest, upload)
|
||||||
|
|
||||||
error ->
|
{:error, e} ->
|
||||||
Logger.error("#{__MODULE__}: Filter #{filter} failed: #{inspect(error)}")
|
Logger.error("#{__MODULE__}: Filter #{filter} failed: #{inspect(e)}")
|
||||||
error
|
{:error, e}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
20
lib/pleroma/upload/filter/only_media.ex
Normal file
20
lib/pleroma/upload/filter/only_media.ex
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2023 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
defmodule Pleroma.Upload.Filter.OnlyMedia do
|
||||||
|
@behaviour Pleroma.Upload.Filter
|
||||||
|
alias Pleroma.Upload
|
||||||
|
|
||||||
|
def filter(%Upload{content_type: content_type}) do
|
||||||
|
[type, _subtype] = String.split(content_type, "/")
|
||||||
|
|
||||||
|
if type in ["image", "video", "audio"] do
|
||||||
|
{:ok, :noop}
|
||||||
|
else
|
||||||
|
{:error, "Disallowed content-type: #{content_type}"}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def filter(_), do: {:ok, :noop}
|
||||||
|
end
|
32
test/pleroma/upload/filter/only_media_test.exs
Normal file
32
test/pleroma/upload/filter/only_media_test.exs
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2023 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
defmodule Pleroma.Upload.Filter.OnlyMediaTest do
|
||||||
|
use Pleroma.DataCase, async: true
|
||||||
|
|
||||||
|
alias Pleroma.Upload
|
||||||
|
alias Pleroma.Upload.Filter.OnlyMedia
|
||||||
|
|
||||||
|
test "Allows media Content-Type" do
|
||||||
|
["audio/mpeg", "image/jpeg", "video/mp4"]
|
||||||
|
|> Enum.each(fn type ->
|
||||||
|
upload = %Upload{
|
||||||
|
content_type: type
|
||||||
|
}
|
||||||
|
|
||||||
|
assert {:ok, :noop} = OnlyMedia.filter(upload)
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "Disallows non-media Content-Type" do
|
||||||
|
["application/javascript", "application/pdf", "text/html"]
|
||||||
|
|> Enum.each(fn type ->
|
||||||
|
upload = %Upload{
|
||||||
|
content_type: type
|
||||||
|
}
|
||||||
|
|
||||||
|
assert {:error, _} = OnlyMedia.filter(upload)
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue
Block a user