diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index 22b2becea74442..9dd7027ea79f22 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -110,7 +110,7 @@ def find_existing_status def process_status_params @status_parser = ActivityPub::Parser::StatusParser.new(@json, followers_collection: @account.followers_url, object: @object) - attachment_ids = process_attachments.take(4).map(&:id) + attachment_ids = process_attachments.take(Rails.configuration.x.glitch.statuses[:max_media_attachments][:remote]).map(&:id) @params = { uri: @status_parser.uri, @@ -260,7 +260,7 @@ def process_attachments as_array(@object['attachment']).each do |attachment| media_attachment_parser = ActivityPub::Parser::MediaAttachmentParser.new(attachment) - next if media_attachment_parser.remote_url.blank? || media_attachments.size >= 4 + next if media_attachment_parser.remote_url.blank? || media_attachments.size >= Rails.configuration.x.glitch.statuses[:max_media_attachments][:remote] begin media_attachment = MediaAttachment.create( diff --git a/app/serializers/rest/instance_serializer.rb b/app/serializers/rest/instance_serializer.rb index e7d4a646d4644b..be32ef20041469 100644 --- a/app/serializers/rest/instance_serializer.rb +++ b/app/serializers/rest/instance_serializer.rb @@ -58,7 +58,7 @@ def configuration statuses: { max_characters: StatusLengthValidator::MAX_CHARS, - max_media_attachments: 4, + max_media_attachments: Rails.configuration.x.glitch.statuses[:max_media_attachments][:local], characters_reserved_per_url: StatusLengthValidator::URL_PLACEHOLDER_CHARS, supported_mime_types: HtmlAwareFormatter::STATUS_MIME_TYPES, }, diff --git a/app/serializers/rest/v1/instance_serializer.rb b/app/serializers/rest/v1/instance_serializer.rb index c6cbaba4898007..107f2939b04c0f 100644 --- a/app/serializers/rest/v1/instance_serializer.rb +++ b/app/serializers/rest/v1/instance_serializer.rb @@ -77,7 +77,7 @@ def configuration statuses: { max_characters: StatusLengthValidator::MAX_CHARS, - max_media_attachments: 4, + max_media_attachments: Rails.configuration.x.glitch.statuses[:max_media_attachments][:local], characters_reserved_per_url: StatusLengthValidator::URL_PLACEHOLDER_CHARS, supported_mime_types: HtmlAwareFormatter::STATUS_MIME_TYPES, }, diff --git a/app/services/activitypub/process_status_update_service.rb b/app/services/activitypub/process_status_update_service.rb index fb2b33114ed47f..3d5810c7515add 100644 --- a/app/services/activitypub/process_status_update_service.rb +++ b/app/services/activitypub/process_status_update_service.rb @@ -73,7 +73,7 @@ def update_media_attachments! as_array(@json['attachment']).each do |attachment| media_attachment_parser = ActivityPub::Parser::MediaAttachmentParser.new(attachment) - next if media_attachment_parser.remote_url.blank? || @next_media_attachments.size > 4 + next if media_attachment_parser.remote_url.blank? || @next_media_attachments.size > Rails.configuration.x.glitch.statuses[:max_media_attachments][:remote] begin media_attachment = previous_media_attachments.find { |previous_media_attachment| previous_media_attachment.remote_url == media_attachment_parser.remote_url } diff --git a/app/services/post_status_service.rb b/app/services/post_status_service.rb index 964ca91a67e929..041088b0870c63 100644 --- a/app/services/post_status_service.rb +++ b/app/services/post_status_service.rb @@ -146,9 +146,9 @@ def validate_media! return end - raise Mastodon::ValidationError, I18n.t('media_attachments.validations.too_many') if @options[:media_ids].size > 4 || @options[:poll].present? + raise Mastodon::ValidationError, I18n.t('media_attachments.validations.too_many') if @options[:media_ids].size > Rails.configuration.x.glitch.statuses[:max_media_attachments][:local] || @options[:poll].present? - @media = @account.media_attachments.where(status_id: nil).where(id: @options[:media_ids].take(4).map(&:to_i)) + @media = @account.media_attachments.where(status_id: nil).where(id: @options[:media_ids].take(Rails.configuration.x.glitch.statuses[:max_media_attachments][:local]).map(&:to_i)) raise Mastodon::ValidationError, I18n.t('media_attachments.validations.images_and_video') if @media.size > 1 && @media.find(&:audio_or_video?) raise Mastodon::ValidationError, I18n.t('media_attachments.validations.not_ready') if @media.any?(&:not_processed?) diff --git a/app/services/update_status_service.rb b/app/services/update_status_service.rb index b354a1b6071e24..978ba0beaa12ab 100644 --- a/app/services/update_status_service.rb +++ b/app/services/update_status_service.rb @@ -70,9 +70,9 @@ def update_media_attachments! def validate_media! return [] if @options[:media_ids].blank? || !@options[:media_ids].is_a?(Enumerable) - raise Mastodon::ValidationError, I18n.t('media_attachments.validations.too_many') if @options[:media_ids].size > 4 || @options[:poll].present? + raise Mastodon::ValidationError, I18n.t('media_attachments.validations.too_many') if @options[:media_ids].size > Rails.configuration.x.glitch.statuses[:max_media_attachments][:local] || @options[:poll].present? - media_attachments = @status.account.media_attachments.where(status_id: [nil, @status.id]).where(scheduled_status_id: nil).where(id: @options[:media_ids].take(4).map(&:to_i)).to_a + media_attachments = @status.account.media_attachments.where(status_id: [nil, @status.id]).where(scheduled_status_id: nil).where(id: @options[:media_ids].take(Rails.configuration.x.glitch.statuses[:max_media_attachments][:local]).map(&:to_i)).to_a raise Mastodon::ValidationError, I18n.t('media_attachments.validations.images_and_video') if media_attachments.size > 1 && media_attachments.find(&:audio_or_video?) raise Mastodon::ValidationError, I18n.t('media_attachments.validations.not_ready') if media_attachments.any?(&:not_processed?) diff --git a/config/glitch.yml b/config/glitch.yml new file mode 100644 index 00000000000000..f0a116614a63d8 --- /dev/null +++ b/config/glitch.yml @@ -0,0 +1,5 @@ +shared: + statuses: + max_media_attachments: + local: <%= ENV['GLITCH_MAX_LOCAL_MEDIA_ATTACHMENTS'] || 4 %> + remote: <%= ENV['GLITCH_MAX_REMOTE_MEDIA_ATTACHMENTS'] || 16 %> diff --git a/config/initializers/glitch.rb b/config/initializers/glitch.rb new file mode 100644 index 00000000000000..2b9e306452fe27 --- /dev/null +++ b/config/initializers/glitch.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +module Glitch + class Application < Rails::Application + config.x.glitch = config_for(:glitch) + end +end