diff --git a/app/models/emoji_reaction.rb b/app/models/emoji_reaction.rb index c09b847dec..b3cc11cf32 100644 --- a/app/models/emoji_reaction.rb +++ b/app/models/emoji_reaction.rb @@ -30,6 +30,7 @@ class EmojiReaction < ApplicationRecord validate :status_same_emoji_reaction validate :status_emoji_reactions_count + validates_with EmojiReactionValidator after_create :refresh_cache after_destroy :refresh_cache diff --git a/app/validators/emoji_reaction_validator.rb b/app/validators/emoji_reaction_validator.rb new file mode 100644 index 0000000000..38ccde80af --- /dev/null +++ b/app/validators/emoji_reaction_validator.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class EmojiReactionValidator < ActiveModel::Validator + SUPPORTED_EMOJIS = Oj.load_file(Rails.root.join('app', 'javascript', 'mastodon', 'features', 'emoji', 'emoji_map.json').to_s).keys.freeze + + def validate(emoji_reaction) + return if emoji_reaction.name.blank? + + emoji_reaction.errors.add(:name, I18n.t('reactions.errors.unrecognized_emoji')) if emoji_reaction.custom_emoji_id.blank? && !unicode_emoji?(emoji_reaction.name) + end + + private + + def unicode_emoji?(name) + SUPPORTED_EMOJIS.include?(name) + end +end