diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/upload/filter.ex | 13 | ||||
| -rw-r--r-- | lib/pleroma/upload/filter/anonymize_filename.ex | 4 | ||||
| -rw-r--r-- | lib/pleroma/upload/filter/dedupe.ex | 4 | ||||
| -rw-r--r-- | lib/pleroma/upload/filter/exiftool.ex | 10 | ||||
| -rw-r--r-- | lib/pleroma/upload/filter/mogrifun.ex | 6 | ||||
| -rw-r--r-- | lib/pleroma/upload/filter/mogrify.ex | 6 | 
6 files changed, 28 insertions, 15 deletions
| diff --git a/lib/pleroma/upload/filter.ex b/lib/pleroma/upload/filter.ex index dbdadc97f..661135634 100644 --- a/lib/pleroma/upload/filter.ex +++ b/lib/pleroma/upload/filter.ex @@ -15,7 +15,11 @@ defmodule Pleroma.Upload.Filter do    require Logger -  @callback filter(Pleroma.Upload.t()) :: :ok | {:ok, Pleroma.Upload.t()} | {:error, any()} +  @callback filter(Pleroma.Upload.t()) :: +              {:ok, :filtered} +              | {:ok, :noop} +              | {:ok, :filtered, Pleroma.Upload.t()} +              | {:error, any()}    @spec filter([module()], Pleroma.Upload.t()) :: {:ok, Pleroma.Upload.t()} | {:error, any()} @@ -25,10 +29,13 @@ defmodule Pleroma.Upload.Filter do    def filter([filter | rest], upload) do      case filter.filter(upload) do -      :ok -> +      {:ok, :filtered} ->          filter(rest, upload) -      {:ok, upload} -> +      {:ok, :filtered, upload} -> +        filter(rest, upload) + +      {:ok, :noop} ->          filter(rest, upload)        error -> diff --git a/lib/pleroma/upload/filter/anonymize_filename.ex b/lib/pleroma/upload/filter/anonymize_filename.ex index 07ead8203..fc456e4f4 100644 --- a/lib/pleroma/upload/filter/anonymize_filename.ex +++ b/lib/pleroma/upload/filter/anonymize_filename.ex @@ -16,9 +16,11 @@ defmodule Pleroma.Upload.Filter.AnonymizeFilename do    def filter(%Upload{name: name} = upload) do      extension = List.last(String.split(name, "."))      name = predefined_name(extension) || random(extension) -    {:ok, %Upload{upload | name: name}} +    {:ok, :filtered, %Upload{upload | name: name}}    end +  def filter(_), do: {:ok, :noop} +    @spec predefined_name(String.t()) :: String.t() | nil    defp predefined_name(extension) do      with name when not is_nil(name) <- Config.get([__MODULE__, :text]), diff --git a/lib/pleroma/upload/filter/dedupe.ex b/lib/pleroma/upload/filter/dedupe.ex index 41218a918..86cbc8996 100644 --- a/lib/pleroma/upload/filter/dedupe.ex +++ b/lib/pleroma/upload/filter/dedupe.ex @@ -17,8 +17,8 @@ defmodule Pleroma.Upload.Filter.Dedupe do        |> Base.encode16(case: :lower)      filename = shasum <> "." <> extension -    {:ok, %Upload{upload | id: shasum, path: filename}} +    {:ok, :filtered, %Upload{upload | id: shasum, path: filename}}    end -  def filter(_), do: :ok +  def filter(_), do: {:ok, :noop}  end diff --git a/lib/pleroma/upload/filter/exiftool.ex b/lib/pleroma/upload/filter/exiftool.ex index ea8798fe3..1fd0cfdaa 100644 --- a/lib/pleroma/upload/filter/exiftool.ex +++ b/lib/pleroma/upload/filter/exiftool.ex @@ -9,11 +9,15 @@ defmodule Pleroma.Upload.Filter.Exiftool do    """    @behaviour Pleroma.Upload.Filter -  @spec filter(Pleroma.Upload.t()) :: :ok | {:error, String.t()} +  @spec filter(Pleroma.Upload.t()) :: {:ok, any()} | {:error, String.t()} + +  # webp is not compatible with exiftool at this time +  def filter(%Pleroma.Upload{content_type: "image/webp"}), do: {:ok, :noop} +    def filter(%Pleroma.Upload{tempfile: file, content_type: "image" <> _}) do      try do        case System.cmd("exiftool", ["-overwrite_original", "-gps:all=", file], parallelism: true) do -        {_response, 0} -> :ok +        {_response, 0} -> {:ok, :filtered}          {error, 1} -> {:error, error}        end      rescue @@ -22,5 +26,5 @@ defmodule Pleroma.Upload.Filter.Exiftool do      end    end -  def filter(_), do: :ok +  def filter(_), do: {:ok, :noop}  end diff --git a/lib/pleroma/upload/filter/mogrifun.ex b/lib/pleroma/upload/filter/mogrifun.ex index c8fa7b190..363e5cf0f 100644 --- a/lib/pleroma/upload/filter/mogrifun.ex +++ b/lib/pleroma/upload/filter/mogrifun.ex @@ -38,16 +38,16 @@ defmodule Pleroma.Upload.Filter.Mogrifun do      [{"fill", "yellow"}, {"tint", "40"}]    ] -  @spec filter(Pleroma.Upload.t()) :: :ok | {:error, String.t()} +  @spec filter(Pleroma.Upload.t()) :: {:ok, atom()} | {:error, String.t()}    def filter(%Pleroma.Upload{tempfile: file, content_type: "image" <> _}) do      try do        Filter.Mogrify.do_filter(file, [Enum.random(@filters)]) -      :ok +      {:ok, :filtered}      rescue        _e in ErlangError ->          {:error, "mogrify command not found"}      end    end -  def filter(_), do: :ok +  def filter(_), do: {:ok, :noop}  end diff --git a/lib/pleroma/upload/filter/mogrify.ex b/lib/pleroma/upload/filter/mogrify.ex index 7a45add5a..71968fd9c 100644 --- a/lib/pleroma/upload/filter/mogrify.ex +++ b/lib/pleroma/upload/filter/mogrify.ex @@ -8,18 +8,18 @@ defmodule Pleroma.Upload.Filter.Mogrify do    @type conversion :: action :: String.t() | {action :: String.t(), opts :: String.t()}    @type conversions :: conversion() | [conversion()] -  @spec filter(Pleroma.Upload.t()) :: :ok | {:error, String.t()} +  @spec filter(Pleroma.Upload.t()) :: {:ok, :atom} | {:error, String.t()}    def filter(%Pleroma.Upload{tempfile: file, content_type: "image" <> _}) do      try do        do_filter(file, Pleroma.Config.get!([__MODULE__, :args])) -      :ok +      {:ok, :filtered}      rescue        _e in ErlangError ->          {:error, "mogrify command not found"}      end    end -  def filter(_), do: :ok +  def filter(_), do: {:ok, :noop}    def do_filter(file, filters) do      file | 
