From df6b80875001e9e70db3427a0af1c51a226dc569 Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Tue, 6 May 2025 08:08:44 +0200 Subject: [PATCH 1/4] fix: do not use the deprecated `/api/v1/instance` end point (#34613) --- .../mastodon/components/admin/ReportReasonSelector.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/components/admin/ReportReasonSelector.jsx b/app/javascript/mastodon/components/admin/ReportReasonSelector.jsx index 351f1c949e..3c33688b0c 100644 --- a/app/javascript/mastodon/components/admin/ReportReasonSelector.jsx +++ b/app/javascript/mastodon/components/admin/ReportReasonSelector.jsx @@ -105,7 +105,7 @@ class ReportReasonSelector extends PureComponent { }; componentDidMount() { - api(false).get('/api/v1/instance').then(res => { + api(false).get('/api/v2/instance').then(res => { this.setState({ rules: res.data.rules, }); From 3e5d78cc5b4e779f1be2b8469dba953ffb09e4ff Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 6 May 2025 09:39:26 +0200 Subject: [PATCH 2/4] Fix crash when `likes` or `shares` collections are not inlined (#34618) --- app/lib/activitypub/parser/status_parser.rb | 4 ++-- spec/lib/activitypub/activity/create_spec.rb | 6 +++--- spec/lib/activitypub/parser/status_parser_spec.rb | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/lib/activitypub/parser/status_parser.rb b/app/lib/activitypub/parser/status_parser.rb index db64461fa9..d3a421809c 100644 --- a/app/lib/activitypub/parser/status_parser.rb +++ b/app/lib/activitypub/parser/status_parser.rb @@ -95,11 +95,11 @@ class ActivityPub::Parser::StatusParser end def favourites_count - @object.dig('likes', 'totalItems') + @object.dig('likes', 'totalItems') if @object.is_a?(Hash) end def reblogs_count - @object.dig('shares', 'totalItems') + @object.dig('shares', 'totalItems') if @object.is_a?(Hash) end def quote_policy diff --git a/spec/lib/activitypub/activity/create_spec.rb b/spec/lib/activitypub/activity/create_spec.rb index 43cbc8a93b..baabd91c5b 100644 --- a/spec/lib/activitypub/activity/create_spec.rb +++ b/spec/lib/activitypub/activity/create_spec.rb @@ -20,7 +20,7 @@ RSpec.describe ActivityPub::Activity::Create do type: 'Create', actor: ActivityPub::TagManager.instance.uri_for(sender), object: object_json, - }.with_indifferent_access + }.deep_stringify_keys end before do @@ -102,7 +102,7 @@ RSpec.describe ActivityPub::Activity::Create do type: 'Create', actor: ActivityPub::TagManager.instance.uri_for(sender), object: json, - }.with_indifferent_access + }.deep_stringify_keys end before do @@ -1076,7 +1076,7 @@ RSpec.describe ActivityPub::Activity::Create do type: 'Create', actor: ActivityPub::TagManager.instance.uri_for(sender), object: Addressable::URI.new(scheme: 'bear', query_values: { t: token, u: object_json[:id] }).to_s, - }.with_indifferent_access + }.deep_stringify_keys end let(:object_json) do diff --git a/spec/lib/activitypub/parser/status_parser_spec.rb b/spec/lib/activitypub/parser/status_parser_spec.rb index dddeae31e0..914dce9888 100644 --- a/spec/lib/activitypub/parser/status_parser_spec.rb +++ b/spec/lib/activitypub/parser/status_parser_spec.rb @@ -16,7 +16,7 @@ RSpec.describe ActivityPub::Parser::StatusParser do type: 'Create', actor: ActivityPub::TagManager.instance.uri_for(sender), object: object_json, - }.with_indifferent_access + }.deep_stringify_keys end let(:object_json) do From 41d00bc28b4ceb745740c87fff0e19631f8ca402 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 6 May 2025 11:45:32 +0200 Subject: [PATCH 3/4] Fix libvips being unconditionally required by tasks (#34620) --- lib/tasks/emojis.rake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/tasks/emojis.rake b/lib/tasks/emojis.rake index 21c2b2be6a..330101f555 100644 --- a/lib/tasks/emojis.rake +++ b/lib/tasks/emojis.rake @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'vips' - def gen_border(codepoint, color) input = Rails.public_path.join('emoji', "#{codepoint}.svg") dest = Rails.public_path.join('emoji', "#{codepoint}_border.svg") @@ -191,6 +189,8 @@ namespace :emojis do desc 'Generate a spritesheet of emojis' task :generate_emoji_sheet do + require 'vips' + src = Rails.root.join('app', 'javascript', 'mastodon', 'features', 'emoji', 'emoji_data.json') sheet = Oj.load(File.read(src)) From 22e2e7f02b2f25f30abd6a616bc3b0b543b30279 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 6 May 2025 11:51:42 +0200 Subject: [PATCH 4/4] Fix crash when `likes` or `shares` collections are not inlined, for real (#34619) --- app/lib/activitypub/parser/status_parser.rb | 4 ++-- .../activitypub/parser/status_parser_spec.rb | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/app/lib/activitypub/parser/status_parser.rb b/app/lib/activitypub/parser/status_parser.rb index d3a421809c..ea779b5cbd 100644 --- a/app/lib/activitypub/parser/status_parser.rb +++ b/app/lib/activitypub/parser/status_parser.rb @@ -95,11 +95,11 @@ class ActivityPub::Parser::StatusParser end def favourites_count - @object.dig('likes', 'totalItems') if @object.is_a?(Hash) + @object['likes']['totalItems'] if @object.is_a?(Hash) && @object['likes'].is_a?(Hash) end def reblogs_count - @object.dig('shares', 'totalItems') if @object.is_a?(Hash) + @object['shares']['totalItems'] if @object.is_a?(Hash) && @object['shares'].is_a?(Hash) end def quote_policy diff --git a/spec/lib/activitypub/parser/status_parser_spec.rb b/spec/lib/activitypub/parser/status_parser_spec.rb index 914dce9888..b251b63f43 100644 --- a/spec/lib/activitypub/parser/status_parser_spec.rb +++ b/spec/lib/activitypub/parser/status_parser_spec.rb @@ -49,6 +49,24 @@ RSpec.describe ActivityPub::Parser::StatusParser do ) end + context 'when the likes collection is not inlined' do + let(:object_json) do + { + id: [ActivityPub::TagManager.instance.uri_for(sender), 'post1'].join('/'), + type: 'Note', + to: 'https://www.w3.org/ns/activitystreams#Public', + content: 'bleh', + published: 1.hour.ago.utc.iso8601, + updated: 1.hour.ago.utc.iso8601, + likes: 'https://example.com/collections/likes', + } + end + + it 'does not raise an error' do + expect { subject.favourites_count }.to_not raise_error + end + end + describe '#quote_policy' do subject do described_class