Fix remote media descriptions being cut off at 420 chars (#12262)

* Fix remote media descriptions being cut off at 420 chars

Fixes #12258

* Fix tests
lolsob-rspec
ThibG 2019-11-04 13:00:16 +01:00 committed by Eugen Rochko
parent 0e5be902e9
commit 479d8ff47a
3 changed files with 32 additions and 4 deletions

View File

@ -26,6 +26,8 @@ class MediaAttachment < ApplicationRecord
enum type: [:image, :gifv, :video, :unknown, :audio] enum type: [:image, :gifv, :video, :unknown, :audio]
MAX_DESCRIPTION_LENGTH = 1_500
IMAGE_FILE_EXTENSIONS = %w(.jpg .jpeg .png .gif).freeze IMAGE_FILE_EXTENSIONS = %w(.jpg .jpeg .png .gif).freeze
VIDEO_FILE_EXTENSIONS = %w(.webm .mp4 .m4v .mov).freeze VIDEO_FILE_EXTENSIONS = %w(.webm .mp4 .m4v .mov).freeze
AUDIO_FILE_EXTENSIONS = %w(.ogg .oga .mp3 .wav .flac .opus .aac .m4a .3gp .wma).freeze AUDIO_FILE_EXTENSIONS = %w(.ogg .oga .mp3 .wav .flac .opus .aac .m4a .3gp .wma).freeze
@ -139,7 +141,7 @@ class MediaAttachment < ApplicationRecord
include Attachmentable include Attachmentable
validates :account, presence: true validates :account, presence: true
validates :description, length: { maximum: 1_500 }, if: :local? validates :description, length: { maximum: MAX_DESCRIPTION_LENGTH }, if: :local?
scope :attached, -> { where.not(status_id: nil).or(where.not(scheduled_status_id: nil)) } scope :attached, -> { where.not(status_id: nil).or(where.not(scheduled_status_id: nil)) }
scope :unattached, -> { where(status_id: nil, scheduled_status_id: nil) } scope :unattached, -> { where(status_id: nil, scheduled_status_id: nil) }
@ -243,7 +245,7 @@ class MediaAttachment < ApplicationRecord
end end
def prepare_description def prepare_description
self.description = description.strip[0...420] unless description.nil? self.description = description.strip[0...MAX_DESCRIPTION_LENGTH] unless description.nil?
end end
def set_type_and_extension def set_type_and_extension

View File

@ -261,6 +261,32 @@ RSpec.describe ActivityPub::Activity::Create do
end end
end end
context 'with media attachments with long description' do
let(:object_json) do
{
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
type: 'Note',
content: 'Lorem ipsum',
attachment: [
{
type: 'Document',
mediaType: 'image/png',
url: 'http://example.com/attachment.png',
name: '*' * 1500,
},
],
}
end
it 'creates status' do
status = sender.statuses.first
expect(status).to_not be_nil
expect(status.media_attachments.map(&:description)).to include('*' * 1500)
end
end
context 'with media attachments with focal points' do context 'with media attachments with focal points' do
let(:object_json) do let(:object_json) do
{ {

View File

@ -136,10 +136,10 @@ RSpec.describe MediaAttachment, type: :model do
end end
describe 'descriptions for remote attachments' do describe 'descriptions for remote attachments' do
it 'are cut off at 140 characters' do it 'are cut off at 1500 characters' do
media = Fabricate(:media_attachment, description: 'foo' * 1000, remote_url: 'http://example.com/blah.jpg') media = Fabricate(:media_attachment, description: 'foo' * 1000, remote_url: 'http://example.com/blah.jpg')
expect(media.description.size).to be <= 420 expect(media.description.size).to be <= 1_500
end end
end end
end end