Prevent silenced local users from notifying remote users not following them (#10575)
* Prevent silenced local users from notifying remote users not following them This is an attempt to extend the local restrictions of silenced users to the federation. * Add tests * Add tests for making sure private status don't get sent over OStatus
This commit is contained in:
		
							parent
							
								
									26fc21c188
								
							
						
					
					
						commit
						62f5235b6f
					
				
					 3 changed files with 74 additions and 5 deletions
				
			
		| 
						 | 
				
			
			@ -41,6 +41,22 @@ RSpec.describe ActivityPub::TagManager do
 | 
			
		|||
      status.mentions.create(account: mentioned)
 | 
			
		||||
      expect(subject.to(status)).to eq [subject.uri_for(mentioned)]
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it "returns URIs of mentions for direct silenced author's status only if they are followers or requesting to be" do
 | 
			
		||||
      bob    = Fabricate(:account, username: 'bob')
 | 
			
		||||
      alice  = Fabricate(:account, username: 'alice')
 | 
			
		||||
      foo    = Fabricate(:account)
 | 
			
		||||
      author = Fabricate(:account, username: 'author', silenced: true)
 | 
			
		||||
      status = Fabricate(:status, visibility: :direct, account: author)
 | 
			
		||||
      bob.follow!(author)
 | 
			
		||||
      FollowRequest.create!(account: foo, target_account: author)
 | 
			
		||||
      status.mentions.create(account: alice)
 | 
			
		||||
      status.mentions.create(account: bob)
 | 
			
		||||
      status.mentions.create(account: foo)
 | 
			
		||||
      expect(subject.to(status)).to include(subject.uri_for(bob))
 | 
			
		||||
      expect(subject.to(status)).to include(subject.uri_for(foo))
 | 
			
		||||
      expect(subject.to(status)).to_not include(subject.uri_for(alice))
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe '#cc' do
 | 
			
		||||
| 
						 | 
				
			
			@ -70,6 +86,22 @@ RSpec.describe ActivityPub::TagManager do
 | 
			
		|||
      status.mentions.create(account: mentioned)
 | 
			
		||||
      expect(subject.cc(status)).to include(subject.uri_for(mentioned))
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it "returns URIs of mentions for silenced author's non-direct status only if they are followers or requesting to be" do
 | 
			
		||||
      bob    = Fabricate(:account, username: 'bob')
 | 
			
		||||
      alice  = Fabricate(:account, username: 'alice')
 | 
			
		||||
      foo    = Fabricate(:account)
 | 
			
		||||
      author = Fabricate(:account, username: 'author', silenced: true)
 | 
			
		||||
      status = Fabricate(:status, visibility: :public, account: author)
 | 
			
		||||
      bob.follow!(author)
 | 
			
		||||
      FollowRequest.create!(account: foo, target_account: author)
 | 
			
		||||
      status.mentions.create(account: alice)
 | 
			
		||||
      status.mentions.create(account: bob)
 | 
			
		||||
      status.mentions.create(account: foo)
 | 
			
		||||
      expect(subject.cc(status)).to include(subject.uri_for(bob))
 | 
			
		||||
      expect(subject.cc(status)).to include(subject.uri_for(foo))
 | 
			
		||||
      expect(subject.cc(status)).to_not include(subject.uri_for(alice))
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe '#local_uri?' do
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Reference in a new issue