Migration to cleanup blocked users that are still following (#7773)
* Migration to cleanup blocked users that are still following * use follow directly, commit schema
This commit is contained in:
		
							parent
							
								
									d230066746
								
							
						
					
					
						commit
						896589e034
					
				
					 1 changed files with 40 additions and 0 deletions
				
			
		
							
								
								
									
										40
									
								
								db/migrate/20180608213548_reject_following_blocked_users.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								db/migrate/20180608213548_reject_following_blocked_users.rb
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,40 @@ | |||
| class RejectFollowingBlockedUsers < ActiveRecord::Migration[5.2] | ||||
|   disable_ddl_transaction! | ||||
| 
 | ||||
|   def up | ||||
|     blocked_follows = Follow.find_by_sql(<<-SQL) | ||||
|       select f.* from follows f | ||||
|       inner join blocks b on | ||||
|         f.account_id = b.target_account_id and | ||||
|         f.target_account_id = b.account_id | ||||
|     SQL | ||||
| 
 | ||||
|     domain_blocked_follows = Follow.find_by_sql(<<-SQL) | ||||
|       select f.* from follows f | ||||
|       inner join accounts following on f.account_id = following.id | ||||
|       inner join account_domain_blocks b on | ||||
|         lower(b.domain) = lower(following.domain) and | ||||
|         f.target_account_id = b.account_id | ||||
|     SQL | ||||
| 
 | ||||
|     follows = (blocked_follows + domain_blocked_follows).uniq | ||||
|     say "Destroying #{follows.size} blocked follow relationships..." | ||||
| 
 | ||||
|     follows.each do |follow| | ||||
|       blocked_account = follow.account | ||||
|       followed_acccount = follow.target_account | ||||
| 
 | ||||
|       next follow.destroy! if blocked_account.local? | ||||
| 
 | ||||
|       reject_follow_json = Oj.dump(ActivityPub::LinkedDataSignature.new(ActiveModelSerializers::SerializableResource.new(follow, serializer: ActivityPub::RejectFollowSerializer, adapter: ActivityPub::Adapter).as_json).sign!(followed_acccount)) | ||||
| 
 | ||||
|       ActivityPub::DeliveryWorker.perform_async(reject_follow_json, followed_acccount, blocked_account.inbox_url) | ||||
| 
 | ||||
|       follow.destroy! | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   def down | ||||
|     raise ActiveRecord::IrreversibleMigration | ||||
|   end | ||||
| end | ||||
		Loading…
	
		Reference in a new issue