fixup! Change the API call limit from 600 to 1200

This commit is contained in:
noellabo 2023-02-16 16:22:15 +09:00
parent a7137add9f
commit 90b9f8100e
8 changed files with 27 additions and 7 deletions

View file

@ -36,6 +36,7 @@ class Form::AdminSettings
noindex noindex
require_invite_text require_invite_text
allow_poll_image allow_poll_image
poll_max_options
).freeze ).freeze
BOOLEAN_KEYS = %i( BOOLEAN_KEYS = %i(
@ -55,6 +56,10 @@ class Form::AdminSettings
allow_poll_image allow_poll_image
).freeze ).freeze
INTEGER_KEYS = %i(
poll_max_options
).freeze
UPLOAD_KEYS = %i( UPLOAD_KEYS = %i(
thumbnail thumbnail
hero hero
@ -72,6 +77,7 @@ class Form::AdminSettings
validates :bootstrap_timeline_accounts, existing_username: { multiple: true } validates :bootstrap_timeline_accounts, existing_username: { multiple: true }
validates :show_domain_blocks, inclusion: { in: %w(disabled users all) } validates :show_domain_blocks, inclusion: { in: %w(disabled users all) }
validates :show_domain_blocks_rationale, inclusion: { in: %w(disabled users all) } validates :show_domain_blocks_rationale, inclusion: { in: %w(disabled users all) }
validates :poll_max_options, numericality: { greater_than: 2, less_than_or_equal_to: PollValidator::MAX_OPTIONS_LIMIT }
def initialize(_attributes = {}) def initialize(_attributes = {})
super super
@ -105,6 +111,8 @@ class Form::AdminSettings
def typecast_value(key, value) def typecast_value(key, value)
if BOOLEAN_KEYS.include?(key) if BOOLEAN_KEYS.include?(key)
value == '1' value == '1'
elsif INTEGER_KEYS.include?(key)
Integer(value)
else else
value value
end end

View file

@ -120,7 +120,7 @@ class InitialStateSerializer < ActiveModel::Serializer
store[:default_expires_action] = object.current_account.user.setting_default_expires_action store[:default_expires_action] = object.current_account.user.setting_default_expires_action
store[:prohibited_visibilities] = object.current_account.user.setting_prohibited_visibilities.filter(&:present?) store[:prohibited_visibilities] = object.current_account.user.setting_prohibited_visibilities.filter(&:present?)
store[:prohibited_words] = (object.current_account.user.setting_prohibited_words || '').split(',').map(&:strip).filter(&:present?) store[:prohibited_words] = (object.current_account.user.setting_prohibited_words || '').split(',').map(&:strip).filter(&:present?)
store[:poll_max_options] = PollValidator::MAX_OPTIONS store[:poll_max_options] = [PollValidator::MAX_OPTIONS, Setting.poll_max_options].max
end end
store[:text] = object.text if object.text store[:text] = object.text if object.text

View file

@ -85,7 +85,7 @@ class REST::InstanceSerializer < ActiveModel::Serializer
}, },
polls: { polls: {
max_options: PollValidator::MAX_OPTIONS, max_options: [PollValidator::MAX_OPTIONS, Setting.poll_max_options].max,
max_characters_per_option: PollValidator::MAX_OPTION_CHARS, max_characters_per_option: PollValidator::MAX_OPTION_CHARS,
min_expiration: PollValidator::MIN_EXPIRATION, min_expiration: PollValidator::MIN_EXPIRATION,
max_expiration: PollValidator::MAX_EXPIRATION, max_expiration: PollValidator::MAX_EXPIRATION,

View file

@ -1,16 +1,18 @@
# frozen_string_literal: true # frozen_string_literal: true
class PollValidator < ActiveModel::Validator class PollValidator < ActiveModel::Validator
MAX_OPTIONS = 10 MAX_OPTIONS = 4
MAX_OPTIONS_LIMIT = 20
MAX_OPTION_CHARS = 50 MAX_OPTION_CHARS = 50
MAX_EXPIRATION = 1.month.freeze MAX_EXPIRATION = 1.month.freeze
MIN_EXPIRATION = 5.minutes.freeze MIN_EXPIRATION = 5.minutes.freeze
def validate(poll) def validate(poll)
current_time = Time.now.utc current_time = Time.now.utc
max_options = [MAX_OPTIONS, Setting.poll_max_options].max
poll.errors.add(:options, I18n.t('polls.errors.too_few_options')) unless poll.options.size > 1 poll.errors.add(:options, I18n.t('polls.errors.too_few_options')) unless poll.options.size > 1
poll.errors.add(:options, I18n.t('polls.errors.too_many_options', max: MAX_OPTIONS)) if poll.options.size > MAX_OPTIONS poll.errors.add(:options, I18n.t('polls.errors.too_many_options', max: max_options)) if poll.options.size > max_options
poll.errors.add(:options, I18n.t('polls.errors.over_character_limit', max: MAX_OPTION_CHARS)) if poll.options.any? { |option| option.mb_chars.grapheme_length > MAX_OPTION_CHARS } poll.errors.add(:options, I18n.t('polls.errors.over_character_limit', max: MAX_OPTION_CHARS)) if poll.options.any? { |option| option.mb_chars.grapheme_length > MAX_OPTION_CHARS }
poll.errors.add(:options, I18n.t('polls.errors.duplicate_options')) unless poll.options.uniq.size == poll.options.size poll.errors.add(:options, I18n.t('polls.errors.duplicate_options')) unless poll.options.uniq.size == poll.options.size
poll.errors.add(:expires_at, I18n.t('polls.errors.duration_too_long')) if poll.expires_at.nil? || poll.expires_at - current_time > MAX_EXPIRATION poll.errors.add(:expires_at, I18n.t('polls.errors.duration_too_long')) if poll.expires_at.nil? || poll.expires_at - current_time > MAX_EXPIRATION

View file

@ -95,6 +95,9 @@
.fields-group .fields-group
= f.input :allow_poll_image, as: :boolean, wrapper: :with_label, label: t('admin.settings.allow_poll_image.title'), hint: t('admin.settings.allow_poll_image.desc_html'), fedibird_features: true = f.input :allow_poll_image, as: :boolean, wrapper: :with_label, label: t('admin.settings.allow_poll_image.title'), hint: t('admin.settings.allow_poll_image.desc_html'), fedibird_features: true
.fields-group
= f.input :poll_max_options, wrapper: :with_label, label: t('admin.settings.poll_max_options.title'), hint: t('admin.settings.poll_max_options.desc_html', count: PollValidator::MAX_OPTIONS_LIMIT), fedibird_features: true
%hr.spacer/ %hr.spacer/
.fields-group .fields-group

View file

@ -658,6 +658,9 @@ en:
peers_api_enabled: peers_api_enabled:
desc_html: Domain names this server has encountered in the fediverse desc_html: Domain names this server has encountered in the fediverse
title: Publish list of discovered servers in the API title: Publish list of discovered servers in the API
poll_max_options:
desc_html: "Specifies the maximum number of polls (<= %{count})"
title: Maximum number of Polls
preview_sensitive_media: preview_sensitive_media:
desc_html: Link previews on other websites will display a thumbnail even if the media is marked as sensitive desc_html: Link previews on other websites will display a thumbnail even if the media is marked as sensitive
title: Show sensitive media in OpenGraph previews title: Show sensitive media in OpenGraph previews

View file

@ -637,6 +637,9 @@ ja:
peers_api_enabled: peers_api_enabled:
desc_html: 連合内でこのサーバーが遭遇したドメインの名前 desc_html: 連合内でこのサーバーが遭遇したドメインの名前
title: 接続しているサーバーのリストを公開する title: 接続しているサーバーのリストを公開する
poll_max_options:
desc_html: "投票の選択肢の最大数(%{count}以下)を指定します。"
title: 投票の選択肢の最大数
preview_sensitive_media: preview_sensitive_media:
desc_html: 他のウェブサイトにリンクを貼った際、メディアが閲覧注意としてマークされていてもサムネイルが表示されます desc_html: 他のウェブサイトにリンクを貼った際、メディアが閲覧注意としてマークされていてもサムネイルが表示されます
title: OpenGraphによるプレビューで閲覧注意のメディアも表示する title: OpenGraphによるプレビューで閲覧注意のメディアも表示する

View file

@ -139,6 +139,7 @@ defaults: &defaults
hide_photo_preview: false hide_photo_preview: false
hide_video_preview: false hide_video_preview: false
allow_poll_image: false allow_poll_image: false
poll_max_options: 4
development: development:
<<: *defaults <<: *defaults