X-Git-Url: https://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fweb%2Factivity_pub%2Fmrf%2Fsteal_emoji_policy.ex;h=4c5e33619da38f5471954da5dbf9094e4041185d;hb=e3508988283a0902a7e330995a0c224811956bce;hp=eabee654209d53f052fc7ec85c8144c3f64e63d7;hpb=aafd7b44ceaf50788f12061ee88071a288155b95;p=akkoma
diff --git a/lib/pleroma/web/activity_pub/mrf/steal_emoji_policy.ex b/lib/pleroma/web/activity_pub/mrf/steal_emoji_policy.ex
index eabee6542..4c5e33619 100644
--- a/lib/pleroma/web/activity_pub/mrf/steal_emoji_policy.ex
+++ b/lib/pleroma/web/activity_pub/mrf/steal_emoji_policy.ex
@@ -1,5 +1,5 @@
# Pleroma: A lightweight social networking server
-# Copyright © 2017-2020 Pleroma Authors
+# Copyright © 2017-2021 Pleroma Authors
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Web.ActivityPub.MRF.StealEmojiPolicy do
@@ -10,52 +10,53 @@ defmodule Pleroma.Web.ActivityPub.MRF.StealEmojiPolicy do
@moduledoc "Detect new emojis by their shortcode and steals them"
@behaviour Pleroma.Web.ActivityPub.MRF
- defp remote_host?(host), do: host != Config.get([Pleroma.Web.Endpoint, :url, :host])
-
defp accept_host?(host), do: host in Config.get([:mrf_steal_emoji, :hosts], [])
defp steal_emoji({shortcode, url}, emoji_dir_path) do
url = Pleroma.Web.MediaProxy.url(url)
- {:ok, response} = Pleroma.HTTP.get(url)
- size_limit = Config.get([:mrf_steal_emoji, :size_limit], 50_000)
- if byte_size(response.body) <= size_limit do
- extension =
- url
- |> URI.parse()
- |> Map.get(:path)
- |> Path.basename()
- |> Path.extname()
+ with {:ok, %{status: status} = response} when status in 200..299 <- Pleroma.HTTP.get(url) do
+ size_limit = Config.get([:mrf_steal_emoji, :size_limit], 50_000)
+
+ if byte_size(response.body) <= size_limit do
+ extension =
+ url
+ |> URI.parse()
+ |> Map.get(:path)
+ |> Path.basename()
+ |> Path.extname()
+
+ file_path = Path.join(emoji_dir_path, shortcode <> (extension || ".png"))
- file_path = Path.join([emoji_dir_path, shortcode <> (extension || ".png")])
+ case File.write(file_path, response.body) do
+ :ok ->
+ shortcode
- with :ok <- File.write(file_path, response.body) do
- shortcode
+ e ->
+ Logger.warn("MRF.StealEmojiPolicy: Failed to write to #{file_path}: #{inspect(e)}")
+ nil
+ end
else
- e ->
- Logger.warn("MRF.StealEmojiPolicy: Failed to write to #{file_path}: #{inspect(e)}")
- nil
+ Logger.debug(
+ "MRF.StealEmojiPolicy: :#{shortcode}: at #{url} (#{byte_size(response.body)}Â B) over size limit (#{
+ size_limit
+ }Â B)"
+ )
+
+ nil
end
else
- Logger.debug(
- "MRF.StealEmojiPolicy: :#{shortcode}: at #{url} (#{byte_size(response.body)}Â B) over size limit (#{
- size_limit
- }Â B)"
- )
-
- nil
+ e ->
+ Logger.warn("MRF.StealEmojiPolicy: Failed to fetch #{url}: #{inspect(e)}")
+ nil
end
- rescue
- e ->
- Logger.warn("MRF.StealEmojiPolicy: Failed to fetch #{url}: #{inspect(e)}")
- nil
end
@impl true
def filter(%{"object" => %{"emoji" => foreign_emojis, "actor" => actor}} = message) do
host = URI.parse(actor).host
- if remote_host?(host) and accept_host?(host) do
+ if host != Pleroma.Web.Endpoint.host() and accept_host?(host) do
installed_emoji = Pleroma.Emoji.get_all() |> Enum.map(fn {k, _} -> k end)
emoji_dir_path =
@@ -64,16 +65,15 @@ defmodule Pleroma.Web.ActivityPub.MRF.StealEmojiPolicy do
Path.join(Config.get([:instance, :static_dir]), "emoji/stolen")
)
- if not Config.get([:mrf_steal_emoji, :dir_exists?], false) do
- create_dir(emoji_dir_path)
- end
+ File.mkdir_p(emoji_dir_path)
new_emojis =
foreign_emojis
- |> Enum.filter(fn {shortcode, _url} -> shortcode not in installed_emoji end)
+ |> Enum.reject(fn {shortcode, _url} -> shortcode in installed_emoji end)
|> Enum.filter(fn {shortcode, _url} ->
reject_emoji? =
- Config.get([:mrf_steal_emoji, :rejected_shortcodes], [])
+ [:mrf_steal_emoji, :rejected_shortcodes]
+ |> Config.get([])
|> Enum.find(false, fn regex -> String.match?(shortcode, regex) end)
!reject_emoji?
@@ -96,12 +96,4 @@ defmodule Pleroma.Web.ActivityPub.MRF.StealEmojiPolicy do
def describe do
{:ok, %{}}
end
-
- defp create_dir(path) do
- if not File.exists?(path) do
- File.mkdir_p!(path)
- end
-
- Config.put([:mrf_steal_emoji, :dir_exists?], true)
- end
end