- def filter(upload) do
- extension = List.last(String.split(upload.name, "."))
- string = Base.url_encode64(:crypto.strong_rand_bytes(10), padding: false)
- {:ok, %Pleroma.Upload{upload | name: string <> "." <> extension}}
+ alias Pleroma.Config
+ alias Pleroma.Upload
+
+ def filter(%Upload{name: name} = upload) do
+ extension = List.last(String.split(name, "."))
+ name = predefined_name(extension) || random(extension)
+ {: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]),
+ do: String.replace(name, "{extension}", extension)
+ end
+
+ defp random(extension) do
+ string =
+ 10
+ |> :crypto.strong_rand_bytes()
+ |> Base.url_encode64(padding: false)
+
+ string <> "." <> extension