From 3f5142c2f877694fcc290bd472e8bae2873fdffa Mon Sep 17 00:00:00 2001 From: KMY Date: Wed, 8 Mar 2023 16:31:22 +0900 Subject: [PATCH] Move emoji reaction limitation constraints --- app/controllers/api/base_controller.rb | 1 - .../api/v1/statuses/emoji_reactions_controller.rb | 2 +- app/lib/activitypub/activity/like.rb | 4 +--- app/models/emoji_reaction.rb | 3 +++ app/serializers/rest/instance_serializer.rb | 5 +++++ app/serializers/rest/v1/instance_serializer.rb | 5 +++++ 6 files changed, 15 insertions(+), 5 deletions(-) diff --git a/app/controllers/api/base_controller.rb b/app/controllers/api/base_controller.rb index ace2459aa..20e1c8223 100644 --- a/app/controllers/api/base_controller.rb +++ b/app/controllers/api/base_controller.rb @@ -3,7 +3,6 @@ class Api::BaseController < ApplicationController DEFAULT_STATUSES_LIMIT = 20 DEFAULT_ACCOUNTS_LIMIT = 40 - DEFAULT_EMOJI_REACTION_LIMIT = 10 include Api::RateLimitHeaders include Api::AccessTokenTrackingConcern diff --git a/app/controllers/api/v1/statuses/emoji_reactions_controller.rb b/app/controllers/api/v1/statuses/emoji_reactions_controller.rb index da68f5813..1b56033bc 100644 --- a/app/controllers/api/v1/statuses/emoji_reactions_controller.rb +++ b/app/controllers/api/v1/statuses/emoji_reactions_controller.rb @@ -42,7 +42,7 @@ class Api::V1::Statuses::EmojiReactionsController < Api::BaseController def create_private(emoji) count = EmojiReaction.where(account: current_account, status: @status).count - if count >= DEFAULT_EMOJI_REACTION_LIMIT + if count >= EmojiReaction::EMOJI_REACTION_PER_ACCOUNT_LIMIT bad_request return end diff --git a/app/lib/activitypub/activity/like.rb b/app/lib/activitypub/activity/like.rb index df8cea913..910e40e48 100644 --- a/app/lib/activitypub/activity/like.rb +++ b/app/lib/activitypub/activity/like.rb @@ -40,9 +40,7 @@ class ActivityPub::Activity::Like < ActivityPub::Activity end end - return if @account.reacted?(@original_status, shortcode, emoji) - - return if EmojiReaction.where(account: @account, status: @original_status).count >= BaseController::DEFAULT_EMOJI_REACTION_LIMIT + return if EmojiReaction.where(account: @account, status: @original_status).count >= EmojiReaction::EMOJI_REACTION_PER_ACCOUNT_LIMIT EmojiReaction.find_by(account: @account, status: @original_status)&.destroy reaction = @original_status.emoji_reactions.create!(account: @account, name: shortcode, custom_emoji: emoji, uri: @json['id']) diff --git a/app/models/emoji_reaction.rb b/app/models/emoji_reaction.rb index b66751ffe..44e880d9f 100644 --- a/app/models/emoji_reaction.rb +++ b/app/models/emoji_reaction.rb @@ -17,6 +17,9 @@ class EmojiReaction < ApplicationRecord include Paginable + EMOJI_REACTION_LIMIT = 32767 + EMOJI_REACTION_PER_ACCOUNT_LIMIT = 5 + update_index('statuses', :status) belongs_to :account, inverse_of: :emoji_reactions diff --git a/app/serializers/rest/instance_serializer.rb b/app/serializers/rest/instance_serializer.rb index 498a1cc68..04dfa85cd 100644 --- a/app/serializers/rest/instance_serializer.rb +++ b/app/serializers/rest/instance_serializer.rb @@ -81,6 +81,11 @@ class REST::InstanceSerializer < ActiveModel::Serializer translation: { enabled: TranslationService.configured?, }, + + emoji_reactions: { + max_reactions: EmojiReaction::EMOJI_REACTION_LIMIT, + max_reactions_per_account: EmojiReaction::EMOJI_REACTION_PER_ACCOUNT_LIMIT, + }, } end diff --git a/app/serializers/rest/v1/instance_serializer.rb b/app/serializers/rest/v1/instance_serializer.rb index a96d2adf5..145ca6967 100644 --- a/app/serializers/rest/v1/instance_serializer.rb +++ b/app/serializers/rest/v1/instance_serializer.rb @@ -83,6 +83,11 @@ class REST::V1::InstanceSerializer < ActiveModel::Serializer min_expiration: PollValidator::MIN_EXPIRATION, max_expiration: PollValidator::MAX_EXPIRATION, }, + + emoji_reactions: { + max_reactions: EmojiReaction::EMOJI_REACTION_LIMIT, + max_reactions_per_account: EmojiReaction::EMOJI_REACTION_PER_ACCOUNT_LIMIT, + }, } end