diff --git a/steal_emoji_policy.ex b/steal_emoji_policy.ex index 502720a..7d932d5 100644 --- a/steal_emoji_policy.ex +++ b/steal_emoji_policy.ex @@ -10,15 +10,23 @@ defmodule Pleroma.Web.ActivityPub.MRF.StealEmojiPolicy do length(result) == 1 end - defp local_actor(actor) do - host = Pleroma.Config.get([Pleroma.Web.Endpoint, :url, :host]) - prefix = "https://" <> host <> "/" - String.starts_with?(actor, prefix) + defp is_remote(host) do + my_host = Pleroma.Config.get([Pleroma.Web.Endpoint, :url, :host]) + my_host != host + end + + # if whitelist is not defined, everything is "whitelisted" + defp is_whitelisted(domain) do + whitelist = Pleroma.Config.get([:emoji_stealer, :whitelist]) + + whitelist == nil || Enum.member?(whitelist, domain) end @impl true def filter(%{"object" => %{"emoji" => foreign_emoji, "actor" => actor}} = object) do - unless local_actor(actor) do + host = URI.parse(actor).host + + if is_remote(host) && is_whitelisted(host) do num_foreign_emoji = Kernel.map_size(foreign_emoji) if num_foreign_emoji > 0 do