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