Merge pull request 'Add ability to obfuscate domains in MRF transparency' (#185)...
[akkoma] / lib / pleroma / upload / filter.ex
index d1384ddad23287d0ad91e66d8283df4ca6ac4d02..e5db2fb20c6dbe2340c5491319e77db38e01865b 100644 (file)
@@ -1,3 +1,7 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
 defmodule Pleroma.Upload.Filter do
   @moduledoc """
   Upload Filter behaviour
@@ -11,9 +15,13 @@ defmodule Pleroma.Upload.Filter do
 
   require Logger
 
-  @callback filter(Pleroma.Upload.t()) :: :ok | {:ok, Pleroma.Upload.t()} | {:error, any()}
+  @callback filter(upload :: struct()) ::
+              {:ok, :filtered}
+              | {:ok, :noop}
+              | {:ok, :filtered, upload :: struct()}
+              | {:error, any()}
 
-  @spec filter([module()], Pleroma.Upload.t()) :: {:ok, Pleroma.Upload.t()} | {:error, any()}
+  @spec filter([module()], upload :: struct()) :: {:ok, upload :: struct()} | {:error, any()}
 
   def filter([], upload) do
     {:ok, upload}
@@ -21,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, :filtered, upload} ->
         filter(rest, upload)
 
-      {:ok, upload} ->
+      {:ok, :noop} ->
         filter(rest, upload)
 
       error ->