d1384ddad23287d0ad91e66d8283df4ca6ac4d02
[akkoma] / lib / pleroma / upload / filter.ex
1 defmodule Pleroma.Upload.Filter do
2 @moduledoc """
3 Upload Filter behaviour
4
5 This behaviour allows to run filtering actions just before a file is uploaded. This allows to:
6
7 * morph in place the temporary file
8 * change any field of a `Pleroma.Upload` struct
9 * cancel/stop the upload
10 """
11
12 require Logger
13
14 @callback filter(Pleroma.Upload.t()) :: :ok | {:ok, Pleroma.Upload.t()} | {:error, any()}
15
16 @spec filter([module()], Pleroma.Upload.t()) :: {:ok, Pleroma.Upload.t()} | {:error, any()}
17
18 def filter([], upload) do
19 {:ok, upload}
20 end
21
22 def filter([filter | rest], upload) do
23 case filter.filter(upload) do
24 :ok ->
25 filter(rest, upload)
26
27 {:ok, upload} ->
28 filter(rest, upload)
29
30 error ->
31 Logger.error("#{__MODULE__}: Filter #{filter} failed: #{inspect(error)}")
32 error
33 end
34 end
35 end