diff options
| -rw-r--r-- | lib/pleroma/application.ex | 18 | ||||
| -rw-r--r-- | lib/pleroma/upload/filter/exiftool.ex | 14 | ||||
| -rw-r--r-- | lib/pleroma/upload/filter/mogrifun.ex | 8 | ||||
| -rw-r--r-- | lib/pleroma/upload/filter/mogrify.ex | 12 | 
4 files changed, 38 insertions, 14 deletions
| diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex index 0ffb55358..c0b5db9f1 100644 --- a/lib/pleroma/application.ex +++ b/lib/pleroma/application.ex @@ -47,6 +47,7 @@ defmodule Pleroma.Application do      Pleroma.ApplicationRequirements.verify!()      setup_instrumenters()      load_custom_modules() +    check_system_commands()      Pleroma.Docs.JSON.compile()      adapter = Application.get_env(:tesla, :adapter) @@ -249,4 +250,21 @@ defmodule Pleroma.Application do    end    defp http_children(_, _), do: [] + +  defp check_system_commands do +    filters = Config.get([Pleroma.Upload, :filters]) + +    check_filter = fn filter, command_required -> +      with true <- filter in filters, +           false <- Pleroma.Utils.command_available?(command_required) do +        Logger.error( +          "#{filter} is specified in list of Pleroma.Upload filters, but the #{command_required} command is not found" +        ) +      end +    end + +    check_filter.(Pleroma.Upload.Filters.Exiftool, "exiftool") +    check_filter.(Pleroma.Upload.Filters.Mogrify, "mogrify") +    check_filter.(Pleroma.Upload.Filters.Mogrifun, "mogrify") +  end  end diff --git a/lib/pleroma/upload/filter/exiftool.ex b/lib/pleroma/upload/filter/exiftool.ex index e1b976c98..ea8798fe3 100644 --- a/lib/pleroma/upload/filter/exiftool.ex +++ b/lib/pleroma/upload/filter/exiftool.ex @@ -9,12 +9,16 @@ defmodule Pleroma.Upload.Filter.Exiftool do    """    @behaviour Pleroma.Upload.Filter +  @spec filter(Pleroma.Upload.t()) :: :ok | {:error, String.t()}    def filter(%Pleroma.Upload{tempfile: file, content_type: "image" <> _}) do -    if Pleroma.Utils.command_available?("exiftool") do -      System.cmd("exiftool", ["-overwrite_original", "-gps:all=", file], parallelism: true) -      :ok -    else -      {:error, "exiftool command not found"} +    try do +      case System.cmd("exiftool", ["-overwrite_original", "-gps:all=", file], parallelism: true) do +        {_response, 0} -> :ok +        {error, 1} -> {:error, error} +      end +    rescue +      _e in ErlangError -> +        {:error, "exiftool command not found"}      end    end diff --git a/lib/pleroma/upload/filter/mogrifun.ex b/lib/pleroma/upload/filter/mogrifun.ex index 8f362333d..a8503ac24 100644 --- a/lib/pleroma/upload/filter/mogrifun.ex +++ b/lib/pleroma/upload/filter/mogrifun.ex @@ -34,12 +34,14 @@ defmodule Pleroma.Upload.Filter.Mogrifun do      [{"fill", "yellow"}, {"tint", "40"}]    ] +  @spec filter(Pleroma.Upload.t()) :: :ok | {:error, String.t()}    def filter(%Pleroma.Upload{tempfile: file, content_type: "image" <> _}) do -    if Pleroma.Utils.command_available?("mogrify") do +    try do        Filter.Mogrify.do_filter(file, [Enum.random(@filters)])        :ok -    else -      {:error, "mogrify command not found"} +    rescue +      _e in ErlangError -> +        {:error, "mogrify command not found"}      end    end diff --git a/lib/pleroma/upload/filter/mogrify.ex b/lib/pleroma/upload/filter/mogrify.ex index 4bd0c2eb4..7a45add5a 100644 --- a/lib/pleroma/upload/filter/mogrify.ex +++ b/lib/pleroma/upload/filter/mogrify.ex @@ -8,14 +8,14 @@ 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()}    def filter(%Pleroma.Upload{tempfile: file, content_type: "image" <> _}) do -    if Pleroma.Utils.command_available?("mogrify") do -      filters = Pleroma.Config.get!([__MODULE__, :args]) - -      do_filter(file, filters) +    try do +      do_filter(file, Pleroma.Config.get!([__MODULE__, :args]))        :ok -    else -      {:error, "mogrify command not found"} +    rescue +      _e in ErlangError -> +        {:error, "mogrify command not found"}      end    end | 
