Browse Source

Fix Announce activities of unknown statuses not fetching those statuses (#10065)

Regression from #9998
Eugen Rochko 5 years ago
parent
commit
1a1b8170bb
2 changed files with 32 additions and 14 deletions
  1. 1 2
      app/lib/activitypub/activity.rb
  2. 31 12
      spec/lib/activitypub/activity/announce_spec.rb

+ 1 - 2
app/lib/activitypub/activity.rb

@@ -150,8 +150,7 @@ class ActivityPub::Activity
       end
     end
 
-    # If the status is not from the actor, try to fetch it
-    return fetch_remote_original_status if value_or_id(first_of_value(@json['attributedTo'])) == @account.uri
+    fetch_remote_original_status
   end
 
   def fetch_remote_original_status

+ 31 - 12
spec/lib/activitypub/activity/announce_spec.rb

@@ -1,7 +1,7 @@
 require 'rails_helper'
 
 RSpec.describe ActivityPub::Activity::Announce do
-  let(:sender)    { Fabricate(:account, followers_url: 'http://example.com/followers') }
+  let(:sender)    { Fabricate(:account, followers_url: 'http://example.com/followers', uri: 'https://example.com/actor') }
   let(:recipient) { Fabricate(:account) }
   let(:status)    { Fabricate(:status, account: recipient) }
 
@@ -10,21 +10,29 @@ RSpec.describe ActivityPub::Activity::Announce do
       '@context': 'https://www.w3.org/ns/activitystreams',
       id: 'foo',
       type: 'Announce',
-      actor: ActivityPub::TagManager.instance.uri_for(sender),
+      actor: 'https://example.com/actor',
       object: object_json,
     }.with_indifferent_access
   end
 
-  subject { described_class.new(json, sender) }
-
-  before do
-    sender.update(uri: ActivityPub::TagManager.instance.uri_for(sender))
+  let(:unknown_object_json) do
+    {
+      '@context': 'https://www.w3.org/ns/activitystreams',
+      id: 'https://example.com/actor/hello-world',
+      type: 'Note',
+      attributedTo: 'https://example.com/actor',
+      content: 'Hello world',
+      to: 'http://example.com/followers',
+    }
   end
 
+  subject { described_class.new(json, sender) }
+
   describe '#perform' do
     context 'when sender is followed by a local account' do
       before do
         Fabricate(:account).follow!(sender)
+        stub_request(:get, 'https://example.com/actor/hello-world').to_return(body: Oj.dump(unknown_object_json))
         subject.perform
       end
 
@@ -38,10 +46,21 @@ RSpec.describe ActivityPub::Activity::Announce do
         end
       end
 
+      context 'an unknown status' do
+        let(:object_json) { 'https://example.com/actor/hello-world' }
+
+        it 'creates a reblog by sender of status' do
+          reblog = sender.statuses.first
+
+          expect(reblog).to_not be_nil
+          expect(reblog.reblog.text).to eq 'Hello world'
+        end
+      end
+
       context 'self-boost of a previously unknown status with missing attributedTo' do
         let(:object_json) do
           {
-            id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
+            id: 'https://example.com/actor#bar',
             type: 'Note',
             content: 'Lorem ipsum',
             to: 'http://example.com/followers',
@@ -56,10 +75,10 @@ RSpec.describe ActivityPub::Activity::Announce do
       context 'self-boost of a previously unknown status with correct attributedTo' do
         let(:object_json) do
           {
-            id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
+            id: 'https://example.com/actor#bar',
             type: 'Note',
             content: 'Lorem ipsum',
-            attributedTo: ActivityPub::TagManager.instance.uri_for(sender),
+            attributedTo: 'https://example.com/actor',
             to: 'http://example.com/followers',
           }
         end
@@ -98,7 +117,7 @@ RSpec.describe ActivityPub::Activity::Announce do
 
         let(:object_json) do
           {
-            id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
+            id: 'https://example.com/actor#bar',
             type: 'Note',
             content: 'Lorem ipsum',
             to: 'http://example.com/followers',
@@ -117,7 +136,7 @@ RSpec.describe ActivityPub::Activity::Announce do
 
         let(:object_json) do
           {
-            id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
+            id: 'https://example.com/actor#bar',
             type: 'Note',
             content: 'Lorem ipsum',
             to: 'http://example.com/followers',
@@ -137,7 +156,7 @@ RSpec.describe ActivityPub::Activity::Announce do
 
       let(:object_json) do
         {
-          id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
+          id: 'https://example.com/actor#bar',
           type: 'Note',
           content: 'Lorem ipsum',
           to: 'http://example.com/followers',