From d3aa9cf7744eede43c5c1b9097eb1f0720185ccd Mon Sep 17 00:00:00 2001 From: Claire Date: Sat, 12 Mar 2022 09:30:31 +0100 Subject: [PATCH] Fix Updates being forwarded even when not processable or causing no change (#17699) * Fix Updates being forwarded even when not processable or causing no change * Refactor and ensure status edit is strictly newer than last known edit --- .../activitypub/process_status_update_service.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/app/services/activitypub/process_status_update_service.rb b/app/services/activitypub/process_status_update_service.rb index 1260c0482a..70e9cb7d99 100644 --- a/app/services/activitypub/process_status_update_service.rb +++ b/app/services/activitypub/process_status_update_service.rb @@ -15,6 +15,8 @@ class ActivityPub::ProcessStatusUpdateService < BaseService # Only native types can be updated at the moment return if !expected_type? || already_updated_more_recently? + last_edit_date = status.edited_at.presence || status.created_at + # Only allow processing one create/update per status at a time RedisLock.acquire(lock_options) do |lock| if lock.acquired? @@ -37,6 +39,8 @@ class ActivityPub::ProcessStatusUpdateService < BaseService raise Mastodon::RaceConditionError end end + + forward_activity! if significant_changes? && @status_parser.edited_at.present? && @status_parser.edited_at > last_edit_date end private @@ -263,4 +267,12 @@ class ActivityPub::ProcessStatusUpdateService < BaseService PollExpirationNotifyWorker.remove_from_scheduled(poll.id) if @previous_expires_at.present? && @previous_expires_at > poll.expires_at PollExpirationNotifyWorker.perform_at(poll.expires_at + 5.minutes, poll.id) end + + def forward_activity! + forwarder.forward! if forwarder.forwardable? + end + + def forwarder + @forwarder ||= ActivityPub::Forwarder.new(@account, @json, @status) + end end