X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fweb%2Factivity_pub%2Fobject_validators%2Femoji_react_validator.ex;h=b133cbb741ec53e71c8fc013d3e966c45b893319;hb=142646426e1830ac0e0461075a99a27ac5813ceb;hp=422ab594a8d5ce41cfb500fbc28fe7310849c118;hpb=71f428185075291b3055e98826c226c49c4f3962;p=akkoma diff --git a/lib/pleroma/web/activity_pub/object_validators/emoji_react_validator.ex b/lib/pleroma/web/activity_pub/object_validators/emoji_react_validator.ex index 422ab594a..b133cbb74 100644 --- a/lib/pleroma/web/activity_pub/object_validators/emoji_react_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/emoji_react_validator.ex @@ -5,6 +5,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.EmojiReactValidator do use Ecto.Schema + alias Pleroma.Emoji alias Pleroma.Object alias Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes @@ -62,19 +63,24 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.EmojiReactValidator do Map.put(data, "tag", []) end - with %Object{} = object <- Object.normalize(data["object"]) do - data - |> CommonFixes.fix_activity_context(object) - |> CommonFixes.fix_object_action_recipients(object) - else - _ -> data + case Object.normalize(data["object"]) do + %Object{} = object -> + data + |> CommonFixes.fix_activity_context(object) + |> CommonFixes.fix_object_action_recipients(object) + + _ -> + data end end + defp matches_shortcode?(nil), do: false + defp matches_shortcode?(s), do: Regex.match?(@emoji_regex, s) + defp validate_emoji(cng) do content = get_field(cng, :content) - if Pleroma.Emoji.is_unicode_emoji?(content) || Regex.match?(@emoji_regex, content) do + if Emoji.is_unicode_emoji?(content) || matches_shortcode?(content) do cng else cng @@ -82,6 +88,24 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.EmojiReactValidator do end end + defp maybe_validate_tag_presence(cng) do + content = get_field(cng, :content) + + if Emoji.is_unicode_emoji?(content) do + cng + else + tag = get_field(cng, :tag) + emoji_name = Emoji.stripped_name(content) + case tag do + [%{name: ^emoji_name, type: "Emoji", icon: %{url: _}}] -> + cng + _ -> + cng + |> add_error(:tag, "does not contain an Emoji tag") + end + end + end + defp validate_data(data_cng) do data_cng |> validate_inclusion(:type, ["EmojiReact"]) @@ -89,5 +113,6 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.EmojiReactValidator do |> validate_actor_presence() |> validate_object_presence() |> validate_emoji() + |> maybe_validate_tag_presence() end end